diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..e6b4c38c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,14 @@ +.serverless +.build +.github +.gitignore +dist +postgres-data +es-data +matomo-data +matomo-db-data +nvd-dump +minio-data +**/node_modules +**/.cache +./docs/node_modules \ No newline at end of file diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f4119143..e4195476 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -3,10 +3,10 @@ # These owners will be the default owners for everything in the # repo. Unless a later match takes precedence, these owners will be # requested for review when someone opens a pull request. +<<<<<<< Updated upstream * @dav3r @felddy @jasonodoom @jsf9k @mcdonnnj @rapidray12 @schmelz1 @cdunn17 @aloftus23 @Matthew-Grayson @nickviola - # These folks own any files in the .github directory at the root of # the repository and any of its subdirectories. /.github/ @dav3r @felddy @jasonodoom @jsf9k @mcdonnnj diff --git a/.github/codeql.yml b/.github/codeql.yml new file mode 100644 index 00000000..61012f85 --- /dev/null +++ b/.github/codeql.yml @@ -0,0 +1,3 @@ +query-filters: + - exclude: + id: js/unused-local-variable diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 9d9c1bc4..b6f8e30f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,10 +1,5 @@ ---- - -# Any ignore directives should be uncommented in downstream projects to disable -# Dependabot updates for the given dependency. Downstream projects will get -# these updates when the pull request(s) in the appropriate skeleton are merged -# and Lineage processes these changes. +version: 2 updates: - directory: / # ignore: @@ -22,14 +17,50 @@ updates: package-ecosystem: github-actions schedule: interval: weekly - - - directory: / - package-ecosystem: pip - schedule: - interval: weekly - - directory: / package-ecosystem: terraform schedule: interval: weekly -version: 2 + - package-ecosystem: 'npm' + directory: '/' + schedule: + interval: 'weekly' + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-patch","version-update:semver-minor"] + - package-ecosystem: "npm" + directory: "/frontend" + schedule: + interval: "weekly" + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-patch","version-update:semver-minor"] + - package-ecosystem: "npm" + directory: "/backend" + schedule: + interval: "weekly" + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-patch","version-update:semver-minor"] + - package-ecosystem: "pip" + directory: "/backend/worker" + schedule: + interval: "weekly" + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-patch","version-update:semver-minor"] + - package-ecosystem: 'docker' + directory: '/' + schedule: + interval: 'weekly' + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-patch","version-update:semver-minor"] + - package-ecosystem: 'github-actions' + directory: '/' + schedule: + interval: 'weekly' + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-patch","version-update:semver-minor"] + diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml new file mode 100644 index 00000000..1681994d --- /dev/null +++ b/.github/workflows/backend.yml @@ -0,0 +1,240 @@ +name: Backend Pipeline + +on: + push: + branches: + - master + - production + paths: + - 'backend/**' + - '.github/workflows/backend.yml' + pull_request: + branches: + - master + - production + paths: + - 'backend/**' + - '.github/workflows/backend.yml' + +defaults: + run: + working-directory: ./backend + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + - name: Lint + run: npm run lint + test: + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + - name: Run site locally + run: | + cp dev.env.example .env + docker-compose up -d db backend es + npm install -g wait-port + wait-port -t 3000 5432 9200 9300 + working-directory: ./ + - name: Sync database + run: npm run syncdb + working-directory: ./backend + - name: Test + run: npm run test -- --collectCoverage --silent + - name: Package + run: npx sls package + env: + SLS_DEBUG: '*' + test_worker: + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + - name: Build + run: npx webpack --config webpack.worker.config.js + - name: Run db locally + run: | + cp dev.env.example .env + docker-compose up -d db + npm install -g wait-port + wait-port -t 3000 5432 + working-directory: ./ + - name: Test + run: node dist/worker.bundle.js + env: + CROSSFEED_COMMAND_OPTIONS: '{"scanName": "test"}' + DB_USERNAME: crossfeed + DB_PASSWORD: password + test_python: + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v3 + - name: Set up Python 3.10 + uses: actions/setup-python@v5.0.0 + with: + python-version: '3.10' + - uses: actions/cache@v3 + with: + path: ~/.cache/pip + key: pip-${{ hashFiles('**/requirements.txt') }} + restore-keys: | + pip- + - run: pip install -r worker/requirements.txt + - run: pytest + build_worker: + runs-on: ubuntu-latest + timeout-minutes: 90 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + - name: Build worker container + run: npm run build-worker + working-directory: ./backend + deploy_staging: + needs: [build_worker, lint, test, test_worker, test_python] + runs-on: ubuntu-latest + environment: staging + concurrency: 1 + if: github.event_name == 'push' && github.ref == 'refs/heads/master' + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + + - name: Ensure domain exists + run: npx sls create_domain --stage=staging + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + SLS_DEBUG: '*' + + - name: Deploy backend + run: npx sls deploy --stage=staging + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + SLS_DEBUG: '*' + + - name: Deploy worker + run: npm run deploy-worker-staging + working-directory: backend + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Run syncdb + run: aws lambda invoke --function-name crossfeed-staging-syncdb --region us-east-1 /dev/stdout + working-directory: backend + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + deploy_prod: + needs: [build_worker, lint, test, test_python] + runs-on: ubuntu-latest + environment: production + concurrency: 1 + if: github.event_name == 'push' && github.ref == 'refs/heads/production' + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + + - name: Ensure domain exists + run: npx sls create_domain --stage=prod + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + SLS_DEBUG: '*' + + - name: Deploy backend + run: npx sls deploy --stage=prod + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + SLS_DEBUG: '*' + + - name: Deploy worker + run: npm run deploy-worker-prod + working-directory: backend + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Run syncdb + run: aws lambda invoke --function-name crossfeed-prod-syncdb --region us-east-1 /dev/stdout + working-directory: backend + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..93488c83 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,42 @@ +name: "CodeQL" + +on: + push: + branches: [ "master", "production" ] + pull_request: + branches: [ "master" ] + schedule: + - cron: "23 17 * * 6" + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ javascript ] + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + config-file: ./.github/codeql.yml + queries: +security-and-quality + + - name: Autobuild + uses: github/codeql-action/autobuild@v3 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..b2617a3e --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,54 @@ +name: Docs +on: + push: + branches: + - master + paths: + - 'docs/**' + - 'backend/**' + - '.github/workflows/docs.yml' + pull_request: + branches: + - master + paths: + - 'docs/**' + - 'backend/**' + - '.github/workflows/docs.yml' + +defaults: + run: + working-directory: ./docs + +jobs: + deploy: + name: Build docs + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: sudo apt-get update && sudo apt-get install -y libvips-dev glib2.0-dev + - run: npm ci + - name: Lint + run: npm run lint + - name: Build + run: npm run build + # - name: Deploy to GitHub Pages + # if: github.event_name == 'push' && github.ref == 'refs/heads/master' + # uses: crazy-max/ghaction-github-pages@v3.0.0 + # with: + # keep_history: false + # target_branch: gh-pages + # build_dir: docs/public + # fqdn: docs.crossfeed.cyber.dhs.gov + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml new file mode 100644 index 00000000..83960f3e --- /dev/null +++ b/.github/workflows/frontend.yml @@ -0,0 +1,122 @@ +name: Frontend Pipeline + +on: + push: + branches: + - master + - production + paths: + - 'frontend/**' + - '.github/workflows/frontend.yml' + pull_request: + branches: + - master + - production + paths: + - 'frontend/**' + - '.github/workflows/frontend.yml' + +defaults: + run: + working-directory: ./frontend + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + - name: Lint + run: npm run lint + test: + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + - name: Build + run: npm run build + - name: Test + run: npm run test + deploy_staging: + needs: [lint, test] + runs-on: ubuntu-latest + environment: staging + concurrency: 1 + if: github.event_name == 'push' && github.ref == 'refs/heads/master' + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + - name: Build Staging + run: cp stage.env .env && npm run build + + - name: Deploy Staging + run: npx sls deploy --stage=staging + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + SLS_DEBUG: '*' + + deploy_prod: + needs: [lint, test] + runs-on: ubuntu-latest + environment: production + concurrency: 1 + if: github.event_name == 'push' && github.ref == 'refs/heads/production' + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + + - name: Build Production + run: cp prod.env .env && npm run build + + - name: Deploy Production + run: npx sls deploy --stage=staging + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + SLS_DEBUG: '*' diff --git a/.github/workflows/infrastructure.yml b/.github/workflows/infrastructure.yml new file mode 100644 index 00000000..a7e0d760 --- /dev/null +++ b/.github/workflows/infrastructure.yml @@ -0,0 +1,117 @@ +name: Infrastructure Pipeline + +on: + push: + branches: + - master + - production + paths: + - 'infrastructure/**' + - '.github/workflows/infrastructure.yml' + pull_request: + branches: + - master + - production + paths: + - 'infrastructure/**' + - '.github/workflows/infrastructure.yml' + +defaults: + run: + working-directory: ./infrastructure + +jobs: + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install Terraform + run: | + wget https://releases.hashicorp.com/terraform/1.0.7/terraform_1.0.7_linux_amd64.zip + unzip terraform_1.0.7_linux_amd64.zip + sudo mv terraform /usr/local/bin + + - name: Check format + run: terraform fmt -recursive -check -diff + + staging: + timeout-minutes: 4320 + runs-on: ubuntu-latest + environment: staging + concurrency: 1 + steps: + - uses: actions/checkout@v3 + + - name: Install Terraform + run: | + wget https://releases.hashicorp.com/terraform/1.0.7/terraform_1.0.7_linux_amd64.zip + unzip terraform_1.0.7_linux_amd64.zip + sudo mv terraform /usr/local/bin + + - name: Terraform init + run: terraform init -backend-config=stage.config + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Terraform validation + run: terraform validate + + - name: Terraform plan + run: terraform plan -var-file=stage.tfvars -out stage.plan + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Terraform apply + if: github.ref == 'refs/heads/master' + run: terraform apply stage.plan + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - if: ${{ always() }} + run: rm stage.plan || true + + prod: + timeout-minutes: 4320 + runs-on: ubuntu-latest + environment: production + concurrency: 1 + steps: + - uses: actions/checkout@v3 + + - name: Install Terraform + run: | + wget https://releases.hashicorp.com/terraform/1.0.7/terraform_1.0.7_linux_amd64.zip + unzip terraform_1.0.7_linux_amd64.zip + sudo mv terraform /usr/local/bin + + - name: Terraform init + run: terraform init -backend-config=prod.config -input=false + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Terraform validation + run: terraform validate + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Terraform plan + run: terraform plan -var-file=prod.tfvars -out prod.plan + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Terraform apply + if: github.ref == 'refs/heads/production' + run: terraform apply prod.plan + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - if: ${{ always() }} + run: rm prod.plan || true diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml new file mode 100644 index 00000000..1ae792b3 --- /dev/null +++ b/.github/workflows/security.yml @@ -0,0 +1,91 @@ +name: Check for Vulnerabilities + +on: + schedule: + - cron: '0 1 * * *' # every day at 1 AM + workflow_dispatch: + push: + +jobs: + backend: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./backend + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + - name: Security + run: npm audit --production + frontend: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./frontend + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + - name: Security + run: npm audit --production + docs: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./docs + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + - name: Security + run: npm audit --production + backend_python: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./backend + steps: + - uses: actions/checkout@v3 + - name: Set up Python 3.10 + uses: actions/setup-python@v5.0.0 + with: + python-version: '3.10' + - uses: actions/cache@v3 + with: + path: ~/.cache/pip + key: pip-${{ hashFiles('**/requirements.txt') }} + restore-keys: | + pip- + - run: pip install safety + - run: safety check -r worker/requirements.txt --policy-file ./worker/.safety-policy.yml diff --git a/.gitignore b/.gitignore index 937e21d0..3a4cea24 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,54 @@ +<<<<<<< HEAD # This file specifies intentionally untracked files that Git should ignore. # Files already tracked by Git are not affected. # See: https://git-scm.com/docs/gitignore -## Python ## -__pycache__ -.mypy_cache -.python-version +node_modules/ +backend/node_modules +.env +tmp/* +.DS_STORE +*/.DS_STORE + +# terraform +.terraform +terraform.tfstate +terraform.tfstate.backup +plan + +# dependencies +node_modules +frontend/.pnp +frontend/.pnp.js +backend/node_modules + +# testing +frontend/coverage +backend/coverage + +# production +frontend/build + +# misc +.DS_Store +.env + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +.serverless +.build +dist +postgres-data +es-data +matomo-data +matomo-db-data +nvd-dump +minio-data + +**.pyc +infrastructure/lambdas/security_headers.zip +*.hcl +.iac-data + diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..1387fd02 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "trailingComma": "none", + "tabWidth": 2, + "semi": true, + "singleQuote": true +} diff --git a/Dockerfile.docs b/Dockerfile.docs new file mode 100644 index 00000000..bed607ab --- /dev/null +++ b/Dockerfile.docs @@ -0,0 +1,24 @@ +# This file is built with Docker context in the main directory (not ./docs) +# so that ./backend is accessible. + +FROM node:18-alpine3.17 +USER root + +WORKDIR /app/docs + +RUN apk update && apk upgrade && apk add --update --no-cache build-base python3 vips-dev autoconf automake libtool make tiff jpeg zlib zlib-dev pkgconf nasm file gcc musl-dev + +COPY ./docs/package* ./ + +RUN npm install -g npm@9 + +RUN npm ci + +# Generate swagger definitions +COPY ./backend ../backend +COPY ./docs . + +# Configure port used by Gatsby +ENV INTERNAL_STATUS_PORT=44475 + +CMD npm run codegen; npm run develop -- -H 0.0.0.0 --port 4000 \ No newline at end of file diff --git a/LICENSE b/LICENSE index e3f1376c..67ee7c91 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,3 @@ -<<<<<<< HEAD CC0 1.0 Universal Statement of Purpose @@ -28,213 +27,90 @@ Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not limited -to, the following: + protected by copyright and related or neighboring rights ("Copyright and + Related Rights"). Copyright and Related Rights include, but are not limited + to, the following: - i. the right to reproduce, adapt, distribute, perform, display, communicate, - and translate a Work; +i. the right to reproduce, adapt, distribute, perform, display, communicate, +and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); +ii. moral rights retained by the original author(s) and/or performer(s); - iii. publicity and privacy rights pertaining to a person's image or likeness - depicted in a Work; +iii. publicity and privacy rights pertaining to a person's image or likeness +depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; +iv. rights protecting against unfair competition in regards to a Work, +subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data in - a Work; +v. rights protecting the extraction, dissemination, use and reuse of data in +a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and +vi. database rights (such as those arising under Directive 96/9/EC of the +European Parliament and of the Council of 11 March 1996 on the legal +protection of databases, and under any national implementation thereof, +including any amended or successor version of such directive); and - vii. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations thereof. +vii. other similar, equivalent or corresponding rights throughout the world +based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, -applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and -unconditionally waives, abandons, and surrenders all of Affirmer's Copyright -and Related Rights and associated claims and causes of action, whether now -known or unknown (including existing as well as future claims and causes of -action), in the Work (i) in all territories worldwide, (ii) for the maximum -duration provided by applicable law or treaty (including future time -extensions), (iii) in any current or future medium and for any number of -copies, and (iv) for any purpose whatsoever, including without limitation -commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes -the Waiver for the benefit of each member of the public at large and to the -detriment of Affirmer's heirs and successors, fully intending that such Waiver -shall not be subject to revocation, rescission, cancellation, termination, or -any other legal or equitable action to disrupt the quiet enjoyment of the Work -by the public as contemplated by Affirmer's express Statement of Purpose. + applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and + unconditionally waives, abandons, and surrenders all of Affirmer's Copyright + and Related Rights and associated claims and causes of action, whether now + known or unknown (including existing as well as future claims and causes of + action), in the Work (i) in all territories worldwide, (ii) for the maximum + duration provided by applicable law or treaty (including future time + extensions), (iii) in any current or future medium and for any number of + copies, and (iv) for any purpose whatsoever, including without limitation + commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes + the Waiver for the benefit of each member of the public at large and to the + detriment of Affirmer's heirs and successors, fully intending that such Waiver + shall not be subject to revocation, rescission, cancellation, termination, or + any other legal or equitable action to disrupt the quiet enjoyment of the Work + by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be -judged legally invalid or ineffective under applicable law, then the Waiver -shall be preserved to the maximum extent permitted taking into account -Affirmer's express Statement of Purpose. In addition, to the extent the Waiver -is so judged Affirmer hereby grants to each affected person a royalty-free, -non transferable, non sublicensable, non exclusive, irrevocable and -unconditional license to exercise Affirmer's Copyright and Related Rights in -the Work (i) in all territories worldwide, (ii) for the maximum duration -provided by applicable law or treaty (including future time extensions), (iii) -in any current or future medium and for any number of copies, and (iv) for any -purpose whatsoever, including without limitation commercial, advertising or -promotional purposes (the "License"). The License shall be deemed effective as -of the date CC0 was applied by Affirmer to the Work. Should any part of the -License for any reason be judged legally invalid or ineffective under -applicable law, such partial invalidity or ineffectiveness shall not -invalidate the remainder of the License, and in such case Affirmer hereby -affirms that he or she will not (i) exercise any of his or her remaining -Copyright and Related Rights in the Work or (ii) assert any associated claims -and causes of action with respect to the Work, in either case contrary to -Affirmer's express Statement of Purpose. + judged legally invalid or ineffective under applicable law, then the Waiver + shall be preserved to the maximum extent permitted taking into account + Affirmer's express Statement of Purpose. In addition, to the extent the Waiver + is so judged Affirmer hereby grants to each affected person a royalty-free, + non transferable, non sublicensable, non exclusive, irrevocable and + unconditional license to exercise Affirmer's Copyright and Related Rights in + the Work (i) in all territories worldwide, (ii) for the maximum duration + provided by applicable law or treaty (including future time extensions), (iii) + in any current or future medium and for any number of copies, and (iv) for any + purpose whatsoever, including without limitation commercial, advertising or + promotional purposes (the "License"). The License shall be deemed effective as + of the date CC0 was applied by Affirmer to the Work. Should any part of the + License for any reason be judged legally invalid or ineffective under + applicable law, such partial invalidity or ineffectiveness shall not + invalidate the remainder of the License, and in such case Affirmer hereby + affirms that he or she will not (i) exercise any of his or her remaining + Copyright and Related Rights in the Work or (ii) assert any associated claims + and causes of action with respect to the Work, in either case contrary to + Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. +a. No trademark or patent rights held by Affirmer are waived, abandoned, +surrendered, licensed or otherwise affected by this document. - b. Affirmer offers the Work as-is and makes no representations or warranties - of any kind concerning the Work, express, implied, statutory or otherwise, - including without limitation warranties of title, merchantability, fitness - for a particular purpose, non infringement, or the absence of latent or - other defects, accuracy, or the present or absence of errors, whether or not - discoverable, all to the greatest extent permissible under applicable law. +b. Affirmer offers the Work as-is and makes no representations or warranties +of any kind concerning the Work, express, implied, statutory or otherwise, +including without limitation warranties of title, merchantability, fitness +for a particular purpose, non infringement, or the absence of latent or +other defects, accuracy, or the present or absence of errors, whether or not +discoverable, all to the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without limitation - any person's Copyright and Related Rights in the Work. Further, Affirmer - disclaims responsibility for obtaining any necessary consents, permissions - or other rights required for any use of the Work. +c. Affirmer disclaims responsibility for clearing rights of other persons +that may apply to the Work or any use thereof, including without limitation +any person's Copyright and Related Rights in the Work. Further, Affirmer +disclaims responsibility for obtaining any necessary consents, permissions +or other rights required for any use of the Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to this - CC0 or use of the Work. +d. Affirmer understands and acknowledges that Creative Commons is not a +party to this document and has no duty or obligation with respect to this +CC0 or use of the Work. For more information, please see - -======= -Creative Commons Legal Code - -CC0 1.0 Universal - - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS - PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM - THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED - HEREUNDER. - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator -and subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for -the purpose of contributing to a commons of creative, cultural and -scientific works ("Commons") that the public can reliably and without fear -of later claims of infringement build upon, modify, incorporate in other -works, reuse and redistribute as freely as possible in any form whatsoever -and for any purposes, including without limitation commercial purposes. -These owners may contribute to the Commons to promote the ideal of a free -culture and the further production of creative, cultural and scientific -works, or to gain reputation or greater distribution for their Work in -part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any -expectation of additional consideration or compensation, the person -associating CC0 with a Work (the "Affirmer"), to the extent that he or she -is an owner of Copyright and Related Rights in the Work, voluntarily -elects to apply CC0 to the Work and publicly distribute the Work under its -terms, with knowledge of his or her Copyright and Related Rights in the -Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not -limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or - likeness depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation - thereof, including any amended or successor version of such - directive); and -vii. other similar, equivalent or corresponding rights throughout the - world based on applicable law or treaty, and any national - implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention -of, applicable law, Affirmer hereby overtly, fully, permanently, -irrevocably and unconditionally waives, abandons, and surrenders all of -Affirmer's Copyright and Related Rights and associated claims and causes -of action, whether now known or unknown (including existing as well as -future claims and causes of action), in the Work (i) in all territories -worldwide, (ii) for the maximum duration provided by applicable law or -treaty (including future time extensions), (iii) in any current or future -medium and for any number of copies, and (iv) for any purpose whatsoever, -including without limitation commercial, advertising or promotional -purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each -member of the public at large and to the detriment of Affirmer's heirs and -successors, fully intending that such Waiver shall not be subject to -revocation, rescission, cancellation, termination, or any other legal or -equitable action to disrupt the quiet enjoyment of the Work by the public -as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason -be judged legally invalid or ineffective under applicable law, then the -Waiver shall be preserved to the maximum extent permitted taking into -account Affirmer's express Statement of Purpose. In addition, to the -extent the Waiver is so judged Affirmer hereby grants to each affected -person a royalty-free, non transferable, non sublicensable, non exclusive, -irrevocable and unconditional license to exercise Affirmer's Copyright and -Related Rights in the Work (i) in all territories worldwide, (ii) for the -maximum duration provided by applicable law or treaty (including future -time extensions), (iii) in any current or future medium and for any number -of copies, and (iv) for any purpose whatsoever, including without -limitation commercial, advertising or promotional purposes (the -"License"). The License shall be deemed effective as of the date CC0 was -applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder -of the License, and in such case Affirmer hereby affirms that he or she -will not (i) exercise any of his or her remaining Copyright and Related -Rights in the Work or (ii) assert any associated claims and causes of -action with respect to the Work, in either case contrary to Affirmer's -express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - b. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, - statutory or otherwise, including without limitation warranties of - title, merchantability, fitness for a particular purpose, non - infringement, or the absence of latent or other defects, accuracy, or - the present or absence of errors, whether or not discoverable, all to - the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person's Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the - Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. ->>>>>>> origin/develop + \ No newline at end of file diff --git a/README.md b/README.md index 59671e9b..a7c71c95 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,31 @@ -# ASM-Dashboard # +# XFD # [![GitHub Build Status](https://github.com/cisagov/ASM-Dashboard/workflows/build/badge.svg)](https://github.com/cisagov/ASM-Dashboard/actions) -This is a generic skeleton project that can be used to quickly get a -new [cisagov](https://github.com/cisagov) GitHub project started. -This skeleton project contains [licensing information](LICENSE), as -well as [pre-commit hooks](https://pre-commit.com) and -[GitHub Actions](https://github.com/features/actions) configurations -appropriate for the major languages that we use. - -In many cases you will instead want to use one of the more specific -skeleton projects derived from this one. - -## New Repositories from a Skeleton ## - -Please see our [Project Setup guide](https://github.com/cisagov/development-guide/tree/develop/project_setup) -for step-by-step instructions on how to start a new repository from -a skeleton. This will save you time and effort when configuring a -new repository! ## Contributing ## We welcome contributions! Please see [`CONTRIBUTING.md`](CONTRIBUTING.md) for details. -## License ## +![Deploy Backend](https://github.com/cisagov/crossfeed/workflows/Backend%20Pipeline/badge.svg?branch=master) +![Deploy Frontend](https://github.com/cisagov/crossfeed/workflows/Frontend%20Pipeline/badge.svg?branch=master) +![Deploy Infrastructure](https://github.com/cisagov/crossfeed/workflows/Deploy%20Infrastructure/badge.svg?branch=master) +[![serverless](http://public.serverless.com/badges/v3.svg)](http://www.serverless.com) +[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier) + +# Crossfeed + +Crossfeed is a tool that continuously enumerates and monitors an organization's public-facing attack surface in order to discover assets and flag potential security flaws. By operating in either passive or active scanning modes, Crossfeed collects data from a variety of open source tools and data feeds to provide actionable information about organization assets. Crossfeed is offered as a self-service portal and allows customers to view reports and customize scans performed. + +Crossfeed is a collaboration between the [Cybersecurity and Infrastructure Security Agency](https://www.cisa.gov/) and the [Defense Digital Service](https://dds.mil/). + +## Documentation + +See [https://docs.crossfeed.cyber.dhs.gov](https://docs.crossfeed.cyber.dhs.gov) for documentation on both how to use Crossfeed and how to contribute to it. + +## Public domain +>>>>>>> crossfeed/master This project is in the worldwide [public domain](LICENSE). diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 00000000..510052ca --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,7 @@ +node_modules +.build +.serverless +dist +Dockerfile* +nvd-dump +coverage \ No newline at end of file diff --git a/backend/.eslintrc.yml b/backend/.eslintrc.yml new file mode 100644 index 00000000..28a7af26 --- /dev/null +++ b/backend/.eslintrc.yml @@ -0,0 +1,20 @@ +{ + "env": { "es6": true, "node": true }, + "parser": "@typescript-eslint/parser", + "ignorePatterns": ["dist/**"], + "extends": + [ + "plugin:prettier/recommended", + "plugin:@typescript-eslint/eslint-recommended", + ], + "plugins": ["prettier", "@typescript-eslint"], + "parserOptions": { "ecmaVersion": 2018, "sourceType": "module" }, + "rules": + { + "prettier/prettier": "error", + "react/prop-types": 0, + "react/display-name": 0, + }, + "settings": { "react": { "version": "detect" } }, + "globals": { "Atomics": "readonly", "SharedArrayBuffer": "readonly" }, +} diff --git a/backend/.npmrc b/backend/.npmrc new file mode 100644 index 00000000..4fd02195 --- /dev/null +++ b/backend/.npmrc @@ -0,0 +1 @@ +engine-strict=true \ No newline at end of file diff --git a/backend/.snyk b/backend/.snyk new file mode 100644 index 00000000..540e11d0 --- /dev/null +++ b/backend/.snyk @@ -0,0 +1,13 @@ +# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. + +version: v1.22.1 + +# ignores vulnerabilities until expiry date; change duration by modifying expiry date + +ignore: + # ignore scrapy 2.x.x for 6 months. + SNYK-PYTHON-SCRAPY-40690: + - '*': + reason: No fix available up to version 2.11.0 + expires: 2024-06-01T00:00:00.000Z +patch: {} diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 00000000..a45d7240 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,16 @@ +FROM node:18-alpine3.17 +USER root + +RUN apk update && apk upgrade + +WORKDIR /app +COPY ./package* ./ + +RUN npm install -g npm@9 +RUN PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm ci + +COPY . . + +ENV IS_OFFLINE "true" + +CMD ["npx", "ts-node-dev", "src/api-dev.ts"] diff --git a/backend/Dockerfile.pe b/backend/Dockerfile.pe new file mode 100644 index 00000000..eb0fa4b1 --- /dev/null +++ b/backend/Dockerfile.pe @@ -0,0 +1,43 @@ +FROM node:18-bullseye as build +USER root + +WORKDIR /app + +COPY ./package* ./ + +COPY src ./src + +RUN apt update && apt install git zlib1g-dev + +RUN apt-get update && apt-get install -y jq + +RUN wget -c https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tar.xz && tar -Jxvf Python-3.10.11.tar.xz +RUN cd Python-3.10.11 && ./configure && make -j4 && make altinstall +RUN update-alternatives --install /usr/bin/python python /usr/local/bin/python3.10 1 +RUN update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip3.10 1 +RUN pip3.10 install --upgrade pip + +RUN apt remove dav1d && apt autoclean && apt autoremove + +# Install AWS CLI +RUN curl --insecure "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" +RUN unzip awscliv2.zip +RUN ./aws/install + +# Install pe-source module +# Sync the latest from cf-staging branch +RUN git clone -b AL-staging-SQS https://github.com/cisagov/pe-reports.git && \ + cd pe-reports && \ + git checkout 6405a2041656152b176b5fc9b3becb5dc11a5f3e && \ + pip install . + +RUN python -m spacy download en_core_web_lg + +# Create database.ini +RUN echo "[database]" > database.ini \ + && echo "user=$(cat db_user.txt)" >> database.ini \ + && echo "password=$(cat db_password.txt)" >> database.ini + +COPY worker worker + +CMD ["./worker/generate_config.sh", "./worker/pe-worker-entry.sh"] diff --git a/backend/Dockerfile.worker b/backend/Dockerfile.worker new file mode 100644 index 00000000..e33a19ad --- /dev/null +++ b/backend/Dockerfile.worker @@ -0,0 +1,87 @@ +FROM node:18-alpine3.17 as build +USER root + +RUN apk update && apk upgrade + +WORKDIR /app + +COPY ./package* ./ + +RUN npm install -g npm@9 + +RUN PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm ci + +COPY tsconfig.json ./tsconfig.json +COPY webpack.worker.config.js ./webpack.worker.config.js +COPY mock.js ./mock.js +COPY src ./src + +RUN npx webpack --config webpack.worker.config.js + +FROM golang:1.19-alpine as deps + +RUN apk update && apk upgrade + +WORKDIR /app + +RUN apk add --no-cache curl unzip musl-dev + +RUN curl -4LO http://github.com/Findomain/Findomain/releases/latest/download/findomain-linux.zip +RUN unzip findomain-linux.zip && chmod +x findomain && cp findomain /usr/bin/findomain + +RUN go mod init crossfeed-worker + +RUN go install github.com/facebookincubator/nvdtools/...@latest +RUN go install -v github.com/owasp-amass/amass/v3/...@master + +FROM ruby:alpine as rubyBuild + +RUN apk add --update --no-cache build-base git ruby ruby-dev openssl-dev + +RUN gem install bundler:2.3.21 +RUN export RUBY_VERSION=$(ruby -e "print RUBY_VERSION") && git clone https://github.com/intrigueio/intrigue-ident.git && cd intrigue-ident && git checkout ee119abeac20564e728a92ab786400126e7a97f0 && sed -i "s/2.7.2/$RUBY_VERSION/g" Gemfile && sed -i "s/2.7.2p114/$RUBY_VERSION/g" Gemfile.lock && bundle install --jobs=4 +RUN echo 'cd /app/intrigue-ident && bundle exec ruby ./util/ident.rb $@' > /usr/bin/intrigue-ident && chmod +x /usr/bin/intrigue-ident + +FROM node:18-bullseye + +#RUN apt update && apt upgrade -y && apt install zip -y +RUN apt update && apt install wget build-essential libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev zip git -y +WORKDIR /app + +RUN npm install -g pm2@5 wait-port@1 +RUN wget -c https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tar.xz && tar -Jxvf Python-3.10.11.tar.xz + +RUN cd Python-3.10.11 && ./configure && make -j4 && make altinstall +RUN update-alternatives --install /usr/bin/python python /usr/local/bin/python3.10 1 +RUN update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip3.10 1 +RUN pip3.10 install --upgrade pip + +RUN apt remove dav1d && apt autoclean && apt autoremove + +# Install pe-source module +# Sync the latest from cf-staging branch +RUN git clone -b cf-source-staging https://github.com/cisagov/pe-reports.git && cd pe-reports && git checkout c9cbbd73b22ef38cabe1da6ba50aeb2dc0be4f99 && sed -i 's/"pandas == 1.1.5"/"pandas == 1.5.1"/g' setup.py && sed -i 's/psycopg2-binary == 2.9.3/psycopg2-binary == 2.9.5/g' setup.py && sed -i 's/psycopg2-binary == 2.9.3/psycopg2-binary == 2.9.5/g' setup_reports.py && pip install . +# Python dependencies + +COPY worker/requirements.txt worker/requirements.txt + +RUN pip install -r worker/requirements.txt + +COPY worker worker + +RUN wget https://publicsuffix.org/list/public_suffix_list.dat --no-use-server-timestamps + +COPY --from=build /app/dist/worker.bundle.js worker.bundle.js + +COPY --from=deps /usr/bin/findomain /usr/bin/ +COPY --from=deps /go/bin/amass /usr/bin/ +COPY --from=deps /go/bin/csv2cpe /go/bin/nvdsync /go/bin/cpe2cve /usr/bin/ + +COPY --from=deps /etc/ssl/certs /etc/ssl/certs + +COPY --from=rubyBuild /usr/bin/intrigue-ident /usr/bin/ + +ENV GLOBAL_AGENT_HTTP_PROXY=http://localhost:8080 +ENV GLOBAL_AGENT_NO_PROXY=censys.io + +CMD ["./worker/worker-entry.sh"] diff --git a/backend/db-init/create-test-db.sh b/backend/db-init/create-test-db.sh new file mode 100755 index 00000000..77190622 --- /dev/null +++ b/backend/db-init/create-test-db.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e +set -u + +psql -v ON_ERROR_STOP=1 --username "$DB_USERNAME" <<-EOSQL + CREATE DATABASE crossfeed_test; + GRANT ALL PRIVILEGES ON DATABASE crossfeed_test TO $DB_USERNAME; +EOSQL \ No newline at end of file diff --git a/backend/env.yml b/backend/env.yml new file mode 100644 index 00000000..da3362d8 --- /dev/null +++ b/backend/env.yml @@ -0,0 +1,124 @@ +dev: + DUMMY: + +staging: + DB_DIALECT: 'postgres' + DB_PORT: 5432 + DB_HOST: ${ssm:/crossfeed/staging/DATABASE_HOST} + DB_NAME: ${ssm:/crossfeed/staging/DATABASE_NAME} + DB_USERNAME: ${ssm:/crossfeed/staging/DATABASE_USER} + DB_PASSWORD: ${ssm:/crossfeed/staging/DATABASE_PASSWORD} + PE_DB_NAME: ${ssm:/crossfeed/staging/PE_DB_NAME} + PE_DB_USERNAME: ${ssm:/crossfeed/staging/PE_DB_USERNAME} + PE_DB_PASSWORD: ${ssm:/crossfeed/staging/PE_DB_PASSWORD} + SIXGILL_CLIENT_ID: ${ssm:/crossfeed/staging/SIXGILL_CLIENT_ID} + SIXGILL_CLIENT_SECRET: ${ssm:/crossfeed/staging/SIXGILL_CLIENT_SECRET} + INTELX_API_KEY: ${ssm:/crossfeed/staging/INTELX_API_KEY} + HIBP_API_KEY: ${ssm:/crossfeed/staging/HIBP_API_KEY} + PE_SHODAN_API_KEYS: ${ssm:/crossfeed/staging/PE_SHODAN_API_KEYS} + JWT_SECRET: ${ssm:/crossfeed/staging/APP_JWT_SECRET} + LOGIN_GOV_REDIRECT_URI: ${ssm:/crossfeed/staging/LOGIN_GOV_REDIRECT_URI} + LOGIN_GOV_BASE_URL: ${ssm:/crossfeed/staging/LOGIN_GOV_BASE_URL} + LOGIN_GOV_JWT_KEY: ${ssm:/crossfeed/staging/LOGIN_GOV_JWT_KEY} + LOGIN_GOV_ISSUER: ${ssm:/crossfeed/staging/LOGIN_GOV_ISSUER} + DOMAIN: ${ssm:/crossfeed/staging/DOMAIN} + FARGATE_SG_ID: ${ssm:/crossfeed/staging/WORKER_SG_ID} + FARGATE_SUBNET_ID: ${ssm:/crossfeed/staging/WORKER_SUBNET_ID} + FARGATE_MAX_CONCURRENCY: 100 + SCHEDULER_ORGS_PER_SCANTASK: 10 + FARGATE_CLUSTER_NAME: 'crossfeed-staging-worker' + FARGATE_TASK_DEFINITION_NAME: 'crossfeed-staging-worker' + FARGATE_LOG_GROUP_NAME: 'crossfeed-staging-worker' + CROSSFEED_SUPPORT_EMAIL_SENDER: 'noreply@staging.crossfeed.cyber.dhs.gov' + CROSSFEED_SUPPORT_EMAIL_REPLYTO: 'vulnerability@cisa.dhs.gov' + FRONTEND_DOMAIN: 'https://staging-cd.crossfeed.cyber.dhs.gov' + SLS_LAMBDA_PREFIX: '${self:service}-${self:provider.stage}' + USE_COGNITO: 1 + REACT_APP_USER_POOL_ID: us-east-1_uxiY8DOum + WORKER_USER_AGENT: ${ssm:/crossfeed/staging/WORKER_USER_AGENT} + WORKER_SIGNATURE_PUBLIC_KEY: ${ssm:/crossfeed/staging/WORKER_SIGNATURE_PUBLIC_KEY} + ELASTICSEARCH_ENDPOINT: ${ssm:/crossfeed/staging/ELASTICSEARCH_ENDPOINT} + REACT_APP_TERMS_VERSION: ${ssm:/crossfeed/staging/REACT_APP_TERMS_VERSION} + REACT_APP_RANDOM_PASSWORD: ${ssm:/crossfeed/staging/REACT_APP_RANDOM_PASSWORD} + MATOMO_URL: http://matomo.crossfeed.local + EXPORT_BUCKET_NAME: cisa-crossfeed-staging-exports + PE_API_URL: ${ssm:/crossfeed/staging/PE_API_URL} + REPORTS_BUCKET_NAME: cisa-crossfeed-staging-reports + CLOUDWATCH_BUCKET_NAME: cisa-crossfeed-staging-cloudwatch + STAGE: staging + PE_CLUSTER_NAME: pe-staging-worker + SHODAN_QUEUE_URL: ${ssm:/crossfeed/staging/SHODAN_QUEUE_URL} + SHODAN_SERVICE_NAME: pe-staging-shodan + DNSTWIST_QUEUE_URL: ${ssm:/crossfeed/staging/DNSTWIST_QUEUE_URL} + DNSTWIST_SERVICE_NAME: pe-staging-dnstwist + HIBP_QUEUE_URL: ${ssm:/crossfeed/staging/HIBP_QUEUE_URL} + HIBP_SERVICE_NAME: pe-staging-hibp + INTELX_QUEUE_URL: ${ssm:/crossfeed/staging/INTELX_QUEUE_URL} + INTELX_SERVICE_NAME: pe-staging-intelx + CYBERSIXGILL_QUEUE_URL: ${ssm:/crossfeed/staging/CYBERSIXGILL_QUEUE_URL} + CYBERSIXGILL_SERVICE_NAME: pe-staging-cybersixgill + EMAIL_BUCKET_NAME: cisa-crossfeed-staging-html-email + +prod: + DB_DIALECT: 'postgres' + DB_PORT: 5432 + DB_HOST: ${ssm:/crossfeed/prod/DATABASE_HOST} + DB_NAME: ${ssm:/crossfeed/prod/DATABASE_NAME} + DB_USERNAME: ${ssm:/crossfeed/prod/DATABASE_USER} + DB_PASSWORD: ${ssm:/crossfeed/prod/DATABASE_PASSWORD} + JWT_SECRET: ${ssm:/crossfeed/prod/APP_JWT_SECRET} + LOGIN_GOV_REDIRECT_URI: ${ssm:/crossfeed/prod/LOGIN_GOV_REDIRECT_URI} + LOGIN_GOV_BASE_URL: ${ssm:/crossfeed/prod/LOGIN_GOV_BASE_URL} + LOGIN_GOV_JWT_KEY: ${ssm:/crossfeed/prod/LOGIN_GOV_JWT_KEY} + LOGIN_GOV_ISSUER: ${ssm:/crossfeed/prod/LOGIN_GOV_ISSUER} + DOMAIN: ${ssm:/crossfeed/prod/DOMAIN} + FARGATE_SG_ID: ${ssm:/crossfeed/prod/WORKER_SG_ID} + FARGATE_SUBNET_ID: ${ssm:/crossfeed/prod/WORKER_SUBNET_ID} + FARGATE_MAX_CONCURRENCY: 300 + SCHEDULER_ORGS_PER_SCANTASK: 50 + FARGATE_CLUSTER_NAME: 'crossfeed-prod-worker' + FARGATE_TASK_DEFINITION_NAME: 'crossfeed-prod-worker' + FARGATE_LOG_GROUP_NAME: 'crossfeed-prod-worker' + CROSSFEED_SUPPORT_EMAIL_SENDER: 'noreply@crossfeed.cyber.dhs.gov' + CROSSFEED_SUPPORT_EMAIL_REPLYTO: 'vulnerability@cisa.dhs.gov' + FRONTEND_DOMAIN: 'https://crossfeed.cyber.dhs.gov' + SLS_LAMBDA_PREFIX: '${self:service}-${self:provider.stage}' + USE_COGNITO: 1 + REACT_APP_USER_POOL_ID: us-east-1_MZgKoBmkN + WORKER_USER_AGENT: ${ssm:/crossfeed/prod/WORKER_USER_AGENT} + WORKER_SIGNATURE_PUBLIC_KEY: ${ssm:/crossfeed/prod/WORKER_SIGNATURE_PUBLIC_KEY} + ELASTICSEARCH_ENDPOINT: ${ssm:/crossfeed/prod/ELASTICSEARCH_ENDPOINT} + REACT_APP_TERMS_VERSION: ${ssm:/crossfeed/prod/REACT_APP_TERMS_VERSION} + REACT_APP_RANDOM_PASSWORD: ${ssm:/crossfeed/prod/REACT_APP_RANDOM_PASSWORD} + MATOMO_URL: http://matomo.crossfeed.local + EXPORT_BUCKET_NAME: cisa-crossfeed-prod-exports + PE_API_URL: ${ssm:/crossfeed/prod/PE_API_URL} + REPORTS_BUCKET_NAME: cisa-crossfeed-prod-reports + CLOUDWATCH_BUCKET_NAME: cisa-crossfeed-prod-cloudwatch + STAGE: prod + PE_CLUSTER_NAME: pe-prod-worker + SHODAN_QUEUE_URL: ${ssm:/crossfeed/prod/SHODAN_QUEUE_URL} + SHODAN_SERVICE_NAME: pe-prod-shodan + EMAIL_BUCKET_NAME: cisa-crossfeed-staging-html-email + +dev-vpc: + securityGroupIds: + - dummy + subnetIds: + - dummy + +staging-vpc: + securityGroupIds: + - ${ssm:/crossfeed/staging/SG_ID} + subnetIds: + - ${ssm:/crossfeed/staging/SUBNET_ID} + +prod-vpc: + securityGroupIds: + - ${ssm:/crossfeed/prod/SG_ID} + subnetIds: + - ${ssm:/crossfeed/prod/SUBNET_ID} + +staging-ecs-cluster: ${ssm:/crossfeed/staging/WORKER_CLUSTER_ARN} + +prod-ecs-cluster: ${ssm:/crossfeed/prod/WORKER_CLUSTER_ARN} diff --git a/backend/jest.config.js b/backend/jest.config.js new file mode 100644 index 00000000..ead48b60 --- /dev/null +++ b/backend/jest.config.js @@ -0,0 +1,34 @@ +require('dotenv').config({ path: '../.env' }); +process.env.BACKEND_URL = ''; +process.env.DB_HOST = 'localhost'; +process.env.DB_NAME = 'crossfeed_test'; +process.env.IS_LOCAL = 'true'; +process.env.CENSYS_API_ID = 'CENSYS_API_ID'; +process.env.CENSYS_API_SECRET = 'CENSYS_API_SECRET'; +process.env.SHODAN_API_KEY = 'SHODAN_API_KEY'; +process.env.FARGATE_LOG_GROUP_NAME = 'FARGATE_LOG_GROUP_NAME'; +process.env.FARGATE_MAX_CONCURRENCY = 100; +process.env.SCHEDULER_ORGS_PER_SCANTASK = 1; +process.env.USE_COGNITO = ''; +process.env.AWS_ACCESS_KEY_ID = 'AWS_ACCESS_KEY_ID'; +process.env.AWS_SECRET_ACCESS_KEY = 'AWS_SECRET_ACCESS_KEY'; + +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + modulePathIgnorePatterns: ['/.build/'], + globalSetup: '/test/setup.ts', + clearMocks: true, + coveragePathIgnorePatterns: [ + '/node_modules/', + '.*report.*' // Remove this when we enable report / vulnerability functionality + ], + moduleNameMapper: { + '^axios$': require.resolve('axios') + }, + coverageThreshold: { + global: { + branches: 50 + } + } +}; diff --git a/backend/mock.js b/backend/mock.js new file mode 100644 index 00000000..ff8b4c56 --- /dev/null +++ b/backend/mock.js @@ -0,0 +1 @@ +export default {}; diff --git a/backend/package-lock.json b/backend/package-lock.json new file mode 100644 index 00000000..c3a473d7 --- /dev/null +++ b/backend/package-lock.json @@ -0,0 +1,19770 @@ +{ + "name": "crossfeed-backend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "crossfeed-backend", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@aws-sdk/client-cloudwatch-logs": "^3.417.0", + "@aws-sdk/client-ssm": "^3.414.0", + "@elastic/elasticsearch": "~7.10.0", + "@thefaultvault/tfv-cpe-parser": "^1.3.0", + "@types/dockerode": "^3.3.19", + "amqplib": "^0.10.3", + "aws-sdk": "^2.1551.0", + "axios": "^1.6", + "body-parser": "^1.19.0", + "bufferutil": "^4.0.7", + "class-transformer": "^0.3.1", + "class-validator": "^0.14.0", + "cookie": "^0.4.1", + "cookie-parser": "^1.4.6", + "cors": "^2.8.5", + "date-fns": "^3.3.1", + "express": "^4.18.1", + "global-agent": "^2.2.0", + "got": "^11.8.5", + "handlebars": "^4.7.8", + "helmet": "^4.1.1", + "http-proxy-middleware": "^2.0.6", + "ip": "^1.1.9", + "jsdom": "^22.1", + "jsonwebtoken": "^9.0.2", + "jwks-rsa": "^3.0", + "lodash": "^4.17.21", + "nodemailer": "^6.7.2", + "openid-client": "^5.4", + "p-queue": "^6.6.2", + "p-retry": "^4.6.1", + "papaparse": "^5.3.1", + "pg": "^8.11", + "portscanner": "^2.2.0", + "reflect-metadata": "^0.1.13", + "serverless-http": "^3.2.0", + "ssl-checker": "^2.0.7", + "tough-cookie": "^4.1.3", + "typeorm": "^0.2.45", + "utf-8-validate": "^6.0.3", + "uuid": "^9.0.1", + "wappalyzer": "^6.10.63", + "wappalyzer-core": "^6.10.63", + "ws": "^8.13.0" + }, + "devDependencies": { + "@jest/globals": "^29", + "@types/aws-lambda": "^8.10.62", + "@types/cors": "^2.8.17", + "@types/dockerode": "^3.3.19", + "@types/jest": "^27", + "@types/node": "^20.6", + "@types/node-fetch": "^2.6.4", + "@types/nodemailer": "^6.4.0", + "@types/papaparse": "^5.3.0", + "@types/supertest": "^2.0", + "@types/uuid": "^9.0.7", + "@typescript-eslint/eslint-plugin": "^5.59", + "@typescript-eslint/parser": "^5.59", + "debug": "^4.3.4", + "dockerode": "^3.3.1", + "dotenv": "^16.0", + "eslint": "^8.46.0", + "eslint-config-prettier": "^6.12.0", + "eslint-plugin-prettier": "^5.0.0", + "jest": "^27", + "json-schema-to-typescript": "^13.0", + "nock": "^13.0.4", + "prettier": "^3.0.0", + "sentencer": "^0.2.1", + "serverless": "^3.30", + "serverless-domain-manager": "^7.0", + "serverless-dotenv-plugin": "^6.0.0", + "serverless-webpack": "^5.11.0", + "supertest": "^6.3", + "ts-jest": "^27", + "ts-loader": "^9.4.1", + "ts-node": "^10.9", + "ts-node-dev": "^2.0.0", + "typescript": "^4.9", + "wait-for-expect": "^3.0.2", + "webpack": "^5.88", + "webpack-cli": "^5.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@acuminous/bitsyntax": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@acuminous/bitsyntax/-/bitsyntax-0.1.2.tgz", + "integrity": "sha512-29lUK80d1muEQqiUsSo+3A0yP6CdspgC95EnKBMi22Xlwt79i/En4Vr67+cXhU+cZjbti3TgGGC5wy1stIywVQ==", + "dependencies": { + "buffer-more-ints": "~1.0.0", + "debug": "^4.3.4", + "safe-buffer": "~5.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/@acuminous/bitsyntax/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "dev": true, + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32c/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "dev": true, + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-acm": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-acm/-/client-acm-3.398.0.tgz", + "integrity": "sha512-NSrWuzzrGWDBfk3Y5U6sNis+c6fluNFA2y9jPIJxnB4U26F6ntBDxqI3Hiuscknzd8+RGoNVMZxaoMqBPBGccQ==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.398.0", + "@aws-sdk/credential-provider-node": "3.398.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.398.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.5", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.5", + "@smithy/util-defaults-mode-node": "^2.0.5", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-api-gateway": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-api-gateway/-/client-api-gateway-3.398.0.tgz", + "integrity": "sha512-WS0f4r2jsTeiGMvnN7JbqV/f6S7Cs4f8FluhgauWCw9mecGOJP5YD6u4oDk4rub3urtNuo+qOpH8TVG3fJ2hVg==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.398.0", + "@aws-sdk/credential-provider-node": "3.398.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-api-gateway": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.398.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.5", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.5", + "@smithy/util-defaults-mode-node": "^2.0.5", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-apigatewayv2": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-apigatewayv2/-/client-apigatewayv2-3.398.0.tgz", + "integrity": "sha512-Au5XNhU7q2sxMbURGTmK6AWvCpwv7mzsTtum6pZk0xSUDBa81GCR/LP7oXkFjSKpbSgDebjBGKX9MNF7E1bWrg==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.398.0", + "@aws-sdk/credential-provider-node": "3.398.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.398.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.5", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.5", + "@smithy/util-defaults-mode-node": "^2.0.5", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.451.0.tgz", + "integrity": "sha512-rc8MWRsWA1OgOq/hASLONtVTEbRggjf8VFYmW7UdL1g+oRQoDFWEWPv7kW5868UTpS6SmHdjCrXP8YREtR4ZSQ==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.451.0", + "@aws-sdk/core": "3.451.0", + "@aws-sdk/credential-provider-node": "3.451.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-signing": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", + "@smithy/util-waiter": "^2.0.13", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/client-sso": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.451.0.tgz", + "integrity": "sha512-KkYSke3Pdv3MfVH/5fT528+MKjMyPKlcLcd4zQb0x6/7Bl7EHrPh1JZYjzPLHelb+UY5X0qN8+cb8iSu1eiwIQ==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.451.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/client-sts": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.451.0.tgz", + "integrity": "sha512-48NcIRxWBdP1fom6RSjwn2R2u7SE7eeV3p+c4s7ukEOfrHhBxJfn3EpqBVQMGzdiU55qFImy+Fe81iA2lXq3Jw==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.451.0", + "@aws-sdk/credential-provider-node": "3.451.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-sdk-sts": "3.451.0", + "@aws-sdk/middleware-signing": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.451.0.tgz", + "integrity": "sha512-9dAav7DcRgaF7xCJEQR5ER9ErXxnu/tdnVJ+UPmb1NPeIZdESv1A3lxFDEq1Fs8c4/lzAj9BpshGyJVIZwZDKg==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.451.0.tgz", + "integrity": "sha512-TySt64Ci5/ZbqFw1F9Z0FIGvYx5JSC9e6gqDnizIYd8eMnn8wFRUscRrD7pIHKfrhvVKN5h0GdYovmMO/FMCBw==", + "dev": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.451.0", + "@aws-sdk/credential-provider-process": "3.451.0", + "@aws-sdk/credential-provider-sso": "3.451.0", + "@aws-sdk/credential-provider-web-identity": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.451.0.tgz", + "integrity": "sha512-AEwM1WPyxUdKrKyUsKyFqqRFGU70e4qlDyrtBxJnSU9NRLZI8tfEZ67bN7fHSxBUBODgDXpMSlSvJiBLh5/3pw==", + "dev": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.451.0", + "@aws-sdk/credential-provider-ini": "3.451.0", + "@aws-sdk/credential-provider-process": "3.451.0", + "@aws-sdk/credential-provider-sso": "3.451.0", + "@aws-sdk/credential-provider-web-identity": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.451.0.tgz", + "integrity": "sha512-HQywSdKeD5PErcLLnZfSyCJO+6T+ZyzF+Lm/QgscSC+CbSUSIPi//s15qhBRVely/3KBV6AywxwNH+5eYgt4lQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.451.0.tgz", + "integrity": "sha512-Usm/N51+unOt8ID4HnQzxIjUJDrkAQ1vyTOC0gSEEJ7h64NSSPGD5yhN7il5WcErtRd3EEtT1a8/GTC5TdBctg==", + "dev": true, + "dependencies": { + "@aws-sdk/client-sso": "3.451.0", + "@aws-sdk/token-providers": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.451.0.tgz", + "integrity": "sha512-Xtg3Qw65EfDjWNG7o2xD6sEmumPfsy3WDGjk2phEzVg8s7hcZGxf5wYwe6UY7RJvlEKrU0rFA+AMn6Hfj5oOzg==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.451.0.tgz", + "integrity": "sha512-j8a5jAfhWmsK99i2k8oR8zzQgXrsJtgrLxc3js6U+525mcZytoiDndkWTmD5fjJ1byU1U2E5TaPq+QJeDip05Q==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-logger": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.451.0.tgz", + "integrity": "sha512-0kHrYEyVeB2QBfP6TfbI240aRtatLZtcErJbhpiNUb+CQPgEL3crIjgVE8yYiJumZ7f0jyjo8HLPkwD1/2APaw==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.451.0.tgz", + "integrity": "sha512-J6jL6gJ7orjHGM70KDRcCP7so/J2SnkN4vZ9YRLTeeZY6zvBuHDjX8GCIgSqPn/nXFXckZO8XSnA7u6+3TAT0w==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.451.0.tgz", + "integrity": "sha512-UJ6UfVUEgp0KIztxpAeelPXI5MLj9wUtUCqYeIMP7C1ZhoEMNm3G39VLkGN43dNhBf1LqjsV9jkKMZbVfYXuwg==", + "dev": true, + "dependencies": { + "@aws-sdk/middleware-signing": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-signing": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.451.0.tgz", + "integrity": "sha512-s5ZlcIoLNg1Huj4Qp06iKniE8nJt/Pj1B/fjhWc6cCPCM7XJYUCejCnRh6C5ZJoBEYodjuwZBejPc1Wh3j+znA==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.451.0.tgz", + "integrity": "sha512-8NM/0JiKLNvT9wtAQVl1DFW0cEO7OvZyLSUBLNLTHqyvOZxKaZ8YFk7d8PL6l76LeUKRxq4NMxfZQlUIRe0eSA==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.451.0.tgz", + "integrity": "sha512-3iMf4OwzrFb4tAAmoROXaiORUk2FvSejnHIw/XHvf/jjR4EqGGF95NZP/n/MeFZMizJWVssrwS412GmoEyoqhg==", + "dev": true, + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/token-providers": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.451.0.tgz", + "integrity": "sha512-ij1L5iUbn6CwxVOT1PG4NFjsrsKN9c4N1YEM0lkl6DwmaNOscjLKGSNyj9M118vSWsOs1ZDbTwtj++h0O/BWrQ==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/types": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.451.0.tgz", + "integrity": "sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==", + "dev": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.451.0.tgz", + "integrity": "sha512-giqLGBTnRIcKkDqwU7+GQhKbtJ5Ku35cjGQIfMyOga6pwTBUbaK0xW1Sdd8sBQ1GhApscnChzI9o/R9x0368vw==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/util-endpoints": "^1.0.4", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.451.0.tgz", + "integrity": "sha512-Ws5mG3J0TQifH7OTcMrCTexo7HeSAc3cBgjfhS/ofzPUzVCtsyg0G7I6T7wl7vJJETix2Kst2cpOsxygPgPD9w==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.451.0.tgz", + "integrity": "sha512-TBzm6P+ql4mkGFAjPlO1CI+w3yUT+NulaiALjl/jNX/nnUp6HsJsVxJf4nVFQTG5KRV0iqMypcs7I3KIhH+LmA==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dev": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs": { + "version": "3.417.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.417.0.tgz", + "integrity": "sha512-WYSNWFaj3WGXdUrZQyM5xVwLjX5e1sMbb1Jv1lDKu+VbUZGtBJ3icGXs+DXJaBxdiwgqUmok3BsEnOovHbO8KA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.414.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/client-sso": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.414.0.tgz", + "integrity": "sha512-GvRwQ7wA3edzsQEKS70ZPhkOUZ62PAiXasjp6GxrsADEb8sV1z4FxXNl9Un/7fQxKkh9QYaK1Wu1PmhLi9MLMg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/client-sts": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.414.0.tgz", + "integrity": "sha512-xeYH3si6Imp1EWolWn1zuxJJu2AXKwXl1HDftQULwC5AWkm1mNFbXYSJN4hQul1IM+kn+JTRB0XRHByQkKhe+Q==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-sdk-sts": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.413.0.tgz", + "integrity": "sha512-yeMOkfG20/RlzfPMtQuDB647AcPEvFEVYOWZzAWVJfldYQ5ybKr0d7sBkgG9sdAzGkK3Aw9dE4rigYI8EIqc1Q==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.414.0.tgz", + "integrity": "sha512-rlpLLx70roJL/t40opWC96LbIASejdMbRlgSCRpK8b/hKngYDe5A7SRVacaw08vYrAywxRiybxpQOwOt9b++rA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.414.0.tgz", + "integrity": "sha512-xlkcOUKeGHInxWKKrZKIPSBCUL/ozyCldJBjmMKEj7ZmBAEiDcjpMe3pZ//LibMkCSy0b/7jtyQBE/eaIT2o0A==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-ini": "3.414.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.413.0.tgz", + "integrity": "sha512-GFJdgS14GzJ1wc2DEnS44Z/34iBZ05CAkvDsLN2CMwcDgH4eZuif9/x0lwzIJBK3xVFHzYUeVvEzsqRPbCHRsw==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.414.0.tgz", + "integrity": "sha512-w9g2hlkZn7WekWICRqk+L33py7KrjYMFryVpkKXOx2pjDchCfZDr6pL1ml782GZ0L3qsob4SbNpbtp13JprnWQ==", + "dependencies": { + "@aws-sdk/client-sso": "3.414.0", + "@aws-sdk/token-providers": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.413.0.tgz", + "integrity": "sha512-5cdA1Iq9JeEHtg59ERV9fdMQ7cS0JF6gH/BWA7HYEUGdSVPXCuwyEggPtG64QgpNU7SmxH+QdDG+Ldxz09ycIA==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.413.0.tgz", + "integrity": "sha512-r9PQx468EzPHo9wRzZLfgROpKtVdbkteMrdhsuM12bifVHjU1OHr7yfhc1OdWv39X8Xiv6F8n5r+RBQEM0S6+g==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/middleware-logger": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.413.0.tgz", + "integrity": "sha512-jqcXDubcKvoqBy+kkEa0WoNjG6SveDeyNy+gdGnTV+DEtYjkcHrHJei4q0W5zFl0mzc+dP+z8tJF44rv95ZY3Q==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.413.0.tgz", + "integrity": "sha512-C6k0IKJk/A4/VBGwUjxEPG+WOjjnmWAZVRBUzaeM7PqRh+g5rLcuIV356ntV3pREVxyiSTePTYVYIHU9YXkLKQ==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.413.0.tgz", + "integrity": "sha512-t0u//JUyaEZRVnH5q+Ur3tWnuyIsTdwA0XOdDCZXcSlLYzGp2MI/tScLjn9IydRrceIFpFfmbjk4Nf/Q6TeBTQ==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/middleware-signing": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.413.0.tgz", + "integrity": "sha512-QFEnVvIKYPCermM+ESxEztgUgXzGSKpnPnohMYNvSZySqmOLu/4VvxiZbRO/BX9J3ZHcUgaw4vKm5VBZRrycxw==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.3.1", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.413.0.tgz", + "integrity": "sha512-eVMJyeWxNBqerhfD+sE9sTjDtwQiECrfU6wpUQP5fGPhJD2cVVZPxuTuJGDZCu/4k/V61dF85IYlsPUNLdVQ6w==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/token-providers": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.413.0.tgz", + "integrity": "sha512-NfP1Ib9LAWVLMTOa/1aJwt4TRrlRrNyukCpVZGfNaMnNNEoP5Rakdbcs8KFVHe/MJzU+GdKVzxQ4TgRkLOGTrA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/util-endpoints": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.413.0.tgz", + "integrity": "sha512-VAwr7cITNb1L6/2XUPIbCOuhKGm0VtKCRblurrfUF2bxqG/wtuw/2Fm4ahYJPyxklOSXAMSq+RHdFWcir0YB/g==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.413.0.tgz", + "integrity": "sha512-7j/qWcRO2OBZBre2fC6V6M0PAS9n7k6i+VtofPkkhxC2DZszLJElqnooF9hGmVGYK3zR47Np4WjURXKIEZclWg==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.413.0.tgz", + "integrity": "sha512-vHm9TVZIzfWMeDvdmoOky6VarqOt8Pr68CESHN0jyuO6XbhCDnr9rpaXiBhbSR+N1Qm7R/AfJgAhQyTMu2G1OA==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/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/@aws-sdk/client-cognito-identity": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.398.0.tgz", + "integrity": "sha512-Pr/S1f8R2FsJ8DwBC6g0CSdtZNNV5dMHhlIi+t8YAmCJvP4KT+UhzFjbvQRINlBRLFuGUuP7p5vRcGVELD3+wA==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.398.0", + "@aws-sdk/credential-provider-node": "3.398.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.398.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.5", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.5", + "@smithy/util-defaults-mode-node": "^2.0.5", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-route-53": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-route-53/-/client-route-53-3.398.0.tgz", + "integrity": "sha512-Aab11et2VY1pE3C5pqZoVZPU5BP1iNhRufK27wQ1bCy/SiRyqvhXKAZ7YPkP9vHDIAFejp9/PSJPy17v/GUwuw==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.398.0", + "@aws-sdk/credential-provider-node": "3.398.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-route53": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.398.0", + "@aws-sdk/xml-builder": "3.310.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.5", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.5", + "@smithy/util-defaults-mode-node": "^2.0.5", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.5", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.400.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.400.0.tgz", + "integrity": "sha512-lnv0pb79Czl8fCMs/z7yM56LvoKTri1I4jX/V33trHMFKPQDoy8i24wxG8+TZl3MUmnUyoQS7tlukh7IFkii1Q==", + "dev": true, + "dependencies": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.398.0", + "@aws-sdk/credential-provider-node": "3.398.0", + "@aws-sdk/middleware-bucket-endpoint": "3.398.0", + "@aws-sdk/middleware-expect-continue": "3.398.0", + "@aws-sdk/middleware-flexible-checksums": "3.400.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-location-constraint": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-s3": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-ssec": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/signature-v4-multi-region": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.398.0", + "@aws-sdk/xml-builder": "3.310.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/eventstream-serde-browser": "^2.0.5", + "@smithy/eventstream-serde-config-resolver": "^2.0.5", + "@smithy/eventstream-serde-node": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-blob-browser": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/hash-stream-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/md5-js": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.5", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.5", + "@smithy/util-defaults-mode-node": "^2.0.5", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.5", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.414.0.tgz", + "integrity": "sha512-aaH662yFB2McqiH0ho25UBAFy9rYFocjibnuFptpHAmZKw2LyNqqroLDp6RbVQYyqWHoPOBjM2XoHz8NJoEvIA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.414.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.7", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sso": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.414.0.tgz", + "integrity": "sha512-GvRwQ7wA3edzsQEKS70ZPhkOUZ62PAiXasjp6GxrsADEb8sV1z4FxXNl9Un/7fQxKkh9QYaK1Wu1PmhLi9MLMg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sts": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.414.0.tgz", + "integrity": "sha512-xeYH3si6Imp1EWolWn1zuxJJu2AXKwXl1HDftQULwC5AWkm1mNFbXYSJN4hQul1IM+kn+JTRB0XRHByQkKhe+Q==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-sdk-sts": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.413.0.tgz", + "integrity": "sha512-yeMOkfG20/RlzfPMtQuDB647AcPEvFEVYOWZzAWVJfldYQ5ybKr0d7sBkgG9sdAzGkK3Aw9dE4rigYI8EIqc1Q==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.414.0.tgz", + "integrity": "sha512-rlpLLx70roJL/t40opWC96LbIASejdMbRlgSCRpK8b/hKngYDe5A7SRVacaw08vYrAywxRiybxpQOwOt9b++rA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.414.0.tgz", + "integrity": "sha512-xlkcOUKeGHInxWKKrZKIPSBCUL/ozyCldJBjmMKEj7ZmBAEiDcjpMe3pZ//LibMkCSy0b/7jtyQBE/eaIT2o0A==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-ini": "3.414.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.413.0.tgz", + "integrity": "sha512-GFJdgS14GzJ1wc2DEnS44Z/34iBZ05CAkvDsLN2CMwcDgH4eZuif9/x0lwzIJBK3xVFHzYUeVvEzsqRPbCHRsw==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.414.0.tgz", + "integrity": "sha512-w9g2hlkZn7WekWICRqk+L33py7KrjYMFryVpkKXOx2pjDchCfZDr6pL1ml782GZ0L3qsob4SbNpbtp13JprnWQ==", + "dependencies": { + "@aws-sdk/client-sso": "3.414.0", + "@aws-sdk/token-providers": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.413.0.tgz", + "integrity": "sha512-5cdA1Iq9JeEHtg59ERV9fdMQ7cS0JF6gH/BWA7HYEUGdSVPXCuwyEggPtG64QgpNU7SmxH+QdDG+Ldxz09ycIA==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.413.0.tgz", + "integrity": "sha512-r9PQx468EzPHo9wRzZLfgROpKtVdbkteMrdhsuM12bifVHjU1OHr7yfhc1OdWv39X8Xiv6F8n5r+RBQEM0S6+g==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-logger": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.413.0.tgz", + "integrity": "sha512-jqcXDubcKvoqBy+kkEa0WoNjG6SveDeyNy+gdGnTV+DEtYjkcHrHJei4q0W5zFl0mzc+dP+z8tJF44rv95ZY3Q==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.413.0.tgz", + "integrity": "sha512-C6k0IKJk/A4/VBGwUjxEPG+WOjjnmWAZVRBUzaeM7PqRh+g5rLcuIV356ntV3pREVxyiSTePTYVYIHU9YXkLKQ==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.413.0.tgz", + "integrity": "sha512-t0u//JUyaEZRVnH5q+Ur3tWnuyIsTdwA0XOdDCZXcSlLYzGp2MI/tScLjn9IydRrceIFpFfmbjk4Nf/Q6TeBTQ==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-signing": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.413.0.tgz", + "integrity": "sha512-QFEnVvIKYPCermM+ESxEztgUgXzGSKpnPnohMYNvSZySqmOLu/4VvxiZbRO/BX9J3ZHcUgaw4vKm5VBZRrycxw==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.3.1", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.413.0.tgz", + "integrity": "sha512-eVMJyeWxNBqerhfD+sE9sTjDtwQiECrfU6wpUQP5fGPhJD2cVVZPxuTuJGDZCu/4k/V61dF85IYlsPUNLdVQ6w==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/token-providers": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.413.0.tgz", + "integrity": "sha512-NfP1Ib9LAWVLMTOa/1aJwt4TRrlRrNyukCpVZGfNaMnNNEoP5Rakdbcs8KFVHe/MJzU+GdKVzxQ4TgRkLOGTrA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/util-endpoints": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.413.0.tgz", + "integrity": "sha512-VAwr7cITNb1L6/2XUPIbCOuhKGm0VtKCRblurrfUF2bxqG/wtuw/2Fm4ahYJPyxklOSXAMSq+RHdFWcir0YB/g==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.413.0.tgz", + "integrity": "sha512-7j/qWcRO2OBZBre2fC6V6M0PAS9n7k6i+VtofPkkhxC2DZszLJElqnooF9hGmVGYK3zR47Np4WjURXKIEZclWg==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.413.0.tgz", + "integrity": "sha512-vHm9TVZIzfWMeDvdmoOky6VarqOt8Pr68CESHN0jyuO6XbhCDnr9rpaXiBhbSR+N1Qm7R/AfJgAhQyTMu2G1OA==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/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/@aws-sdk/client-sso": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.398.0.tgz", + "integrity": "sha512-CygL0jhfibw4kmWXG/3sfZMFNjcXo66XUuPC4BqZBk8Rj5vFoxp1vZeMkDLzTIk97Nvo5J5Bh+QnXKhub6AckQ==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.398.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.5", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.5", + "@smithy/util-defaults-mode-node": "^2.0.5", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.398.0.tgz", + "integrity": "sha512-/3Pa9wLMvBZipKraq3AtbmTfXW6q9kyvhwOno64f1Fz7kFb8ijQFMGoATS70B2pGEZTlxkUqJFWDiisT6Q6dFg==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.398.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-sts": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.398.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.5", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.5", + "@smithy/util-defaults-mode-node": "^2.0.5", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/config-resolver": { + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.374.0.tgz", + "integrity": "sha512-eTSbmpcgZ97o7PuFls8pH1344OS03nfqq1NO9HxxvoYoZ6DFfUO7kqKeNUhP9LxOF7slyHXajDT7eoPclGnTuw==", + "deprecated": "This package has moved to @smithy/config-resolver", + "dev": true, + "dependencies": { + "@smithy/config-resolver": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/config-resolver/node_modules/@smithy/config-resolver": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-1.1.0.tgz", + "integrity": "sha512-7WD9eZHp46BxAjNGHJLmxhhyeiNWkBdVStd7SUJPUZqQGeIO/REtIrcIfKUfdiHTQ9jyu2SYoqvzqqaFc6987w==", + "dev": true, + "dependencies": { + "@smithy/types": "^1.2.0", + "@smithy/util-config-provider": "^1.1.0", + "@smithy/util-middleware": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/config-resolver/node_modules/@smithy/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/config-resolver/node_modules/@smithy/util-config-provider": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-1.1.0.tgz", + "integrity": "sha512-rQ47YpNmF6Is4I9GiE3T3+0xQ+r7RKRKbmHYyGSbyep/0cSf9kteKcI0ssJTvveJ1K4QvwrxXj1tEFp/G2UqxQ==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/config-resolver/node_modules/@smithy/util-middleware": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.1.0.tgz", + "integrity": "sha512-6hhckcBqVgjWAqLy2vqlPZ3rfxLDhFWEmM7oLh2POGvsi7j0tHkbN7w4DFhuBExVJAbJ/qqxqZdRY6Fu7/OezQ==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.451.0.tgz", + "integrity": "sha512-SamWW2zHEf1ZKe3j1w0Piauryl8BQIlej0TBS18A4ACzhjhWXhCs13bO1S88LvPR5mBFXok3XOT6zPOnKDFktw==", + "dev": true, + "dependencies": { + "@smithy/smithy-client": "^2.1.15", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.398.0.tgz", + "integrity": "sha512-MFUhy1YayHg5ypRTk4OTfDumQRP+OJBagaGv14kA8DzhKH1sNrU4HV7A7y2J4SvkN5hG/KnLJqxpakCtB2/O2g==", + "dev": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.398.0.tgz", + "integrity": "sha512-Z8Yj5z7FroAsR6UVML+XUdlpoqEe9Dnle8c2h8/xWwIC2feTfIBhjLhRVxfbpbM1pLgBSNEcZ7U8fwq5l7ESVQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.398.0.tgz", + "integrity": "sha512-AsK1lStK3nB9Cn6S6ODb1ktGh7SRejsNVQVKX3t5d3tgOaX+aX1Iwy8FzM/ZEN8uCloeRifUGIY9uQFygg5mSw==", + "dev": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-process": "3.398.0", + "@aws-sdk/credential-provider-sso": "3.398.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.398.0.tgz", + "integrity": "sha512-odmI/DSKfuWUYeDnGTCEHBbC8/MwnF6yEq874zl6+owoVv0ZsYP8qBHfiJkYqrwg7wQ7Pi40sSAPC1rhesGwzg==", + "dev": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-ini": "3.398.0", + "@aws-sdk/credential-provider-process": "3.398.0", + "@aws-sdk/credential-provider-sso": "3.398.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.398.0.tgz", + "integrity": "sha512-WrkBL1W7TXN508PA9wRXPFtzmGpVSW98gDaHEaa8GolAPHMPa5t2QcC/z/cFpglzrcVv8SA277zu9Z8tELdZhg==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.398.0.tgz", + "integrity": "sha512-2Dl35587xbnzR/GGZqA2MnFs8+kS4wbHQO9BioU0okA+8NRueohNMdrdQmQDdSNK4BfIpFspiZmFkXFNyEAfgw==", + "dev": true, + "dependencies": { + "@aws-sdk/client-sso": "3.398.0", + "@aws-sdk/token-providers": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.398.0.tgz", + "integrity": "sha512-iG3905Alv9pINbQ8/MIsshgqYMbWx+NDQWpxbIW3W0MkSH3iAqdVpSCteYidYX9G/jv2Um1nW3y360ib20bvNg==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.398.0.tgz", + "integrity": "sha512-355vXmImn2e85mIWSYDVb101AF2lIVHKNCaH6sV1U/8i0ZOXh2cJYNdkRYrxNt1ezDB0k97lSKvuDx7RDvJyRg==", + "dev": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.398.0", + "@aws-sdk/client-sso": "3.398.0", + "@aws-sdk/client-sts": "3.398.0", + "@aws-sdk/credential-provider-cognito-identity": "3.398.0", + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-ini": "3.398.0", + "@aws-sdk/credential-provider-node": "3.398.0", + "@aws-sdk/credential-provider-process": "3.398.0", + "@aws-sdk/credential-provider-sso": "3.398.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.398.0.tgz", + "integrity": "sha512-+iDHiRofK/vIY94RWAXkSnR4rBPzc2dPHmLp+FDKywq1y708H9W7TOT37dpn+KSFeO4k2FfddFjzWBHsaeakCA==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-config-provider": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.398.0.tgz", + "integrity": "sha512-d6he+Qqwh1yqml9duXSv5iKJ2lS0PVrF2UEsVew2GFxfUif0E/davTZJjvWtnelbuIGcTP+wDKVVjLwBN2sN/g==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.400.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.400.0.tgz", + "integrity": "sha512-lpsumd5/G+eAMTr61h/cJQZ8+i+xzC6OG3bvUcbRHqcjN49XgeNLcPfYcr6Rzf0QHxmuCN4te/4XGU3Fif2YVA==", + "dev": true, + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/types": "3.398.0", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.398.0.tgz", + "integrity": "sha512-m+5laWdBaxIZK2ko0OwcCHJZJ5V1MgEIt8QVQ3k4/kOkN9ICjevOYmba751pHoTnbOYB7zQd6D2OT3EYEEsUcA==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.398.0.tgz", + "integrity": "sha512-it+olJf1Lf2bmH8OL/N1jMOFB0zEVYs4rIzgFrluTRCuPatRuDi4LsXS8zqYxkBa05JE8JmqwW5gCzAmWyLLqw==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.398.0.tgz", + "integrity": "sha512-CiJjW+FL12elS6Pn7/UVjVK8HWHhXMfvHZvOwx/Qkpy340sIhkuzOO6fZEruECDTZhl2Wqn81XdJ1ZQ4pRKpCg==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.398.0.tgz", + "integrity": "sha512-7QpOqPQAZNXDXv6vsRex4R8dLniL0E/80OPK4PPFsrCh9btEyhN9Begh4i1T+5lL28hmYkztLOkTQ2N5J3hgRQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-api-gateway": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-api-gateway/-/middleware-sdk-api-gateway-3.398.0.tgz", + "integrity": "sha512-SpDimzekPpOQTtkUScK8sMRY+JsAAGb5LvqSmf7kfYfyt0x+F+MAdAgPcO874GApJC7gu9++lqR5qP9B+LBNOw==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-route53": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-route53/-/middleware-sdk-route53-3.398.0.tgz", + "integrity": "sha512-1biZeNxfPLBTgCdK0xCD9MyO3i0xPhY+DjiD59HrxXHaYrMDhfDapbjmi+6QmoOLGTvWGIyKUo4Sqp6Ly1wT5w==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.398.0.tgz", + "integrity": "sha512-yweSMc/TyiFtqc52hFMKQJvTm3i1KCoW5mB3o/Sla6zsHBh+nS6TTaBmo+2kcDIR7AKODwW+FLCTHWiazb7J3Q==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.398.0.tgz", + "integrity": "sha512-+JH76XHEgfVihkY+GurohOQ5Z83zVN1nYcQzwCFnCDTh4dG4KwhnZKG+WPw6XJECocY0R+H0ivofeALHvVWJtQ==", + "dev": true, + "dependencies": { + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.398.0.tgz", + "integrity": "sha512-O0KqXAix1TcvZBFt1qoFkHMUNJOSgjJTYS7lFTRKSwgsD27bdW2TM2r9R8DAccWFt5Amjkdt+eOwQMIXPGTm8w==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.398.0.tgz", + "integrity": "sha512-QtKr/hPcRugKSIZAH4+7hbUfdW7Lg+OQvD25nJn7ic1JHRZ+eDctEFxdsmnt68lE6aZxOcHCWHAW6/umcA93Dw==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.398.0.tgz", + "integrity": "sha512-nF1jg0L+18b5HvTcYzwyFgfZQQMELJINFqI0mi4yRKaX7T5a3aGp5RVLGGju/6tAGTuFbfBoEhkhU3kkxexPYQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/node-config-provider": { + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.374.0.tgz", + "integrity": "sha512-RsUeDTtslQ9b/slyjAuVqEVZLnZ/jVdNbLaY30oF6FhvZnKpoiN8m7z4oiDjGQ6K2lVuQNdSRGjzI22W+mLwug==", + "deprecated": "This package has moved to @smithy/node-config-provider", + "dev": true, + "dependencies": { + "@smithy/node-config-provider": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/node-config-provider/node_modules/@smithy/node-config-provider": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-1.1.0.tgz", + "integrity": "sha512-2G4TlzUnmTrUY26VKTonQqydwb+gtM/mcl+TqDP8CnWtJKVL8ElPpKgLGScP04bPIRY9x2/10lDdoaRXDqPuCw==", + "dev": true, + "dependencies": { + "@smithy/property-provider": "^1.2.0", + "@smithy/shared-ini-file-loader": "^1.1.0", + "@smithy/types": "^1.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/node-config-provider/node_modules/@smithy/property-provider": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-1.2.0.tgz", + "integrity": "sha512-qlJd9gT751i4T0t/hJAyNGfESfi08Fek8QiLcysoKPgR05qHhG0OYhlaCJHhpXy4ECW0lHyjvFM1smrCLIXVfw==", + "dev": true, + "dependencies": { + "@smithy/types": "^1.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/node-config-provider/node_modules/@smithy/shared-ini-file-loader": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-1.1.0.tgz", + "integrity": "sha512-S/v33zvCWzFyGZGlsEF0XsZtNNR281UhR7byk3nRfsgw5lGpg51rK/zjMgulM+h6NSuXaFILaYrw1I1v4kMcuA==", + "dev": true, + "dependencies": { + "@smithy/types": "^1.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/node-config-provider/node_modules/@smithy/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.413.0.tgz", + "integrity": "sha512-h90e6yyOhvoc+1F5vFk3C5mxwB8RSDEMKTO/fxexyur94seczZ1yxyYkTMZv30oc9RUiToABlHNrh/wxL7TZPQ==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.10", + "@smithy/types": "^2.3.1", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.398.0.tgz", + "integrity": "sha512-8fTqTxRDWE03T7ClaWlCfbwuSae//01XMNVy2a9g5QgaelQh7ZZyU3ZIJiV8gIj8v6ZM0NGn9Bz1liI/vmNmcw==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/signature-v4-crt": "^3.118.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/signature-v4-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/smithy-client": { + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.374.0.tgz", + "integrity": "sha512-YQBdO/Nv5EXBg/qfMF4GgYYLNN3Y/06MyuVBYILC1TKAnMoLy2FV0VOYyediagepAcWPdJqyUq4MCNNBy0CPRg==", + "deprecated": "This package has moved to @smithy/smithy-client", + "dev": true, + "dependencies": { + "@smithy/smithy-client": "^1.0.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/abort-controller": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha512-5imgGUlZL4dW4YWdMYAKLmal9ny/tlenM81QZY7xYyb76z9Z/QOg7oM5Ak9HQl8QfFTlGVWwcMXl+54jroRgEQ==", + "dev": true, + "dependencies": { + "@smithy/types": "^1.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/fetch-http-handler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-1.1.0.tgz", + "integrity": "sha512-N22C9R44u5WGlcY+Wuv8EXmCAq62wWwriRAuoczMEwAIjPbvHSthyPSLqI4S7kAST1j6niWg8kwpeJ3ReAv3xg==", + "dev": true, + "dependencies": { + "@smithy/protocol-http": "^1.2.0", + "@smithy/querystring-builder": "^1.1.0", + "@smithy/types": "^1.2.0", + "@smithy/util-base64": "^1.1.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/is-array-buffer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz", + "integrity": "sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/middleware-stack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-1.1.0.tgz", + "integrity": "sha512-XynYiIvXNea2BbLcppvpNK0zu8o2woJqgnmxqYTn4FWagH/Hr2QIk8LOsUz7BIJ4tooFhmx8urHKCdlPbbPDCA==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/node-http-handler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-1.1.0.tgz", + "integrity": "sha512-d3kRriEgaIiGXLziAM8bjnaLn1fthCJeTLZIwEIpzQqe6yPX0a+yQoLCTyjb2fvdLwkMoG4p7THIIB5cj5lkbg==", + "dev": true, + "dependencies": { + "@smithy/abort-controller": "^1.1.0", + "@smithy/protocol-http": "^1.2.0", + "@smithy/querystring-builder": "^1.1.0", + "@smithy/types": "^1.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/protocol-http": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.2.0.tgz", + "integrity": "sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==", + "dev": true, + "dependencies": { + "@smithy/types": "^1.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/querystring-builder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-1.1.0.tgz", + "integrity": "sha512-gDEi4LxIGLbdfjrjiY45QNbuDmpkwh9DX4xzrR2AzjjXpxwGyfSpbJaYhXARw9p17VH0h9UewnNQXNwaQyYMDA==", + "dev": true, + "dependencies": { + "@smithy/types": "^1.2.0", + "@smithy/util-uri-escape": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/smithy-client": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-1.1.0.tgz", + "integrity": "sha512-j32SGgVhv2G9nBTmel9u3OXux8KG20ssxuFakJrEeDug3kqbl1qrGzVLCe+Eib402UDtA0Sp1a4NZ2SEXDBxag==", + "dev": true, + "dependencies": { + "@smithy/middleware-stack": "^1.1.0", + "@smithy/types": "^1.2.0", + "@smithy/util-stream": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/util-base64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-1.1.0.tgz", + "integrity": "sha512-FpYmDmVbOXAxqvoVCwqehUN0zXS+lN8V7VS9O7I8MKeVHdSTsZzlwiMEvGoyTNOXWn8luF4CTDYgNHnZViR30g==", + "dev": true, + "dependencies": { + "@smithy/util-buffer-from": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/util-buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.1.0.tgz", + "integrity": "sha512-9m6NXE0ww+ra5HKHCHig20T+FAwxBAm7DIdwc/767uGWbRcY720ybgPacQNB96JMOI7xVr/CDa3oMzKmW4a+kw==", + "dev": true, + "dependencies": { + "@smithy/is-array-buffer": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/util-hex-encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz", + "integrity": "sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/util-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-1.1.0.tgz", + "integrity": "sha512-w3lsdGsntaLQIrwDWJkIFKrFscgZXwU/oxsse09aSTNv5TckPhDeYea3LhsDrU5MGAG3vprhVZAKr33S45coVA==", + "dev": true, + "dependencies": { + "@smithy/fetch-http-handler": "^1.1.0", + "@smithy/node-http-handler": "^1.1.0", + "@smithy/types": "^1.2.0", + "@smithy/util-base64": "^1.1.0", + "@smithy/util-buffer-from": "^1.1.0", + "@smithy/util-hex-encoding": "^1.1.0", + "@smithy/util-utf8": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/util-uri-escape": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz", + "integrity": "sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/util-utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.1.0.tgz", + "integrity": "sha512-p/MYV+JmqmPyjdgyN2UxAeYDj9cBqCjp0C/NsTWnnjoZUVqoeZ6IrW915L9CAKWVECgv9lVQGc4u/yz26/bI1A==", + "dev": true, + "dependencies": { + "@smithy/util-buffer-from": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.398.0.tgz", + "integrity": "sha512-nrYgjzavGCKJL/48Vt0EL+OlIc5UZLfNGpgyUW9cv3XZwl+kXV0QB+HH0rHZZLfpbBgZ2RBIJR9uD5ieu/6hpQ==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.398.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.5", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.5", + "@smithy/util-defaults-mode-node": "^2.0.5", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.398.0.tgz", + "integrity": "sha512-Fy0gLYAei/Rd6BrXG4baspCnWTUSd0NdokU1pZh4KlfEAEN1i8SPPgfiO5hLk7+2inqtCmqxVJlfqbMVe9k4bw==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-retry": { + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.374.0.tgz", + "integrity": "sha512-0p/trhYU+Ys8j3vMnWCvAkSOL6JRMooV9dVlQ+o7EHbQs9kDtnyucMUHU09ahHSIPTA/n/013hv7bzIt3MyKQg==", + "deprecated": "This package has moved to @smithy/util-retry", + "dev": true, + "dependencies": { + "@smithy/util-retry": "^1.0.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/util-retry/node_modules/@smithy/service-error-classification": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-1.1.0.tgz", + "integrity": "sha512-OCTEeJ1igatd5kFrS2VDlYbainNNpf7Lj1siFOxnRWqYOP9oNvC5HOJBd3t+Z8MbrmehBtuDJ2QqeBsfeiNkww==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-retry/node_modules/@smithy/util-retry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-1.1.0.tgz", + "integrity": "sha512-ygQW5HBqYXpR3ua09UciS0sL7UGJzGiktrKkOuEJwARoUuzz40yaEGU6xd9Gs7KBmAaFC8gMfnghHtwZ2nyBCQ==", + "dev": true, + "dependencies": { + "@smithy/service-error-classification": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.398.0.tgz", + "integrity": "sha512-A3Tzx1tkDHlBT+IgxmsMCHbV8LM7SwwCozq2ZjJRx0nqw3MCrrcxQFXldHeX/gdUMO+0Oocb7HGSnVODTq+0EA==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.398.0.tgz", + "integrity": "sha512-RTVQofdj961ej4//fEkppFf4KXqKGMTCqJYghx3G0C/MYXbg7MGl7LjfNGtJcboRE8pfHHQ/TUWBDA7RIAPPlQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/node-config-provider": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", + "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", + "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.11", + "@babel/parser": "^7.22.11", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", + "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.3", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", + "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", + "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", + "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.3", + "@babel/types": "^7.23.3", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", + "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "dev": true + }, + "node_modules/@bcherny/json-schema-ref-parser": { + "version": "10.0.5-fork", + "resolved": "https://registry.npmjs.org/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-10.0.5-fork.tgz", + "integrity": "sha512-E/jKbPoca1tfUPj3iSbitDZTGnq6FUFjkH6L8U2oDwSuwK1WhnnVtCG7oFOTg/DDnyoXbQYUiUiGOibHqaGVnw==", + "dev": true, + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/philsturgeon" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@elastic/elasticsearch": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-7.10.0.tgz", + "integrity": "sha512-vXtMAQf5/DwqeryQgRriMtnFppJNLc/R7/R0D8E+wG5/kGM5i7mg+Hi7TM4NZEuXgtzZ2a/Nf7aR0vLyrxOK/w==", + "dependencies": { + "debug": "^4.1.1", + "hpagent": "^0.1.1", + "ms": "^2.1.1", + "pump": "^3.0.0", + "secure-json-parse": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "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.8.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", + "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", + "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "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", + "debug": "^4.1.1", + "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/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/console/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/core/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", + "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", + "dev": true, + "dependencies": { + "expect": "^29.6.4", + "jest-snapshot": "^29.6.4" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", + "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", + "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", + "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/types": "^29.6.3", + "jest-mock": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/reporters/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/transform/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "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/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pkgr/utils/node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@serverless/dashboard-plugin": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@serverless/dashboard-plugin/-/dashboard-plugin-7.1.0.tgz", + "integrity": "sha512-mAiTU2ERsDHdCrXJa/tihh/r+8ZwSuYYBqln3SkwuBD/49ct9QrK7S00cpiqFoY/geMFlHpOkriGzCPz6UP/rw==", + "dev": true, + "dependencies": { + "@aws-sdk/client-cloudformation": "^3.410.0", + "@aws-sdk/client-sts": "^3.410.0", + "@serverless/event-mocks": "^1.1.1", + "@serverless/platform-client": "^4.4.0", + "@serverless/utils": "^6.14.0", + "child-process-ext": "^3.0.1", + "chokidar": "^3.5.3", + "flat": "^5.0.2", + "fs-extra": "^9.1.0", + "js-yaml": "^4.1.0", + "jszip": "^3.10.1", + "lodash": "^4.17.21", + "memoizee": "^0.4.15", + "ncjsm": "^4.3.2", + "node-dir": "^0.1.17", + "node-fetch": "^2.6.8", + "open": "^7.4.2", + "semver": "^7.3.8", + "simple-git": "^3.16.0", + "timers-ext": "^0.1.7", + "type": "^2.7.2", + "uuid": "^8.3.2", + "yamljs": "^0.3.0" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/client-sso": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.451.0.tgz", + "integrity": "sha512-KkYSke3Pdv3MfVH/5fT528+MKjMyPKlcLcd4zQb0x6/7Bl7EHrPh1JZYjzPLHelb+UY5X0qN8+cb8iSu1eiwIQ==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.451.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/client-sts": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.451.0.tgz", + "integrity": "sha512-48NcIRxWBdP1fom6RSjwn2R2u7SE7eeV3p+c4s7ukEOfrHhBxJfn3EpqBVQMGzdiU55qFImy+Fe81iA2lXq3Jw==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.451.0", + "@aws-sdk/credential-provider-node": "3.451.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-sdk-sts": "3.451.0", + "@aws-sdk/middleware-signing": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.451.0.tgz", + "integrity": "sha512-9dAav7DcRgaF7xCJEQR5ER9ErXxnu/tdnVJ+UPmb1NPeIZdESv1A3lxFDEq1Fs8c4/lzAj9BpshGyJVIZwZDKg==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.451.0.tgz", + "integrity": "sha512-TySt64Ci5/ZbqFw1F9Z0FIGvYx5JSC9e6gqDnizIYd8eMnn8wFRUscRrD7pIHKfrhvVKN5h0GdYovmMO/FMCBw==", + "dev": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.451.0", + "@aws-sdk/credential-provider-process": "3.451.0", + "@aws-sdk/credential-provider-sso": "3.451.0", + "@aws-sdk/credential-provider-web-identity": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.451.0.tgz", + "integrity": "sha512-AEwM1WPyxUdKrKyUsKyFqqRFGU70e4qlDyrtBxJnSU9NRLZI8tfEZ67bN7fHSxBUBODgDXpMSlSvJiBLh5/3pw==", + "dev": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.451.0", + "@aws-sdk/credential-provider-ini": "3.451.0", + "@aws-sdk/credential-provider-process": "3.451.0", + "@aws-sdk/credential-provider-sso": "3.451.0", + "@aws-sdk/credential-provider-web-identity": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.451.0.tgz", + "integrity": "sha512-HQywSdKeD5PErcLLnZfSyCJO+6T+ZyzF+Lm/QgscSC+CbSUSIPi//s15qhBRVely/3KBV6AywxwNH+5eYgt4lQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.451.0.tgz", + "integrity": "sha512-Usm/N51+unOt8ID4HnQzxIjUJDrkAQ1vyTOC0gSEEJ7h64NSSPGD5yhN7il5WcErtRd3EEtT1a8/GTC5TdBctg==", + "dev": true, + "dependencies": { + "@aws-sdk/client-sso": "3.451.0", + "@aws-sdk/token-providers": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.451.0.tgz", + "integrity": "sha512-Xtg3Qw65EfDjWNG7o2xD6sEmumPfsy3WDGjk2phEzVg8s7hcZGxf5wYwe6UY7RJvlEKrU0rFA+AMn6Hfj5oOzg==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.451.0.tgz", + "integrity": "sha512-j8a5jAfhWmsK99i2k8oR8zzQgXrsJtgrLxc3js6U+525mcZytoiDndkWTmD5fjJ1byU1U2E5TaPq+QJeDip05Q==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/middleware-logger": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.451.0.tgz", + "integrity": "sha512-0kHrYEyVeB2QBfP6TfbI240aRtatLZtcErJbhpiNUb+CQPgEL3crIjgVE8yYiJumZ7f0jyjo8HLPkwD1/2APaw==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.451.0.tgz", + "integrity": "sha512-J6jL6gJ7orjHGM70KDRcCP7so/J2SnkN4vZ9YRLTeeZY6zvBuHDjX8GCIgSqPn/nXFXckZO8XSnA7u6+3TAT0w==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.451.0.tgz", + "integrity": "sha512-UJ6UfVUEgp0KIztxpAeelPXI5MLj9wUtUCqYeIMP7C1ZhoEMNm3G39VLkGN43dNhBf1LqjsV9jkKMZbVfYXuwg==", + "dev": true, + "dependencies": { + "@aws-sdk/middleware-signing": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/middleware-signing": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.451.0.tgz", + "integrity": "sha512-s5ZlcIoLNg1Huj4Qp06iKniE8nJt/Pj1B/fjhWc6cCPCM7XJYUCejCnRh6C5ZJoBEYodjuwZBejPc1Wh3j+znA==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.451.0.tgz", + "integrity": "sha512-8NM/0JiKLNvT9wtAQVl1DFW0cEO7OvZyLSUBLNLTHqyvOZxKaZ8YFk7d8PL6l76LeUKRxq4NMxfZQlUIRe0eSA==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.451.0.tgz", + "integrity": "sha512-3iMf4OwzrFb4tAAmoROXaiORUk2FvSejnHIw/XHvf/jjR4EqGGF95NZP/n/MeFZMizJWVssrwS412GmoEyoqhg==", + "dev": true, + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/token-providers": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.451.0.tgz", + "integrity": "sha512-ij1L5iUbn6CwxVOT1PG4NFjsrsKN9c4N1YEM0lkl6DwmaNOscjLKGSNyj9M118vSWsOs1ZDbTwtj++h0O/BWrQ==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/types": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.451.0.tgz", + "integrity": "sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==", + "dev": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/util-endpoints": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.451.0.tgz", + "integrity": "sha512-giqLGBTnRIcKkDqwU7+GQhKbtJ5Ku35cjGQIfMyOga6pwTBUbaK0xW1Sdd8sBQ1GhApscnChzI9o/R9x0368vw==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/util-endpoints": "^1.0.4", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.451.0.tgz", + "integrity": "sha512-Ws5mG3J0TQifH7OTcMrCTexo7HeSAc3cBgjfhS/ofzPUzVCtsyg0G7I6T7wl7vJJETix2Kst2cpOsxygPgPD9w==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.451.0.tgz", + "integrity": "sha512-TBzm6P+ql4mkGFAjPlO1CI+w3yUT+NulaiALjl/jNX/nnUp6HsJsVxJf4nVFQTG5KRV0iqMypcs7I3KIhH+LmA==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dev": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/child-process-ext": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/child-process-ext/-/child-process-ext-3.0.2.tgz", + "integrity": "sha512-oBePsLbQpTJFxzwyCvs9yWWF0OEM6vGGepHwt1stqmX7QQqOuDc8j2ywdvAs9Tvi44TT7d9ackqhR4Q10l1u8w==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "es5-ext": "^0.10.62", + "log": "^6.3.1", + "split2": "^3.2.2", + "stream-promise": "^3.2.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/@serverless/dashboard-plugin/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@serverless/event-mocks": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@serverless/event-mocks/-/event-mocks-1.1.1.tgz", + "integrity": "sha512-YAV5V/y+XIOfd+HEVeXfPWZb8C6QLruFk9tBivoX2roQLWVq145s4uxf8D0QioCueuRzkukHUS4JIj+KVoS34A==", + "dev": true, + "dependencies": { + "@types/lodash": "^4.14.123", + "lodash": "^4.17.11" + } + }, + "node_modules/@serverless/platform-client": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@serverless/platform-client/-/platform-client-4.4.0.tgz", + "integrity": "sha512-urL7SNefRqC2EOFDcpvm8fyn/06B5yXWneKpyGw7ylGt0Qr9JHZCB9TiUeTkIpPUNz0jTvKUaJ2+M/JNEiaVIA==", + "dev": true, + "dependencies": { + "adm-zip": "^0.5.5", + "archiver": "^5.3.0", + "axios": "^1.6.2", + "fast-glob": "^3.2.7", + "https-proxy-agent": "^5.0.0", + "ignore": "^5.1.8", + "isomorphic-ws": "^4.0.1", + "js-yaml": "^3.14.1", + "jwt-decode": "^2.2.0", + "minimatch": "^3.0.4", + "querystring": "^0.2.1", + "run-parallel-limit": "^1.1.0", + "throat": "^5.0.0", + "traverse": "^0.6.6", + "ws": "^7.5.3" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/@serverless/platform-client/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@serverless/platform-client/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@serverless/platform-client/node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/@serverless/platform-client/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/@serverless/platform-client/node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/@serverless/platform-client/node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "peer": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/@serverless/platform-client/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@serverless/utils": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-6.15.0.tgz", + "integrity": "sha512-7eDbqKv/OBd11jjdZjUwFGN8sHWkeUqLeHXHQxQ1azja2IM7WIH+z/aLgzR6LhB3/MINNwtjesDpjGqTMj2JKQ==", + "dev": true, + "dependencies": { + "archive-type": "^4.0.0", + "chalk": "^4.1.2", + "ci-info": "^3.8.0", + "cli-progress-footer": "^2.3.2", + "content-disposition": "^0.5.4", + "d": "^1.0.1", + "decompress": "^4.2.1", + "event-emitter": "^0.3.5", + "ext": "^1.7.0", + "ext-name": "^5.0.0", + "file-type": "^16.5.4", + "filenamify": "^4.3.0", + "get-stream": "^6.0.1", + "got": "^11.8.6", + "inquirer": "^8.2.5", + "js-yaml": "^4.1.0", + "jwt-decode": "^3.1.2", + "lodash": "^4.17.21", + "log": "^6.3.1", + "log-node": "^8.0.3", + "make-dir": "^4.0.0", + "memoizee": "^0.4.15", + "ms": "^2.1.3", + "ncjsm": "^4.3.2", + "node-fetch": "^2.6.11", + "open": "^8.4.2", + "p-event": "^4.2.0", + "supports-color": "^8.1.1", + "timers-ext": "^0.1.7", + "type": "^2.7.2", + "uni-global": "^1.0.0", + "uuid": "^8.3.2", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/@serverless/utils/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@serverless/utils/node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", + "dev": true + }, + "node_modules/@serverless/utils/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@serverless/utils/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/@serverless/utils/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@serverless/utils/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.13.tgz", + "integrity": "sha512-eeOPD+GF9BzF/Mjy3PICLePx4l0f3rG/nQegQHRLTloN5p1lSJJNZsyn+FzDnW8P2AduragZqJdtKNCxXozB1Q==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", + "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", + "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", + "dev": true, + "dependencies": { + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.18.tgz", + "integrity": "sha512-761sJSgNbvsqcsKW6/WZbrZr4H+0Vp/QKKqwyrxCPwD8BsiPEXNHyYnqNgaeK9xRWYswjon0Uxbpe3DWQo0j/g==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.1.tgz", + "integrity": "sha512-gw5G3FjWC6sNz8zpOJgPpH5HGKrpoVFQpToNAwLwJVyI/LJ2jDJRjSKEsM6XI25aRpYjMSE/Qptxx305gN1vHw==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.5.tgz", + "integrity": "sha512-iqR6OuOV3zbQK8uVs9o+9AxhVk8kW9NAxA71nugwUB+kTY9C35pUd0A5/m4PRT0Y0oIW7W4kgnSR3fdYXQjECw==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.5.tgz", + "integrity": "sha512-8NU51y94qFJbxL6SmvgWDfITHO/svvbAigkLYk2pckX17TGCSf4EXuGpGLliJp5Ljh5+vASC7mUH2jYX7MWBxA==", + "dev": true, + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.5.tgz", + "integrity": "sha512-u3gvukRaTH4X6tsryuZ4T1WGIEP34fPaTTzphFDJe8GJz/k11oBW1MPnkcaucBMxLnObK9swCF85j5cp1Kj1oA==", + "dev": true, + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.5.tgz", + "integrity": "sha512-/C8jb+k/vKUBIe80D30vzjvRXlJf76kG2AJY7/NwiqWuD2usRuuDFCDaswXdVsSh9P1+FeaxZ48chsK10yDryQ==", + "dev": true, + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.5.tgz", + "integrity": "sha512-+vHvbQtlSVYTQ/20tNpVaKi0EpTR7E8GoEUHJypRZIRgiT03b3h2MAWk+SNaqMrCJrYG9vKLkJFzDylRlUvDWg==", + "dev": true, + "dependencies": { + "@smithy/eventstream-codec": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.6.tgz", + "integrity": "sha512-PStY3XO1Ksjwn3wMKye5U6m6zxXpXrXZYqLy/IeCbh3nM9QB3Jgw/B0PUSLUWKdXg4U8qgEu300e3ZoBvZLsDg==", + "dependencies": { + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.5.tgz", + "integrity": "sha512-ZVAUBtJXGf9bEko4/RwWcTK6d3b/ZmQMxJMrxOOcQhVDiqny9zI0mzgstO4Oxz3135R7S3V/bbGw3w3woCYpQg==", + "dev": true, + "dependencies": { + "@smithy/chunked-blob-reader": "^2.0.0", + "@smithy/chunked-blob-reader-native": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.15.tgz", + "integrity": "sha512-t/qjEJZu/G46A22PAk1k/IiJZT4ncRkG5GOCNWN9HPPy5rCcSZUbh7gwp7CGKgJJ7ATMMg+0Td7i9o1lQTwOfQ==", + "dependencies": { + "@smithy/types": "^2.5.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.5.tgz", + "integrity": "sha512-XiR4Aoux5kXy8OWPLQisKy3GPmm0l6deHepvPvr4MUzIwa5XWazG3JdbZXy+mk93CvEZrOwKPHU5Kul6QybJiQ==", + "dev": true, + "dependencies": { + "@smithy/types": "^2.2.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.13.tgz", + "integrity": "sha512-XsGYhVhvEikX1Yz0kyIoLssJf2Rs6E0U2w2YuKdT4jSra5A/g8V2oLROC1s56NldbgnpesTYB2z55KCHHbKyjw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.5.tgz", + "integrity": "sha512-k5EOte/Ye2r7XBVaXv2rhiehk6l3T4uRiPF+pnxKEc+G9Fwd1xAXBDZrtOq1syFPBKBmVfNszG4nevngST7NKg==", + "dev": true, + "dependencies": { + "@smithy/types": "^2.2.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.15.tgz", + "integrity": "sha512-xH4kRBw01gJgWiU+/mNTrnyFXeozpZHw39gLb3JKGsFDVmSrJZ8/tRqu27tU/ki1gKkxr2wApu+dEYjI3QwV1Q==", + "dependencies": { + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.0.tgz", + "integrity": "sha512-tddRmaig5URk2106PVMiNX6mc5BnKIKajHHDxb7K0J5MLdcuQluHMGnjkv18iY9s9O0tF+gAcPd/pDXA5L9DZw==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.13", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.20.tgz", + "integrity": "sha512-X2yrF/SHDk2WDd8LflRNS955rlzQ9daz9UWSp15wW8KtzoTXg3bhHM78HbK1cjr48/FWERSJKh9AvRUUGlIawg==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/protocol-http": "^3.0.9", + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", + "@smithy/util-retry": "^2.0.6", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry/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/@smithy/middleware-serde": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.13.tgz", + "integrity": "sha512-tBGbeXw+XsE6pPr4UaXOh+UIcXARZeiA8bKJWxk2IjJcD1icVLhBSUQH9myCIZLNNzJIH36SDjUX8Wqk4xJCJg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.7.tgz", + "integrity": "sha512-L1KLAAWkXbGx1t2jjCI/mDJ2dDNq+rp4/ifr/HcC6FHngxho5O7A5bQLpKHGlkfATH6fUnOEx0VICEVFA4sUzw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.5.tgz", + "integrity": "sha512-3Omb5/h4tOCuKRx4p4pkYTvEYRCYoKk52bOYbKUyz/G/8gERbagsN8jFm4FjQubkrcIqQEghTpQaUw6uk+0edw==", + "dependencies": { + "@smithy/property-provider": "^2.0.14", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.9.tgz", + "integrity": "sha512-+K0q3SlNcocmo9OZj+fz67gY4lwhOCvIJxVbo/xH+hfWObvaxrMTx7JEzzXcluK0thnnLz++K3Qe7Z/8MDUreA==", + "dependencies": { + "@smithy/abort-controller": "^2.0.13", + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.14.tgz", + "integrity": "sha512-k3D2qp9o6imTrLaXRj6GdLYEJr1sXqS99nLhzq8fYmJjSVOeMg/G+1KVAAc7Oxpu71rlZ2f8SSZxcSxkevuR0A==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", + "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", + "dev": true, + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.13.tgz", + "integrity": "sha512-JhXKwp3JtsFUe96XLHy/nUPEbaXqn6r7xE4sNaH8bxEyytE5q1fwt0ew/Ke6+vIC7gP87HCHgQpJHg1X1jN2Fw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.13.tgz", + "integrity": "sha512-TEiT6o8CPZVxJ44Rly/rrsATTQsE+b/nyBVzsYn2sa75xAaZcurNxsFd8z1haoUysONiyex24JMHoJY6iCfLdA==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.6.tgz", + "integrity": "sha512-fCQ36frtYra2fqY2/DV8+3/z2d0VB/1D1hXbjRcM5wkxTToxq6xHbIY/NGGY6v4carskMyG8FHACxgxturJ9Pg==", + "dependencies": { + "@smithy/types": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.4.tgz", + "integrity": "sha512-9dRknGgvYlRIsoTcmMJXuoR/3ekhGwhRq4un3ns2/byre4Ql5hyUN4iS0x8eITohjU90YOnUCsbRwZRvCkbRfw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.5.tgz", + "integrity": "sha512-ABIzXmUDXK4n2c9cXjQLELgH2RdtABpYKT+U131e2I6RbCypFZmxIHmIBufJzU2kdMCQ3+thBGDWorAITFW04A==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.5", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.15.tgz", + "integrity": "sha512-rngZcQu7Jvs9UbHihK1EI67RMPuzkc3CJmu4MBgB7D7yBnMGuFR86tq5rqHfL2gAkNnMelBN/8kzQVvZjNKefQ==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.7", + "@smithy/types": "^2.5.0", + "@smithy/util-stream": "^2.0.20", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.5.0.tgz", + "integrity": "sha512-/a31lYofrMBkJb3BuPlYJTMKDj0hUmKUP6JFZQu6YVuQVoAjubiY0A52U9S0Uysd33n/djexCUSNJ+G9bf3/aA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.13.tgz", + "integrity": "sha512-okWx2P/d9jcTsZWTVNnRMpFOE7fMkzloSFyM53fA7nLKJQObxM2T4JlZ5KitKKuXq7pxon9J6SF2kCwtdflIrA==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.19.tgz", + "integrity": "sha512-VHP8xdFR7/orpiABJwgoTB0t8Zhhwpf93gXhNfUBiwAE9O0rvsv7LwpQYjgvbOUDDO8JfIYQB2GYJNkqqGWsXw==", + "dependencies": { + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.25.tgz", + "integrity": "sha512-jkmep6/JyWmn2ADw9VULDeGbugR4N/FJCKOt+gYyVswmN1BJOfzF2umaYxQ1HhQDvna3kzm1Dbo1qIfBW4iuHA==", + "dependencies": { + "@smithy/config-resolver": "^2.0.18", + "@smithy/credential-provider-imds": "^2.1.1", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.4.tgz", + "integrity": "sha512-FPry8j1xye5yzrdnf4xKUXVnkQErxdN7bUIaqC0OFoGsv2NfD9b2UUMuZSSt+pr9a8XWAqj0HoyVNUfPiZ/PvQ==", + "dev": true, + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.6.tgz", + "integrity": "sha512-7W4uuwBvSLgKoLC1x4LfeArCVcbuHdtVaC4g30kKsD1erfICyQ45+tFhhs/dZNeQg+w392fhunCm/+oCcb6BSA==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.6.tgz", + "integrity": "sha512-PSO41FofOBmyhPQJwBQJ6mVlaD7Sp9Uff9aBbnfBJ9eqXOE/obrqQjn0PNdkfdvViiPXl49BINfnGcFtSP4kYw==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.20.tgz", + "integrity": "sha512-tT8VASuD8jJu0yjHEMTCPt1o5E3FVzgdsxK6FQLAjXKqVv5V8InCnc0EOsYrijgspbfDqdAJg7r0o2sySfcHVg==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", + "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.13.tgz", + "integrity": "sha512-YovIQatiuM7giEsRFotqJa2i3EbU2EE3PgtpXgtLgpx5rXiZMAwPxXYDFVFhuO0lbqvc/Zx4n+ZIisXOHPSqyg==", + "dependencies": { + "@smithy/abort-controller": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@thefaultvault/tfv-cpe-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@thefaultvault/tfv-cpe-parser/-/tfv-cpe-parser-1.3.0.tgz", + "integrity": "sha512-7SJRoAT1MqUeFl4EL47SYLnt1NmDh8gNYvcm2axWp7CKD3QVEXCDgooCh28Cwo4g2BvPae1Y/09ZotAkLtJgZQ==" + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.119", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.119.tgz", + "integrity": "sha512-Vqm22aZrCvCd6I5g1SvpW151jfqwTzEZ7XJ3yZ6xaZG31nUEOEyzzVImjRcsN8Wi/QyPxId/x8GTtgIbsy8kEw==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/docker-modem": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.3.tgz", + "integrity": "sha512-i1A2Etnav7uHizZ87vUf4EqwJehY3JOcTfBS0pGBlO+HQ0jg2lUMCaJRg9VQM8ldZkpYdIfsenxcTOCpwxPXEg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/ssh2": "*" + } + }, + "node_modules/@types/dockerode": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.19.tgz", + "integrity": "sha512-7CC5yIpQi+bHXwDK43b/deYXteP3Lem9gdocVVHJPSRJJLMfbiOchQV3rDmAPkMw+n3GIVj7m1six3JW+VcwwA==", + "dev": true, + "dependencies": { + "@types/docker-modem": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", + "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.36", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", + "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "dev": true, + "dependencies": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.197", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", + "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "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==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.2.tgz", + "integrity": "sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw==" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", + "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/nodemailer": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.9.tgz", + "integrity": "sha512-XYG8Gv+sHjaOtUpiuytahMy2mM3rectgroNbs6R3djZEKmPNiIJwe9KqOJBGzKKnNZNKvnuvmugBgpq3w/S0ig==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/papaparse": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.8.tgz", + "integrity": "sha512-ArKIEOOWULbhi53wkAiRy1ze4wvrTfhpAj7Yfzva+EkmX2sV8PpFB+xqzJfzXNzK4me95FJH9QZt5NXFVGzOoQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "node_modules/@types/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/ssh2": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.11.13.tgz", + "integrity": "sha512-08WbG68HvQ2YVi74n2iSUnYHYpUdFc/s2IsI0BHBdJwaqYJpWlVv9elL0tYShTv60yr0ObdxJR5NrCRiGJ/0CQ==", + "dev": true, + "dependencies": { + "@types/node": "^18.11.18" + } + }, + "node_modules/@types/ssh2/node_modules/@types/node": { + "version": "18.17.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.17.tgz", + "integrity": "sha512-cOxcXsQ2sxiwkykdJqvyFS+MLQPLvIdwh5l6gNg8qF6s+C7XSkEWOZjK+XhUZd+mYvHV/180g2cnCcIl4l06Pw==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", + "dev": true + }, + "node_modules/@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, + "node_modules/@types/superagent": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.18.tgz", + "integrity": "sha512-LOWgpacIV8GHhrsQU+QMZuomfqXiqzz3ILLkCtKx3Us6AmomFViuzKT9D693QTKgyut2oCytMG8/efOop+DB+w==", + "dev": true, + "dependencies": { + "@types/cookiejar": "*", + "@types/node": "*" + } + }, + "node_modules/@types/supertest": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz", + "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==", + "dev": true, + "dependencies": { + "@types/superagent": "*" + } + }, + "node_modules/@types/uuid": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", + "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==", + "dev": true + }, + "node_modules/@types/validator": { + "version": "13.11.1", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz", + "integrity": "sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A==" + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/zen-observable": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz", + "integrity": "sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/2-thenable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/2-thenable/-/2-thenable-1.0.0.tgz", + "integrity": "sha512-HqiDzaLDFCXkcCO/SwoyhRwqYtINFHF7t9BDRq4x90TOKNAJpiqUt9X5lQ08bwxYzc067HUywDjGySpebHcUpw==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.47" + } + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/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, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", + "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/afinn-165": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/afinn-165/-/afinn-165-1.0.4.tgz", + "integrity": "sha512-7+Wlx3BImrK0HiG6y3lU4xX7SpBPSSu8T9iguPMlaueRFxjbYwAQrp9lqZUuFikqKbd/en8lVREILvP2J80uJA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/afinn-165-financialmarketnews": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/afinn-165-financialmarketnews/-/afinn-165-financialmarketnews-3.0.0.tgz", + "integrity": "sha512-0g9A1S3ZomFIGDTzZ0t6xmv4AuokBvBmpes8htiyHpH7N4xDmvSQL6UxL/Zcs2ypRb3VwgCscaD8Q3zEawKYhw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/amqplib": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.10.3.tgz", + "integrity": "sha512-UHmuSa7n8vVW/a5HGh2nFPqAEr8+cD4dEZ6u9GjP91nHfr1a54RyAKyra7Sb5NH7NBKOUlyQSMXIp0qAixKexw==", + "dependencies": { + "@acuminous/bitsyntax": "^0.1.2", + "buffer-more-ints": "~1.0.0", + "readable-stream": "1.x >=1.1.9", + "url-parse": "~1.5.10" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/amqplib/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/amqplib/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/amqplib/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/apparatus": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/apparatus/-/apparatus-0.0.10.tgz", + "integrity": "sha512-KLy/ugo33KZA7nugtQ7O0E1c8kQ52N3IvD/XgIh4w/Nr28ypfkwDfA67F1ev4N1m5D+BOk1+b2dEJDfpj/VvZg==", + "dev": true, + "dependencies": { + "sylvester": ">= 0.0.8" + }, + "engines": { + "node": ">=0.2.6" + } + }, + "node_modules/archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", + "dev": true, + "dependencies": { + "file-type": "^4.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/archiver/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "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==" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/articles": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/articles/-/articles-0.2.2.tgz", + "integrity": "sha512-S3Y4MPp+LD/l0HHm/4yrr6MoXhUkKT98ZdsV2tkTuBNywqUXEtvJT+NBO3KTSQEttc5EOwEJe2Xw8cZ9TI5Hrw==", + "dev": true + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1551.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1551.0.tgz", + "integrity": "sha512-nUaAzS7cheaKF8lV0AVJBqteuoYIgQ5UgpZaoRR44D7HA1f6iCYFISF6WH6d0hQvpxPDIXr5NlVt0cHyp/Sx1g==", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-jest/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==" + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "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": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-more-ints": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz", + "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==" + }, + "node_modules/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bufferutil": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", + "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001524", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", + "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/child-process-ext": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/child-process-ext/-/child-process-ext-2.1.1.tgz", + "integrity": "sha512-0UQ55f51JBkOFa+fvR76ywRzxiPwQS3Xe8oe5bZRphpv+dIMeerW5Zn5e4cUy4COJwVtJyU0R79RMnw+aCqmGA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.5", + "es5-ext": "^0.10.53", + "log": "^6.0.0", + "split2": "^3.1.1", + "stream-promise": "^3.2.0" + } + }, + "node_modules/child-process-ext/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/child-process-ext/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/child-process-ext/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/child-process-ext/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/child-process-ext/node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/child-process-ext/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/chromium-bidi": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.5.tgz", + "integrity": "sha512-rkav9YzRfAshSTG3wNXF7P7yNiI29QAo1xBXElPoCoSQR5n20q3cOyVhDv6S7+GlF/CJ/emUxlQiR0xOPurkGg==", + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/class-transformer": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.3.1.tgz", + "integrity": "sha512-cKFwohpJbuMovS8xVLmn8N2AUbAuc8pVo4zEfsUVo8qgECOogns1WVk/FkOZoxhOPTyTYFckuoH+13FO+MQ8GA==" + }, + "node_modules/class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "dependencies": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.0" + } + }, + "node_modules/cli-color": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", + "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.61", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "node_modules/cli-progress-footer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/cli-progress-footer/-/cli-progress-footer-2.3.2.tgz", + "integrity": "sha512-uzHGgkKdeA9Kr57eyH1W5HGiNShP8fV1ETq04HDNM1Un6ShXbHhwi/H8LNV9L1fQXKjEw0q5FUkEVNuZ+yZdSw==", + "dev": true, + "dependencies": { + "cli-color": "^2.0.2", + "d": "^1.0.1", + "es5-ext": "^0.10.61", + "mute-stream": "0.0.8", + "process-utils": "^4.0.0", + "timers-ext": "^0.1.7", + "type": "^2.6.0" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/cli-progress-footer/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/cli-spinners": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-sprintf-format": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cli-sprintf-format/-/cli-sprintf-format-1.1.1.tgz", + "integrity": "sha512-BbEjY9BEdA6wagVwTqPvmAwGB24U93rQPBFZUT8lNCDxXzre5LFHQUTJc70czjgUomVg8u8R5kW8oY9DYRFNeg==", + "dev": true, + "dependencies": { + "cli-color": "^2.0.1", + "es5-ext": "^0.10.53", + "sprintf-kit": "^2.0.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cli-sprintf-format/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-sprintf-format/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dev": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "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" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-parser/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "node_modules/core-js": { + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.1.tgz", + "integrity": "sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.0.tgz", + "integrity": "sha512-0tLZ9URlPGU7JsKq0DQOQ3FoRsYX8xDZ7xMiATQfaiGMz7EHowNkbU9u1coAOmnh9p/1ySpm0RB3JNWRXM5GCg==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cpu-features": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", + "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "~0.0.6", + "nan": "^2.17.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-fetch/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/cross-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/cross-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/cross-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/data-urls": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/date-fns": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.3.1.tgz", + "integrity": "sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "dependencies": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar/node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/decompress-tar/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-tar/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/decompress-tar/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/decompress-tar/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/decompress-tar/node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "dev": true, + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip/node_modules/get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress/node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "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 + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/deferred": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/deferred/-/deferred-0.7.11.tgz", + "integrity": "sha512-8eluCl/Blx4YOGwMapBvXRKxHXhA8ejDXYzEaK8+/gtcm8hRMhSLmXSqDmNUKNc/C8HNSmuyyp/hflhqDAvK2A==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.50", + "event-emitter": "^0.3.5", + "next-tick": "^1.0.0", + "timers-ext": "^0.1.7" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "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.8" + } + }, + "node_modules/destroy": { + "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/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/devtools-protocol": { + "version": "0.0.1094867", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1094867.tgz", + "integrity": "sha512-pmMDBKiRVjh0uKK6CT1WqZmM3hBVSgD+N2MrgyV1uNizAZMw4tx6i/RTc+/uCsKSCmg0xXx7arCP/OFcIwTsiQ==" + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/docker-modem": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", + "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.11.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/dockerode": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", + "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", + "dev": true, + "dependencies": { + "@balena/dockerignore": "^1.0.2", + "docker-modem": "^3.0.0", + "tar-fs": "~2.0.1" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/duration": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", + "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.46" + } + }, + "node_modules/dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "dev": true, + "dependencies": { + "xtend": "^4.0.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.503", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.503.tgz", + "integrity": "sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-set/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", + "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.48.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "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.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "dev": true, + "dependencies": { + "get-stdin": "^6.0.0" + }, + "bin": { + "eslint-config-prettier-check": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=3.14.1" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", + "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "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" + } + }, + "node_modules/esniff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz", + "integrity": "sha512-vmHXOeOt7FJLsqofvFk4WB3ejvcHizCd8toXXwADmYfd02p2QwHRgkUbhYDX54y08nqk818CUTWipgZGlyN07g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.12" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "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" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "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" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.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" + } + }, + "node_modules/essentials": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/essentials/-/essentials-1.2.0.tgz", + "integrity": "sha512-kP/j7Iw7KeNE8b/o7+tr9uX2s1wegElGOoGZ2Xm35qBr4BbbEcH3/bxR2nfH9l9JANCq9AUrvKw+gRuHtZp0HQ==", + "dev": true, + "dependencies": { + "uni-global": "^1.0.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/expect/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/jest-diff": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", + "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/jest-matcher-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", + "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/express": { + "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.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "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.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/body-parser": { + "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": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "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", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "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" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "dev": true, + "dependencies": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/filesize": { + "version": "10.0.12", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.0.12.tgz", + "integrity": "sha512-6RS9gDchbn+qWmtV2uSjo5vmKizgfCQeb5jKmqx8HyzA3MoLqqyQxN+QcjkGBJt7FjJ9qFce67Auyya5rRRbpw==", + "dev": true, + "engines": { + "node": ">= 10.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "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.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-requires": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-requires/-/find-requires-1.0.0.tgz", + "integrity": "sha512-UME7hNwBfzeISSFQcBEDemEEskpOjI/shPrpJM5PI4DSdn6hX0dmz+2dL70blZER2z8tSnTRL+2rfzlYgtbBoQ==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.49", + "esniff": "^1.1.0" + }, + "bin": { + "find-requires": "bin/find-requires.js" + } + }, + "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/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "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/follow-redirects": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fs2": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/fs2/-/fs2-0.3.9.tgz", + "integrity": "sha512-WsOqncODWRlkjwll+73bAxVW3JPChDgaPX3DT4iTTm73UmG4VgALa7LaFblP232/DN60itkOrPZ8kaP1feksGQ==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "deferred": "^0.7.11", + "es5-ext": "^0.10.53", + "event-emitter": "^0.3.5", + "ignore": "^5.1.8", + "memoizee": "^0.4.14", + "type": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/fs2/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.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": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-promise": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", + "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/ahmadnassri" + }, + "peerDependencies": { + "glob": "^7.1.6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/global-agent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.2.0.tgz", + "integrity": "sha512-+20KpaW6DDLqhG7JDiJpD1JvNvb8ts+TNl7BPOYcURqCrXqnN1Vf+XVOrkKJAFPqfX+oEhsdzOj1hLWkBTdNJg==", + "dependencies": { + "boolean": "^3.0.1", + "core-js": "^3.6.5", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "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==", + "dev": true + }, + "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/graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/helmet": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-4.6.0.tgz", + "integrity": "sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "engines": { + "node": "*" + } + }, + "node_modules/hpagent": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz", + "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ==" + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ip": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", + "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "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-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "dev": true, + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/jest-circus/node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/jest-circus/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-circus/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-cli/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-config/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-each/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "peer": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/jest-environment-node/node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/jest-environment-node/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-node/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-haste-map/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-haste-map/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/jest-jasmine2/node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-mock": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", + "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/jest-runner/node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/jest-runner/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runner/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/jest-runtime/node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/jest-runtime/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runtime/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", + "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.4", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.3", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/transform": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", + "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", + "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-haste-map": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", + "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", + "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-worker": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", + "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.6.3", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watcher/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/jose": { + "version": "4.14.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", + "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", + "dependencies": { + "abab": "^2.0.6", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-colorizer": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/json-colorizer/-/json-colorizer-2.2.2.tgz", + "integrity": "sha512-56oZtwV1piXrQnRNTtJeqRv+B9Y/dXAYLqBBaYl/COcUdoZxgLBLAO88+CnkbT6MxNs0c5E9mPBIb2sFcNz3vw==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "lodash.get": "^4.4.2" + } + }, + "node_modules/json-colorizer/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-colorizer/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-colorizer/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/json-colorizer/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/json-colorizer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/json-colorizer/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-colorizer/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-cycle": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.5.0.tgz", + "integrity": "sha512-GOehvd5PO2FeZ5T4c+RxobeT5a1PiGpF4u9/3+UvrMU4bhnVqzJY7hm39wg8PDCqkU91fWGH8qjWR4bn+wgq9w==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-refs": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-3.0.15.tgz", + "integrity": "sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw==", + "dev": true, + "dependencies": { + "commander": "~4.1.1", + "graphlib": "^2.1.8", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "native-promise-only": "^0.8.1", + "path-loader": "^1.0.10", + "slash": "^3.0.0", + "uri-js": "^4.2.2" + }, + "bin": { + "json-refs": "bin/json-refs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/json-refs/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/json-refs/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-refs/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/json-schema-to-typescript": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-13.1.0.tgz", + "integrity": "sha512-DB6JGDgpszucGYAl5JXuIU84/b9KaPa0Iq09g+JqGEYGG2RzUvaef4nb4B680KT8eR6R5xKC+xBHsPDjc2UPAQ==", + "dev": true, + "dependencies": { + "@bcherny/json-schema-ref-parser": "10.0.5-fork", + "@types/json-schema": "^7.0.11", + "@types/lodash": "^4.14.182", + "@types/prettier": "^2.6.1", + "cli-color": "^2.0.2", + "get-stdin": "^8.0.0", + "glob": "^7.1.6", + "glob-promise": "^4.2.2", + "is-glob": "^4.0.3", + "lodash": "^4.17.21", + "minimist": "^1.2.6", + "mkdirp": "^1.0.4", + "mz": "^2.7.0", + "prettier": "^2.6.2" + }, + "bin": { + "json2ts": "dist/src/cli.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/json-schema-to-typescript/node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/json-schema-to-typescript/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dev": true, + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwks-rsa": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.0.1.tgz", + "integrity": "sha512-UUOZ0CVReK1QVU3rbi9bC7N5/le8ziUj0A2ef1Q0M7OPD2KvjEYizptqIxGIo6fSLYDkqBrazILS18tYuRc8gw==", + "dependencies": { + "@types/express": "^4.17.14", + "@types/jsonwebtoken": "^9.0.0", + "debug": "^4.3.4", + "jose": "^4.10.4", + "limiter": "^1.1.5", + "lru-memoizer": "^2.1.4" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwt-decode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", + "integrity": "sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libphonenumber-js": { + "version": "1.10.43", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.43.tgz", + "integrity": "sha512-M/iPACJGsTvEy8QmUY4K0SoIFB71X2j7y2JvUMYzUXUxCNmiU+NTfHdz7gt+dC48BVfBzZi2oO6s9TDGllCfxA==" + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "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.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true + }, + "node_modules/log": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/log/-/log-6.3.1.tgz", + "integrity": "sha512-McG47rJEWOkXTDioZzQNydAVvZNeEkSyLJ1VWkFwfW+o1knW+QSi8D1KjPn/TnctV+q99lkvJNe1f0E1IjfY2A==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "duration": "^0.2.2", + "es5-ext": "^0.10.53", + "event-emitter": "^0.3.5", + "sprintf-kit": "^2.0.1", + "type": "^2.5.0", + "uni-global": "^1.0.0" + } + }, + "node_modules/log-node": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/log-node/-/log-node-8.0.3.tgz", + "integrity": "sha512-1UBwzgYiCIDFs8A0rM2QdBFo8Wd8UQ0HrSTu/MNI+/2zN3NoHRj2fhplurAyuxTYUXu3Oohugq1jAn5s05u1MQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "cli-color": "^2.0.1", + "cli-sprintf-format": "^1.1.1", + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "sprintf-kit": "^2.0.1", + "supports-color": "^8.1.1", + "type": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "peerDependencies": { + "log": "^6.0.0" + } + }, + "node_modules/log-node/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/log-node/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lru-memoizer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.2.0.tgz", + "integrity": "sha512-QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw==", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "~4.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/lru-cache": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", + "integrity": "sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==", + "dependencies": { + "pseudomap": "^1.0.1", + "yallist": "^2.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "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.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.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" + }, + "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/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, + "node_modules/native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==", + "dev": true + }, + "node_modules/natural": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/natural/-/natural-6.7.0.tgz", + "integrity": "sha512-Z5gvSnDEDF9IMSi8K70GY5cnIg0h4f1p/oIcrN9BPqcn22reexJSEsakDPpEJvs2Qv38PHjICExL0UHvvl7oig==", + "dev": true, + "dependencies": { + "afinn-165": "^1.0.2", + "afinn-165-financialmarketnews": "^3.0.0", + "apparatus": "^0.0.10", + "safe-stable-stringify": "^2.2.0", + "stopwords-iso": "^1.1.0", + "sylvester": "^0.0.12", + "underscore": "^1.9.1", + "wordnet-db": "^3.1.11" + }, + "engines": { + "node": ">=0.4.10" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/ncjsm": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ncjsm/-/ncjsm-4.3.2.tgz", + "integrity": "sha512-6d1VWA7FY31CpI4Ki97Fpm36jfURkVbpktizp8aoVViTZRQgr/0ddmlKerALSSlzfwQRBeSq1qwwVcBJK4Sk7Q==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0", + "deferred": "^0.7.11", + "es5-ext": "^0.10.62", + "es6-set": "^0.1.6", + "ext": "^1.7.0", + "find-requires": "^1.0.0", + "fs2": "^0.3.9", + "type": "^2.7.2" + } + }, + "node_modules/ncjsm/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/nock": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.3.tgz", + "integrity": "sha512-z+KUlILy9SK/RjpeXDiDUEAq4T94ADPHE3qaRkf66mpEhzc/ytOMm3Bwdrbq6k1tMWkbdujiKim3G2tfQARuJw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.21", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/nodemailer": { + "version": "6.9.9", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.9.tgz", + "integrity": "sha512-dexTll8zqQoVJEZPwQAKzxxtFn0qTnjdQTchoU6Re9BUUGBJiOy3YMn/0ShTW6J5M0dfQ1NeDeRTTl4oIWgQMA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-registry-utilities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-utilities/-/npm-registry-utilities-1.0.0.tgz", + "integrity": "sha512-9xYfSJy2IFQw1i6462EJzjChL9e65EfSo2Cw6kl0EFeDp05VvU+anrQk3Fc0d1MbVCq7rWIxeer89O9SUQ/uOg==", + "dev": true, + "dependencies": { + "ext": "^1.6.0", + "fs2": "^0.3.9", + "memoizee": "^0.4.15", + "node-fetch": "^2.6.7", + "semver": "^7.3.5", + "type": "^2.6.0", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/npm-registry-utilities/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "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" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/oidc-token-hash": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", + "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", + "engines": { + "node": "^10.13.0 || >=12.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openid-client": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.4.3.tgz", + "integrity": "sha512-sVQOvjsT/sbSfYsQI/9liWQGVZH/Pp3rrtlGEwgk/bbHfrUDZ24DN57lAagIwFtuEu+FM9Ev7r85s8S/yPjimQ==", + "dependencies": { + "jose": "^4.14.4", + "lru-cache": "^6.0.0", + "object-hash": "^2.2.0", + "oidc-token-hash": "^5.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/openid-client/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/openid-client/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "dependencies": { + "p-timeout": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "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/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/papaparse": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz", + "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-loader": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.12.tgz", + "integrity": "sha512-n7oDG8B+k/p818uweWrOixY9/Dsr89o2TkCm6tOTex3fpdo2+BFDgR+KpB37mGKBRsBAlR8CIJMFN0OEy/7hIQ==", + "dev": true, + "dependencies": { + "native-promise-only": "^0.8.1", + "superagent": "^7.1.6" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "engines": { + "node": "14 || >=16.14" + } + }, + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path2": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path2/-/path2-0.1.0.tgz", + "integrity": "sha512-TX+cz8Jk+ta7IvRy2FAej8rdlbrP0+uBIkP/5DTODez/AuL/vSb30KuAdDxGVREXzn8QfAiu5mJYJ1XjbOhEPA==", + "dev": true + }, + "node_modules/peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/pg": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", + "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.6.2", + "pg-pool": "^3.6.1", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "dependencies": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz", + "integrity": "sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prng-well1024a": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prng-well1024a/-/prng-well1024a-1.0.1.tgz", + "integrity": "sha512-lBXfAW5Vgpej/QVHNYhTSsiz1IIlgo7kv8zzQL7v5crD8jgA4Fk3axwb9aCrDHUqJ4zKXsb3U3m6sw21165Trg==", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/process-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/process-utils/-/process-utils-4.0.0.tgz", + "integrity": "sha512-fMyMQbKCxX51YxR7YGCzPjLsU3yDzXFkP4oi1/Mt5Ixnk7GO/7uUTj8mrCHUwuvozWzI+V7QSJR9cZYnwNOZPg==", + "dev": true, + "dependencies": { + "ext": "^1.4.0", + "fs2": "^0.3.9", + "memoizee": "^0.4.14", + "type": "^2.1.0" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/process-utils/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-queue": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/promise-queue/-/promise-queue-2.2.5.tgz", + "integrity": "sha512-p/iXrPSVfnqPft24ZdNNLECw/UrtLTpT3jpAAMzl/o5/rDsGCPo3/CQS2611flL6LkoEJ3oQZw7C8Q80ZISXRQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer": { + "version": "19.7.5", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.7.5.tgz", + "integrity": "sha512-UqD8K+yaZa6/hwzP54AATCiHrEYGGxzQcse9cZzrtsVGd8wT0llCdYhsBp8n+zvnb1ofY0YFgI3TYZ/MiX5uXQ==", + "hasInstallScript": true, + "dependencies": { + "cosmiconfig": "8.1.0", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.7.5" + } + }, + "node_modules/puppeteer-core": { + "version": "19.7.5", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.7.5.tgz", + "integrity": "sha512-EJuNha+SxPfaYFbkoWU80H3Wb1SiQH5fFyb2xdbWda0ziax5mhV63UMlqNfPeTDIWarwtR4OIcq/9VqY8HPOsg==", + "dependencies": { + "chromium-bidi": "0.4.5", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1094867", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "rimraf": "4.4.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.12.1" + }, + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/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/puppeteer-core/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/puppeteer-core/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/puppeteer-core/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/puppeteer-core/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/puppeteer-core/node_modules/rimraf": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.0.tgz", + "integrity": "sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/puppeteer-core/node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", + "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/qs": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "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/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randy": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/randy/-/randy-1.5.1.tgz", + "integrity": "sha512-xCxHBrX08xQo8KoyZgOlM9fQbHK0oDvBl/k4+kPVGBDqfbL4c7N6uxiWTJnkJRkkg4hRrf/3CH8Vt1HiaQ2IVQ==", + "dev": true, + "dependencies": { + "prng-well1024a": "~1.0.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/readable-stream": { + "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", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "dev": true, + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-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==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "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" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" + }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "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/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + }, + "node_modules/seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/seek-bzip/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/send": { + "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": "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": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/sentencer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/sentencer/-/sentencer-0.2.1.tgz", + "integrity": "sha512-hDLHIc7DTdZASPJhL2IZChmUq9tTUsOaAlK2kNPYI9KSdrPeqNZfjJfTCEoqcR/IlLlIfngi7Wkx/KLPqqNtyQ==", + "dev": true, + "dependencies": { + "articles": "~0.2.1", + "lodash": "^4.17.11", + "natural": "~0.1.28", + "randy": "~1.5.1" + } + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "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.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serverless": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/serverless/-/serverless-3.36.0.tgz", + "integrity": "sha512-VY7UzP4u1/yuTNpF2Wssrru16qhhReLCjgL2oeHCvhujxPyTFv9TQGSlLhaT0ZUCXhRBphwVwITTRopo6NSUgA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@serverless/dashboard-plugin": "^7.1.0", + "@serverless/platform-client": "^4.4.0", + "@serverless/utils": "^6.13.1", + "abort-controller": "^3.0.0", + "ajv": "^8.12.0", + "ajv-formats": "^2.1.1", + "archiver": "^5.3.1", + "aws-sdk": "^2.1404.0", + "bluebird": "^3.7.2", + "cachedir": "^2.3.0", + "chalk": "^4.1.2", + "child-process-ext": "^2.1.1", + "ci-info": "^3.8.0", + "cli-progress-footer": "^2.3.2", + "d": "^1.0.1", + "dayjs": "^1.11.8", + "decompress": "^4.2.1", + "dotenv": "^16.3.1", + "dotenv-expand": "^10.0.0", + "essentials": "^1.2.0", + "ext": "^1.7.0", + "fastest-levenshtein": "^1.0.16", + "filesize": "^10.0.7", + "fs-extra": "^10.1.0", + "get-stdin": "^8.0.0", + "globby": "^11.1.0", + "graceful-fs": "^4.2.11", + "https-proxy-agent": "^5.0.1", + "is-docker": "^2.2.1", + "js-yaml": "^4.1.0", + "json-colorizer": "^2.2.2", + "json-cycle": "^1.5.0", + "json-refs": "^3.0.15", + "lodash": "^4.17.21", + "memoizee": "^0.4.15", + "micromatch": "^4.0.5", + "node-fetch": "^2.6.11", + "npm-registry-utilities": "^1.0.0", + "object-hash": "^3.0.0", + "open": "^8.4.2", + "path2": "^0.1.0", + "process-utils": "^4.0.0", + "promise-queue": "^2.2.5", + "require-from-string": "^2.0.2", + "semver": "^7.5.3", + "signal-exit": "^3.0.7", + "stream-buffers": "^3.0.2", + "strip-ansi": "^6.0.1", + "supports-color": "^8.1.1", + "tar": "^6.1.15", + "timers-ext": "^0.1.7", + "type": "^2.7.2", + "untildify": "^4.0.0", + "uuid": "^9.0.0", + "ws": "^7.5.9", + "yaml-ast-parser": "0.0.43" + }, + "bin": { + "serverless": "bin/serverless.js", + "sls": "bin/serverless.js" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/serverless-domain-manager": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/serverless-domain-manager/-/serverless-domain-manager-7.1.2.tgz", + "integrity": "sha512-KuDqDmr2sC4o+7/PAWEo6m2Ox4HLSWMVgO6nncJIeWeaV7iaffAMVgg2GtOwYL7p93rS3eLGO2ra2ce4QYaTkg==", + "dev": true, + "dependencies": { + "@aws-sdk/client-acm": "^3.370.0", + "@aws-sdk/client-api-gateway": "^3.370.0", + "@aws-sdk/client-apigatewayv2": "^3.370.0", + "@aws-sdk/client-cloudformation": "^3.370.0", + "@aws-sdk/client-route-53": "^3.370.0", + "@aws-sdk/client-s3": "^3.370.0", + "@aws-sdk/config-resolver": "^3.370.0", + "@aws-sdk/credential-providers": "^3.370.0", + "@aws-sdk/node-config-provider": "^3.370.0", + "@aws-sdk/smithy-client": "^3.370.0", + "@aws-sdk/util-retry": "^3.370.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "serverless": "^2.60 || ^3.0.0" + } + }, + "node_modules/serverless-dotenv-plugin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serverless-dotenv-plugin/-/serverless-dotenv-plugin-6.0.0.tgz", + "integrity": "sha512-8tLVNwHfDO0sBz6+m+DLTZquRk0AZq9rzqk3kphm1iIWKfan9R7RKt4hdq3eQ0kmDoqzudjPYBEXAJ5bUNKeGQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "dotenv": "^16.0.3", + "dotenv-expand": "^10.0.0" + }, + "peerDependencies": { + "serverless": "1 || 2 || pre-3 || 3" + } + }, + "node_modules/serverless-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/serverless-http/-/serverless-http-3.2.0.tgz", + "integrity": "sha512-QvSyZXljRLIGqwcJ4xsKJXwkZnAVkse1OajepxfjkBXV0BMvRS5R546Z4kCBI8IygDzkQY0foNPC/rnipaE9pQ==", + "engines": { + "node": ">=12.0" + } + }, + "node_modules/serverless-webpack": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/serverless-webpack/-/serverless-webpack-5.13.0.tgz", + "integrity": "sha512-isMEbXbAK1F8YZJfeKgYA5uNuXPFzdHwZyRA9SuMGXVY2L8t1JIzPvRDLZiT4F3uQm16woyal+uaoDyxQo13vg==", + "dev": true, + "dependencies": { + "archiver": "^5.3.1", + "bluebird": "^3.7.2", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^11.1.1", + "glob": "^8.1.0", + "is-builtin-module": "^3.2.1", + "lodash": "^4.17.21", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14" + }, + "optionalDependencies": { + "ts-node": ">= 8.3.0" + }, + "peerDependencies": { + "@types/node": "*", + "serverless": "1 || 2 || 3", + "typescript": ">=2.0", + "webpack": ">= 3.0.0 < 6" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/serverless-webpack/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==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/serverless-webpack/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/serverless-webpack/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/serverless-webpack/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serverless/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/serverless/node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serverless/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/serverless/node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/serverless/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/serverless/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/serverless/node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "peer": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/serverless/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-git": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.20.0.tgz", + "integrity": "sha512-ozK8tl2hvLts8ijTs18iFruE+RoqmC/mqZhjs/+V7gS5W68JpJ3+FCTmLVqmR59MaUQ52MfGQuWsIqfsTbbJ0Q==", + "dev": true, + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "dev": true, + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", + "dev": true + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, + "node_modules/sprintf-kit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sprintf-kit/-/sprintf-kit-2.0.1.tgz", + "integrity": "sha512-2PNlcs3j5JflQKcg4wpdqpZ+AjhQJ2OZEo34NXDtlB0tIPG84xaaXhpA8XFacFiwjKA4m49UOYG83y3hbMn/gQ==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.53" + } + }, + "node_modules/ssh2": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.14.0.tgz", + "integrity": "sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.8", + "nan": "^2.17.0" + } + }, + "node_modules/ssl-checker": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/ssl-checker/-/ssl-checker-2.0.8.tgz", + "integrity": "sha512-pIDGxablZowKR/elbm72Wk7T3lEdrcAKT4ltPsdQrpm7N6EIIvuFQpIcMNG+A/wmiymcRwFDzTd83bW6Yy5LKQ==" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stopwords-iso": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stopwords-iso/-/stopwords-iso-1.1.0.tgz", + "integrity": "sha512-I6GPS/E0zyieHehMRPQcqkiBMJKGgLta+1hREixhoLPqEA0AlVFiC43dl8uPpmkkeRdDMzYRWFWk5/l9x7nmNg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-buffers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/stream-promise": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-promise/-/stream-promise-3.2.0.tgz", + "integrity": "sha512-P+7muTGs2C8yRcgJw/PPt61q7O517tDHiwYEzMWo1GSBCcZedUMT/clz7vUNsSxFphIlJ6QUL4GexQKlfJoVtA==", + "dev": true, + "dependencies": { + "2-thenable": "^1.0.0", + "es5-ext": "^0.10.49", + "is-stream": "^1.1.0" + } + }, + "node_modules/stream-promise/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "dependencies": { + "is-natural-number": "^4.0.1" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-outer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/superagent": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/supertest": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", + "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.0.5" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sylvester": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/sylvester/-/sylvester-0.0.12.tgz", + "integrity": "sha512-SzRP5LQ6Ts2G5NyAa/jg16s8e3R7rfdFjizy1zeoecYWw+nGL+YA1xZvW/+iJmidBGSdLkuvdwTYEyJEb+EiUw==", + "dev": true, + "engines": { + "node": ">=0.2.6" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.19.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/token-types/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-repeated/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ts-jest": { + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/ts-jest/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/ts-jest/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/ts-loader": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", + "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", + "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.1", + "dynamic-dedupe": "^0.3.0", + "minimist": "^1.2.6", + "mkdirp": "^1.0.4", + "resolve": "^1.0.0", + "rimraf": "^2.6.1", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.2", + "ts-node": "^10.4.0", + "tsconfig": "^7.0.0" + }, + "bin": { + "ts-node-dev": "lib/bin.js", + "tsnd": "lib/bin.js" + }, + "engines": { + "node": ">=0.8.0" + }, + "peerDependencies": { + "node-notifier": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/ts-node-dev/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "dependencies": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "node_modules/tsconfig/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsconfig/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "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==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typeorm": { + "version": "0.2.45", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.45.tgz", + "integrity": "sha512-c0rCO8VMJ3ER7JQ73xfk0zDnVv0WDjpsP6Q1m6CVKul7DB9iVdWLRjPzc8v2eaeBuomsbZ2+gTaYr8k1gm3bYA==", + "dependencies": { + "@sqltools/formatter": "^1.2.2", + "app-root-path": "^3.0.0", + "buffer": "^6.0.3", + "chalk": "^4.1.0", + "cli-highlight": "^2.1.11", + "debug": "^4.3.1", + "dotenv": "^8.2.0", + "glob": "^7.1.6", + "js-yaml": "^4.0.0", + "mkdirp": "^1.0.4", + "reflect-metadata": "^0.1.13", + "sha.js": "^2.4.11", + "tslib": "^2.1.0", + "uuid": "^8.3.2", + "xml2js": "^0.4.23", + "yargs": "^17.0.1", + "zen-observable-ts": "^1.0.0" + }, + "bin": { + "typeorm": "cli.js" + }, + "funding": { + "url": "https://opencollective.com/typeorm" + }, + "peerDependencies": { + "@sap/hana-client": "^2.11.14", + "better-sqlite3": "^7.1.2", + "hdb-pool": "^0.1.6", + "ioredis": "^4.28.3", + "mongodb": "^3.6.0", + "mssql": "^6.3.1", + "mysql2": "^2.2.5", + "oracledb": "^5.1.0", + "pg": "^8.5.1", + "pg-native": "^3.0.0", + "pg-query-stream": "^4.0.0", + "redis": "^3.1.1", + "sql.js": "^1.4.0", + "sqlite3": "^5.0.2", + "typeorm-aurora-data-api-driver": "^2.0.0" + }, + "peerDependenciesMeta": { + "@sap/hana-client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "hdb-pool": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mssql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "pg-query-stream": { + "optional": true + }, + "redis": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "typeorm-aurora-data-api-driver": { + "optional": true + } + } + }, + "node_modules/typeorm/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/typeorm/node_modules/cliui": { + "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.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/typeorm/node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/typeorm/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/typeorm/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/typeorm/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/typeorm/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/typeorm/node_modules/yargs-parser": { + "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": ">=12" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.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==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unbzip2-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "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==", + "dev": true + }, + "node_modules/uni-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/uni-global/-/uni-global-1.0.0.tgz", + "integrity": "sha512-WWM3HP+siTxzIWPNUg7hZ4XO8clKi6NoCAJJWnuRL+BAqyFXF8gC03WNyTefGoUXYc47uYgXxpKLIEvo65PEHw==", + "dev": true, + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/uni-global/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, + "node_modules/utf-8-validate": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.3.tgz", + "integrity": "sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/wait-for-expect": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/wait-for-expect/-/wait-for-expect-3.0.2.tgz", + "integrity": "sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==", + "dev": true + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/wappalyzer": { + "version": "6.10.66", + "resolved": "https://registry.npmjs.org/wappalyzer/-/wappalyzer-6.10.66.tgz", + "integrity": "sha512-rPnZY1dxIJvPrL0h7AKLrwQQ5vuSCD/ALwIXdwHurlfgex1sxFEQKwG/YjLEnR4iR+HpQsLl47EKlMu87/kbow==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "funding": [ + { + "url": "https://github.com/sponsors/aliasio" + } + ], + "dependencies": { + "puppeteer": "~19.7.0" + }, + "bin": { + "wappalyzer": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/wappalyzer-core": { + "version": "6.10.66", + "resolved": "https://registry.npmjs.org/wappalyzer-core/-/wappalyzer-core-6.10.66.tgz", + "integrity": "sha512-7EOYy4DpdRcfoW00SfCwKjJE3//AAbyl2dzuG6DgICKPoRf60ero/1fBHOB2ipVTmIxpnnlsJ8jY0r5McwRwtA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "funding": [ + { + "url": "https://github.com/sponsors/aliasio" + } + ] + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wordnet-db": { + "version": "3.1.14", + "resolved": "https://registry.npmjs.org/wordnet-db/-/wordnet-db-3.1.14.tgz", + "integrity": "sha512-zVyFsvE+mq9MCmwXUWHIcpfbrHHClZWZiVOzKSxNJruIcFn2RbY55zkhiAMMxM8zCVSmtNiViq8FsAZSFpMYag==", + "dev": true, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "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==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", + "dev": true + }, + "node_modules/yamljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + }, + "bin": { + "json2yaml": "bin/json2yaml", + "yaml2json": "bin/yaml2json" + } + }, + "node_modules/yamljs/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/yamljs/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zen-observable": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", + "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" + }, + "node_modules/zen-observable-ts": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz", + "integrity": "sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==", + "dependencies": { + "@types/zen-observable": "0.8.3", + "zen-observable": "0.8.15" + } + }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + } +} diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 00000000..8ccc8446 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,118 @@ +{ + "name": "crossfeed-backend", + "version": "1.0.0", + "description": "", + "engines": { + "node": ">=18.0.0" + }, + "engineStrict": true, + "dependencies": { + "@aws-sdk/client-cloudwatch-logs": "^3.417.0", + "@aws-sdk/client-ssm": "^3.414.0", + "@elastic/elasticsearch": "~7.10.0", + "@thefaultvault/tfv-cpe-parser": "^1.3.0", + "@types/dockerode": "^3.3.19", + "amqplib": "^0.10.3", + "aws-sdk": "^2.1551.0", + "axios": "^1.6", + "body-parser": "^1.19.0", + "bufferutil": "^4.0.7", + "class-transformer": "^0.3.1", + "class-validator": "^0.14.0", + "cookie": "^0.4.1", + "cookie-parser": "^1.4.6", + "cors": "^2.8.5", + "date-fns": "^3.3.1", + "express": "^4.18.1", + "global-agent": "^2.2.0", + "got": "^11.8.5", + "handlebars": "^4.7.8", + "helmet": "^4.1.1", + "http-proxy-middleware": "^2.0.6", + "ip": "^1.1.9", + "jsdom": "^22.1", + "jsonwebtoken": "^9.0.2", + "jwks-rsa": "^3.0", + "lodash": "^4.17.21", + "nodemailer": "^6.7.2", + "openid-client": "^5.4", + "p-queue": "^6.6.2", + "p-retry": "^4.6.1", + "papaparse": "^5.3.1", + "pg": "^8.11", + "portscanner": "^2.2.0", + "reflect-metadata": "^0.1.13", + "serverless-http": "^3.2.0", + "ssl-checker": "^2.0.7", + "tough-cookie": "^4.1.3", + "typeorm": "^0.2.45", + "utf-8-validate": "^6.0.3", + "uuid": "^9.0.1", + "wappalyzer": "^6.10.63", + "wappalyzer-core": "^6.10.63", + "ws": "^8.13.0" + }, + "devDependencies": { + "@jest/globals": "^29", + "@types/aws-lambda": "^8.10.62", + "@types/cors": "^2.8.17", + "@types/dockerode": "^3.3.19", + "@types/jest": "^27", + "@types/node": "^20.6", + "@types/node-fetch": "^2.6.4", + "@types/nodemailer": "^6.4.0", + "@types/papaparse": "^5.3.0", + "@types/supertest": "^2.0", + "@types/uuid": "^9.0.7", + "@typescript-eslint/eslint-plugin": "^5.59", + "@typescript-eslint/parser": "^5.59", + "debug": "^4.3.4", + "dockerode": "^3.3.1", + "dotenv": "^16.0", + "eslint": "^8.46.0", + "eslint-config-prettier": "^6.12.0", + "eslint-plugin-prettier": "^5.0.0", + "jest": "^27", + "json-schema-to-typescript": "^13.0", + "nock": "^13.0.4", + "prettier": "^3.0.0", + "sentencer": "^0.2.1", + "serverless": "^3.30", + "serverless-domain-manager": "^7.0", + "serverless-dotenv-plugin": "^6.0.0", + "serverless-webpack": "^5.11.0", + "supertest": "^6.3", + "ts-jest": "^27", + "ts-loader": "^9.4.1", + "ts-node": "^10.9", + "ts-node-dev": "^2.0.0", + "typescript": "^4.9", + "wait-for-expect": "^3.0.2", + "webpack": "^5.88", + "webpack-cli": "^5.1" + }, + "overrides": { + "file-type": "^16.5.4", + "superagent": "^8.0.5", + "xml2js": "0.5.0", + "kind-of": "^6.0.3", + "execa": "^5.1.1", + "natural": "^6.5.0", + "semver": "^7.5.3" + }, + "scripts": { + "test": "jest --detectOpenHandles", + "test-python": "pytest", + "lint": "eslint '**/*.{ts,tsx,js,jsx}'", + "lint:fix": "eslint '**/*.{ts,tsx,js,jsx}' --fix", + "codegen": "ts-node src/tools/generate-types.ts", + "build-worker": "sh ./tools/build-worker.sh", + "deploy-worker-staging": "./tools/deploy-worker.sh", + "deploy-worker-prod": "./tools/deploy-worker.sh crossfeed-prod-worker", + "syncdb": "docker-compose exec -T backend npx ts-node src/tools/run-syncdb.ts", + "pesyncdb": "docker-compose exec -T backend npx ts-node src/tools/run-pesyncdb.ts", + "control-queue": "docker-compose exec -T backend npx ts-node src/tools/consumeControlQueue.ts" + }, + "author": "", + "license": "ISC" +} diff --git a/backend/scripts/populateCountiesCities/United_States_Cities_with_URLs.csv b/backend/scripts/populateCountiesCities/United_States_Cities_with_URLs.csv new file mode 100644 index 00000000..11d4f279 --- /dev/null +++ b/backend/scripts/populateCountiesCities/United_States_Cities_with_URLs.csv @@ -0,0 +1,13344 @@ +State,County,City,Wikipedia_URL +Alabama,Henry County,Abbeville,http://www.cityofabbeville.org/ +Alabama,Jefferson County,Adamsville,http://www.cityofadamsville.org/ +Alabama,Winston County,Addison,http://town-of-addison.com/ +Alabama,Shelby County,Alabaster,http://www.cityofalabaster.com +Alabama,Marshall County,Albertville,http://www.cityofalbertville.com +Alabama,Tallapoosa County,Alexander City,https://alexandercityal.gov/ +Alabama,Pickens County,Aliceville,https://www.thecityofaliceville.com/ +Alabama,Covington County,Andalusia,http://www.cityofandalusia.com +Alabama,Calhoun County,Anniston,http://www.annistonal.gov +Alabama,Marshall County,Arab,http://www.arabcity.org +Alabama,Limestone County,Ardmore,http://www.townofardmorealabama.com/ +Alabama,St. Clair County,Argo,http://www.cityofargo.org/ +Alabama,Houston County,Ashford,http://www.cityofashford.com/ +Alabama,Clay County,Ashland,http://www.cityofashland.net/ +Alabama,St. Clair County,Ashville,http://www.cityofashville.org/ +Alabama,Limestone County,Athens,http://www.athensal.us/ +Alabama,Escambia County,Atmore,https://cityofatmore.com/ +Alabama,Etowah County,Attalla,http://www.attallacity.com +Alabama,Lee County,Auburn,http://www.auburnalabama.org/ +Alabama,Baldwin County,Bay Minette,http://www.cityofbayminette.org +Alabama,Mobile County,Bayou La Batre,http://cityofbayoulabatre.com +Alabama,Fayette County,Berry,http://townofberryalabama.org +Alabama,Jefferson County,Bessemer,https://www.bessemeral.org/ +Alabama,Jefferson County,Birmingham,https://www.birminghamal.gov/ +Alabama,Blount County,Blountsville,https://blountsvilleal.com/ +Alabama,Marshall County,Boaz,http://www.cityofboaz.org +Alabama,Crenshaw County,Brantley,https://www.townofbrantley.net/ +Alabama,Bibb County,Brent,http://www.cityofbrentalabama.com +Alabama,Escambia County,Brewton,http://www.cityofbrewton.org/ +Alabama,Marion County,Brilliant,http://www.brilliantal.org +Alabama,Jefferson County,Brookside,https://www.brooksidealabama.com/ +Alabama,Tuscaloosa County,Brookwood,http://www.brookwoodalabama.com/ +Alabama,Pike County,Brundidge,http://www.brundidge.org/ +Alabama,Choctaw County,Butler,https://www.butleralabama.org/ +Alabama,Chilton County,Calera,http://www.cityofcalera.org +Alabama,Walker County,Carbon Hill,https://carbonhill.org/ +Alabama,Cherokee County,Cedar Bluff,http://www.cedarbluff-al.org +Alabama,Jefferson County,Center Point,https://www.cityofcenterpoint.org/ +Alabama,Cherokee County,Centre,http://www.cityofcentre.com +Alabama,Bibb County,Centreville,https://cityofcentreville.com/ +Alabama,Washington County,Chatom,http://www.chatom.org/ +Alabama,Shelby County,Chelsea,http://www.cityofchelsea.com +Alabama,Mobile County,Chickasaw,http://www.cityofchickasaw.org +Alabama,Talladega County,Childersburg,http://www.childersburg.org +Alabama,Mobile County,Citronelle,http://www.cityofcitronelle.com +Alabama,Chilton County,Clanton,http://www.clanton.al.us +Alabama,Jefferson County,Clay,http://www.clayalabama.org/ +Alabama,Tuscaloosa County,Coaling,http://coalingalabama.com/ +Alabama,Tuscaloosa County,Coker,http://townofcoker.com/ +Alabama,DeKalb County,Collinsville,http://www.collinsvillealabama.net +Alabama,Shelby County,Columbiana,https://cityofcolumbiana.com/ +Alabama,Elmore County,Coosada,https://townofcoosada.com/ +Alabama,Houston County,Cottonwood,http://www.cottonwoodalabama.com +Alabama,Blount County,County Line,http://mycountyline.org/ +Alabama,Mobile County,Creola,http://www.cityofcreola.org +Alabama,DeKalb County,Crossville,http://www.crossvillealabama.com +Alabama,Cullman County,Cullman,https://cullmanal.gov/ +Alabama,Tallapoosa County,Dadeville,http://www.cityofdadevilleal.org +Alabama,Dale County,Daleville,http://dalevilleal.com +Alabama,Baldwin County,Daphne,http://www.daphneal.com/ +Alabama,Mobile County,Dauphin Island,http://www.townofDauphinIsland.org +Alabama,Morgan County,Decatur,http://www.decaturalabamausa.com +Alabama,Marengo County,Demopolis,http://www.demopolisal.gov +Alabama,Cullman County,Dodge City,http://dodgecitytown.com +Alabama,Walker County,Dora,http://www.cityofdora.com/ +Alabama,Houston County,Dothan,http://www.dothan.org +Alabama,Winston County,Double Springs,http://www.townofdoublesprings.com/ +Alabama,Blount County,Douglas,http://www.douglasal.com +Alabama,Escambia County,East Brewton,http://eastbrewton.org +Alabama,Elmore County,Eclectic,http://www.townofeclectic.com +Alabama,Coffee County,Elba,https://www.elbaal.gov +Alabama,Baldwin County,Elberta,https://townofelberta.com/ +Alabama,Elmore County,Elmore,http://townofelmore.com +Alabama,Coffee County,Enterprise,https://www.enterpriseal.gov/ +Alabama,Sumter County,Epes,http://www.cityofepesalabama.com/ +Alabama,Barbour County,Eufaula,http://www.eufaulaalabama.com/ +Alabama,Conecuh County,Evergreen,http://www.evergreenal.org +Alabama,Jefferson County,Fairfield,https://fairfieldal.org/ +Alabama,Baldwin County,Fairhope,http://www.cofairhope.com +Alabama,Morgan County,Falkville,http://www.falkville.org +Alabama,Fayette County,Fayette,http://fayetteal.org +Alabama,Lauderdale County,Florence,http://www.florenceal.org/ +Alabama,Baldwin County,Foley,http://www.cityoffoley.org +Alabama,DeKalb County,Fort Payne,http://www.fortpayne.org +Alabama,Jefferson County,Fultondale,http://www.cityoffultondale.com +Alabama,DeKalb County,Fyffe,http://www.fyffecitylimits.com +Alabama,Etowah County,Gadsden,http://www.cityofgadsden.com +Alabama,Covington County,Gantt,https://www.townofgantt.com +Alabama,Jefferson County,Gardendale,http://www.cityofgardendale.com/ +Alabama,Geneva County,Geneva,http://www.cityofgeneva.com/ +Alabama,DeKalb County,Geraldine,http://www.geraldinealabama.com/ +Alabama,Fayette County,Glen Allen,http://townofglenallen.org +Alabama,Etowah County,Glencoe,http://www.cityofglencoe.org +Alabama,Cullman County,Good Hope,http://goodhopeal.com +Alabama,Coosa County,Goodwater,http://www.cityofgoodwater.com +Alabama,Pickens County,Gordo,http://www.townofgordo.org/ +Alabama,Marshall County,Grant,http://www.grantal.org +Alabama,Jefferson County,Graysville,http://www.graysvillecity.com +Alabama,Butler County,Greenville,https://greenvilleal.gov/ +Alabama,Clarke County,Grove Hill,http://grovehillalabama.com +Alabama,Marion County,Guin,http://www.guinal.org +Alabama,Baldwin County,Gulf Shores,http://www.gulfshoresal.gov +Alabama,Marshall County,Guntersville,http://guntersvilleal.org +Alabama,Madison County,Gurley,http://www.townofgurleyal.com +Alabama,Marion County,Hackleburg,http://townofhackleburg.com +Alabama,Winston County,Haleyville,http://www.cityofhaleyville.com +Alabama,Marion County,Hamilton,http://hamiltoncityal.org +Alabama,Cullman County,Hanceville,http://cityofhanceville.net +Alabama,Shelby County,Harpersville,https://www.harpersvilleal.gov/ +Alabama,Geneva County,Hartford,http://cityofhartfordal.org/ +Alabama,Morgan County,Hartselle,http://www.hartselle.org +Alabama,Blount County,Hayden,http://www.townofhayden.com +Alabama,Henry County,Headland,http://www.headlandalabama.org +Alabama,Cleburne County,Heflin,http://www.cityofheflin.org/ +Alabama,Shelby County,Helena,http://www.cityofhelena.org/ +Alabama,DeKalb County,Henagar,http://www.cityofhenagar.com +Alabama,Blount County,Highland Lake,http://townofhighlandlake.com +Alabama,Calhoun County,Hobson City,http://www.townofhobsoncity.com/ +Alabama,Franklin County,Hodges,http://hodgesal.com +Alabama,Etowah County,Hokes Bluff,http://www.cityofhokesbluff.com +Alabama,Jackson County,Hollywood,http://thetownofhollywood.com/ +Alabama,Jefferson County,Homewood,http://www.homewoodal.net +Alabama,Jefferson County,Hoover,https://hooveralabama.gov +Alabama,Jefferson County,Hueytown,http://hueytownal.org/ +Alabama,Madison County,Huntsville,https://www.huntsvilleal.gov/ +Alabama,Russell County,Hurtsboro,http://www.hurtsboro.us/ +Alabama,Shelby County,Indian Springs Village,http://www.indianspringsvillage.org/ +Alabama,Jefferson County,Irondale,https://cityofirondaleal.gov/ +Alabama,Clarke County,Jackson,http://cityofjacksonal.com +Alabama,Calhoun County,Jacksonville,http://www.jacksonville-al.org +Alabama,Walker County,Jasper,http://www.jaspercity.com/ +Alabama,Chilton County,Jemison,http://www.jemisonalabama.org +Alabama,Lauderdale County,Killen,http://www.killenal.org/ +Alabama,Jefferson County,Kimberly,http://www.kimberlyal.org/ +Alabama,Houston County,Kinsey,http://kinseyalabama.org/ +Alabama,Coffee County,Kinston,https://www.kinstonal.com/ +Alabama,Chambers County,LaFayette,https://cityoflafayetteal.com/ +Alabama,Tuscaloosa County,Lake View,https://lakeviewalabama.gov/ +Alabama,Chambers County,Lanett,http://www.cityoflanett.com +Alabama,Jefferson County,Leeds,http://leedsalabama.org +Alabama,Cherokee County,Leesburg,http://www.leesburgal.com +Alabama,Lauderdale County,Lexington,http://lexingtonal.org +Alabama,Talladega County,Lincoln,http://www.lincolnalabama.com/ +Alabama,Marengo County,Linden,http://www.lindenalabama.net +Alabama,Clay County,Lineville,http://www.cityoflineville.com +Alabama,Sumter County,Livingston,https://www.cityoflivingstonal.com/ +Alabama,Blount County,Locust Fork,http://www.locustfork.com +Alabama,Lowndes County,Lowndesboro,https://www.townoflowndesboro.org/ +Alabama,Baldwin County,Loxley,http://www.townofloxley.org +Alabama,Crenshaw County,Luverne,http://www.luverne.org +Alabama,Madison County,Madison,http://www.madisonal.gov +Alabama,Baldwin County,Magnolia Springs,http://www.townofmagnoliasprings.org +Alabama,Chilton County,Maplesville,http://www.townofmaplesville.com +Alabama,Perry County,Marion,https://www.discovermarion.org +Alabama,Washington County,McIntosh,https://mcintoshal.com/ +Alabama,Jefferson County,Midfield,http://www.cityofmidfield.com/ +Alabama,Autauga County,Millbrook,http://www.cityofmillbrook.org/ +Alabama,Mobile County,Mobile,http://www.cityofmobile.org +Alabama,Monroe County,Monroeville,https://www.monroevilleal.gov/ +Alabama,Shelby County,Montevallo,http://www.cityofmontevallo.com/ +Alabama,Montgomery County,Montgomery,http://montgomeryal.gov +Alabama,St. Clair County,Moody,https://www.moodyalabama.gov/ +Alabama,Limestone County,Mooresville,http://www.mooresvilleal.com/ +Alabama,Jefferson County,Morris,http://www.morrisal.us/ +Alabama,Lawrence County,Moulton,https://cityofmoultonal.com/ +Alabama,Hale County,Moundville,http://www.moundvillealabama.com +Alabama,Mobile County,Mount Vernon,http://www.mtvernonal.com +Alabama,Jefferson County,Mountain Brook,http://www.mtnbrook.org/ +Alabama,Colbert County,Muscle Shoals,http://www.cityofmuscleshoals.com +Alabama,Dale County,Napier Field,http://www.napierfield.com +Alabama,Winston County,Natural Bridge,http://www.naturalbridgeala.com +Alabama,Madison County,New Hope,http://www.cityofnewhope.org +Alabama,Tallapoosa County,New Site,https://townofnewsite.com/ +Alabama,Tuscaloosa County,Northport,http://www.cityofnorthport.org/ +Alabama,Macon County,Notasulga,http://www.notasulgaal.com +Alabama,Talladega County,Oak Grove,http://www.townofoakgrove.org +Alabama,Wilcox County,Oak Hill,http://oakhillal.com/ +Alabama,St. Clair County,Odenville,https://www.cityofodenville.net/ +Alabama,Calhoun County,Ohatchee,http://www.ohatchee.info +Alabama,Blount County,Oneonta,http://www.cityofoneonta.us +Alabama,Lee County,Opelika,http://www.opelika-al.gov +Alabama,Covington County,Opp,http://www.cityofopp.com +Alabama,Baldwin County,Orange Beach,http://www.cityoforangebeach.com +Alabama,Dallas County,Orrville,https://www.townoforrville.com/ +Alabama,Madison County,Owens Cross Roads,http://www.owenscrossroadsal.gov/ +Alabama,Calhoun County,Oxford,http://www.oxfordal.gov +Alabama,Dale County,Ozark,http://www.ozarkalabama.us +Alabama,Shelby County,Pelham,http://www.pelhamonline.com/ +Alabama,St. Clair County,Pell City,http://pell-city.com/ +Alabama,Baldwin County,Perdido Beach,http://www.townofperdidobeach.org +Alabama,Russell County,Phenix City,http://www.phenixcityal.us +Alabama,Franklin County,Phil Campbell,http://philcampbellal.com +Alabama,Calhoun County,Piedmont,http://www.piedmontcity.org +Alabama,Montgomery County,Pike Road,https://www.pikeroad.us/ +Alabama,Jefferson County,Pinson,https://www.thecityofpinson.com/ +Alabama,Jefferson County,Pleasant Grove,http://www.cityofpg.com/ +Alabama,Autauga County,Prattville,http://www.prattvilleal.gov/ +Alabama,Morgan County,Priceville,http://townofpriceville.com +Alabama,Mobile County,Prichard,http://www.thecityofprichard.org +Alabama,St. Clair County,Ragland,http://www.townofragland.org/ +Alabama,Etowah County,Rainbow City,http://www.rbcalabama.com +Alabama,DeKalb County,Rainsville,http://www.rainsvillealabama.com +Alabama,Franklin County,Red Bay,http://www.cityofredbay.org +Alabama,Pickens County,Reform,http://www.cityofreform.com +Alabama,Houston County,Rehobeth,https://rehobethalabama.com/ +Alabama,Conecuh County,Repton,http://www.reptonalabama.com +Alabama,St. Clair County,Riverside,http://www.riverside-al.com/ +Alabama,Baldwin County,Robertsdale,http://www.robertsdale.org +Alabama,Coosa County,Rockford,http://www.rockfordalabama.net/ +Alabama,Franklin County,Russellville,http://www.russellvilleal.org +Alabama,Geneva County,Samson,http://www.cityofsamson.com/ +Alabama,Cherokee County,Sand Rock,http://www.sandrock-al.org/ +Alabama,Mobile County,Saraland,http://www.saraland.org +Alabama,Mobile County,Satsuma,http://www.cityofsatsuma.com +Alabama,Jackson County,Scottsboro,http://cityofscottsboro.com/ +Alabama,Dallas County,Selma,https://selma-al.gov/ +Alabama,Colbert County,Sheffield,http://www.sheffieldalabama.org/ +Alabama,Macon County,Shorter,http://www.shorteralabama.com +Alabama,Choctaw County,Silas,http://www.silasal.com +Alabama,Baldwin County,Silverhill,http://www.silverhillalabama.com/ +Alabama,Lee County,Smiths Station,https://smithsstational.gov/ +Alabama,Morgan County,Somerville,http://www.townofsomerville.org +Alabama,Etowah County,Southside,http://www.cityofsouthside.com +Alabama,Baldwin County,Spanish Fort,http://www.cityofspanishfort.com +Alabama,St. Clair County,Springville,http://www.springvillealabama.org +Alabama,Lauderdale County,St. Florian,http://www.stflorianalabama.com/ +Alabama,St. Clair County,Steele,https://townofsteele.org +Alabama,Jackson County,Stevenson,http://www.cityofstevensonalabama.com/ +Alabama,Lamar County,Sulligent,http://sulligent.org +Alabama,Walker County,Sumiton,http://www.thecityofsumiton.com +Alabama,Baldwin County,Summerdale,http://www.summerdalealabama.com +Alabama,Marengo County,Sweet Water,https://townofsweetwater.com +Alabama,Talladega County,Sylacauga,http://www.cityofsylacauga.net/ +Alabama,Jefferson County,Sylvan Springs,http://www.sylvanspringsal.org/ +Alabama,DeKalb County,Sylvania,http://www.sylvaniaalabama.com +Alabama,Talladega County,Talladega,http://www.talladega.com +Alabama,Elmore County,Tallassee,http://www.tallassee-al.gov +Alabama,Jefferson County,Tarrant,http://www.cityoftarrant.com/ +Alabama,Houston County,Taylor,https://www.cityoftaylor.org/ +Alabama,Marengo County,Thomaston,http://townofthomaston.com +Alabama,Clarke County,Thomasville,http://www.thomasvilleal.com/ +Alabama,Chilton County,Thorsby,http://www.townofthorsby.com +Alabama,Madison County,Triana,http://www.townoftriana.com +Alabama,Morgan County,Trinity,http://www.trinityal.gov +Alabama,Pike County,Troy,http://www.troyal.gov +Alabama,Jefferson County,Trussville,http://www.trussville.org/ +Alabama,Tuscaloosa County,Tuscaloosa,http://www.tuscaloosa.com/ +Alabama,Colbert County,Tuscumbia,http://www.cityoftuscumbia.org +Alabama,Macon County,Tuskegee,http://tuskegeealabama.gov +Alabama,Perry County,Uniontown,https://www.uniontownal.com +Alabama,Chambers County,Valley,http://www.cityofvalley.com +Alabama,Dallas County,Valley Grande,http://www.cityofvalleygrande.com +Alabama,DeKalb County,Valley Head,http://valleyheadalabama.com/ +Alabama,Tuscaloosa County,Vance,http://townofvance.weebly.com/ +Alabama,Jefferson County,Vestavia Hills,http://vhal.org/ +Alabama,Franklin County,Vina,http://vinaalabama.org +Alabama,Shelby County,Vincent,http://www.townofvincent.com/ +Alabama,Blount County,Warrior,https://cityofwarrior.ning.com +Alabama,Lauderdale County,Waterloo,http://www.waterlooalabama.com/ +Alabama,Calhoun County,Weaver,http://www.weaver-alabama.org +Alabama,Houston County,Webb,http://www.webbalabama.com/ +Alabama,Jefferson County,West Jefferson,https://townofwestjefferson.com/ +Alabama,Shelby County,Westover,http://www.westoveralabama.org/ +Alabama,Elmore County,Wetumpka,http://www.cityofwetumpka.com +Alabama,Shelby County,Wilsonville,http://www.wilsonvilleal.com/ +Alabama,Marion County,Winfield,http://www.winfieldcity.org +Alabama,Randolph County,Woodland,https://www.townofwoodlandal.com/ +Alabama,Bibb County,Woodstock,https://www.townofwoodstockal.com/ +Alabama,Sumter County,York,http://www.cityyork.com/ +Alaska,Sumter County,Adak,https://adak-ak.gov/ +Alaska,Sumter County,Akhiok,https://www.commerce.alaska.gov/dcra/DCRAExternal/community/Details/0b1ab70f-3a34-46fe-8aac-c43348797f98 +Alaska,Sumter County,Akiak,https://akiaknativecommunity.org/ +Alaska,Sumter County,Akutan,https://www.commerce.alaska.gov/dcra/DCRAExternal/community/Details/e569dafa-a01c-4f00-92c2-b27d9ee32ea8 +Alaska,Sumter County,Alakanuk,https://www.commerce.alaska.gov/dcra/DCRAExternal/community/Details/ce7e59f5-2ed0-4555-8468-0a18a3a36191 +Alaska,Sumter County,Aleknagik,https://www.commerce.alaska.gov/dcra/DCRAExternal/community/Details/c47614a0-11f3-498d-b60d-89eee14e54af +Alaska,Sumter County,Aleutians East Borough,http://www.aleutianseast.org +Alaska,Sumter County,Allakaket,https://www.akml.org/wp-content/uploads/2020/02/NEW-2020MOD-For-Website-35.pdf +Alaska,Sumter County,Ambler,https://www.commerce.alaska.gov/dcra/DCRAExternal/community/Details/ceea5ed4-f88d-47ee-81dd-58cd8921b6da +Alaska,Sumter County,Anaktuvuk Pass,https://www.commerce.alaska.gov/dcra/DCRAExternal/community/Details/825f1cab-ad43-490d-b829-4eb77828ab58 +Alaska,Sumter County,Anchorage,https://www.muni.org/ +Alaska,Sumter County,Anderson,http://www.anderson.govoffice.com +Alaska,Sumter County,Angoon,https://www.commerce.alaska.gov/dcra/DCRAExternal/community/Details/72294383-ddd6-4441-8c63-eb92786a82a1 +Alaska,Sumter County,Aniak,https://www.commerce.alaska.gov/dcra/DCRAExternal/community/Details/319d7670-7304-4cb9-9b6b-afe9d3f2b94f +Alaska,Sumter County,Anvik,https://www.commerce.alaska.gov/dcra/DCRAExternal/community/Details/c0a23263-bd61-47ba-9bd4-8152e95aed1a +Alaska,Sumter County,Atka,https://www.commerce.alaska.gov/dcra/DCRAExternal/community/Details/1416bd82-ae8b-413c-a12c-5c56c233e3e3 +Alaska,Sumter County,Atqasuk,https://www.commerce.alaska.gov/dcra/DCRAExternal/community/Details/ac7acc77-e5ba-495e-a707-20889836248b +Alaska,Sumter County,Bethel,https://www.cityofbethel.org/ +Alaska,Sumter County,Coffman Cove,http://www.CCAlaska.com/ +Alaska,Sumter County,Cordova,http://www.cityofcordova.net +Alaska,Sumter County,Craig,http://www.craigak.com +Alaska,Sumter County,Delta Junction,http://ci.delta-junction.ak.us +Alaska,Sumter County,Denali Borough,http://www.denaliborough.com +Alaska,Sumter County,Dillingham,http://dillinghamak.us +Alaska,Sumter County,Edna Bay,http://www.ednabayalaska.net +Alaska,Sumter County,Fairbanks,https://www.fairbanksalaska.us/ +Alaska,Sumter County,Fairbanks North Star Borough,http://www.co.fairbanks.ak.us +Alaska,Sumter County,False Pass,http://home.gci.net/~cityoffalsepass/ +Alaska,Sumter County,Galena,http://www.ci.galena.ak.us/ +Alaska,Sumter County,Gustavus,http://www.gustavus-ak.gov +Alaska,Sumter County,Homer,http://www.ci.homer.ak.us/ +Alaska,Sumter County,Hoonah,http://www.cityofhoonah.org +Alaska,Sumter County,Houston,http://www.houstonak.com/ +Alaska,Sumter County,Juneau,https://juneau.org/ +Alaska,Sumter County,Kenai,http://www.kenai.city +Alaska,Sumter County,Kenai Peninsula Borough,http://www.borough.kenai.ak.us +Alaska,Sumter County,Ketchikan,http://www.city.ketchikan.ak.us +Alaska,Sumter County,Ketchikan Gateway Borough,http://www.kgbak.us +Alaska,Sumter County,King Cove,http://www.cityofkingcove.com/ +Alaska,Sumter County,Klawock,http://www.cityofklawock.com +Alaska,Sumter County,Kodiak,https://www.city.kodiak.ak.us +Alaska,Sumter County,Kodiak Island Borough,http://www.kodiakak.us +Alaska,Sumter County,Kotzebue,http://www.cityofkotzebue.com +Alaska,Sumter County,Lake and Peninsula Borough,http://www.lakeandpen.com +Alaska,Sumter County,Matanuska-Susitna Borough,http://www.matsugov.us +Alaska,Sumter County,Nome,https://www.nomealaska.org +Alaska,Sumter County,North Pole,http://www.northpolealaska.com +Alaska,Sumter County,North Slope Borough,https://www.north-slope.org/ +Alaska,Sumter County,Northwest Arctic Borough,http://www.nwabor.org +Alaska,Sumter County,Palmer,https://www.palmerak.org/ +Alaska,Sumter County,Pelican,http://pelican.net +Alaska,Sumter County,Petersburg Borough,https://www.petersburgak.gov/ +Alaska,Sumter County,Sand Point,http://www.sandpointak.com/ +Alaska,Sumter County,Seldovia,https://cityofseldovia.com/ +Alaska,Sumter County,Seward,http://www.cityofseward.us +Alaska,Sumter County,Sitka,https://www.cityofsitka.com +Alaska,Sumter County,Soldotna,http://www.soldotna.org +Alaska,Sumter County,St. George,http://www.stgeorgealaska.com/index.asp +Alaska,Sumter County,Tenakee Springs,http://www.tenakeespringsak.com +Alaska,Sumter County,Unalaska,http://www.ci.unalaska.ak.us +Alaska,Sumter County,Valdez,http://www.ci.valdez.ak.us/ +Alaska,Sumter County,Wasilla,https://www.cityofwasilla.gov +Alaska,Sumter County,Whittier,http://www.whittieralaska.gov +Alaska,Sumter County,Wrangell,http://www.wrangell.com +Arizona,Pinal County,Apache Junction,http://www.ajcity.net +Arizona,Maricopa County,Avondale,http://www.ci.avondale.az.us/ +Arizona,Cochise County,Benson,http://www.cityofbenson.com +Arizona,Cochise County,Bisbee,http://www.cityofbisbee.com +Arizona,Maricopa County,Buckeye,http://www.buckeyeaz.gov +Arizona,Mohave County,Bullhead City,http://www.bullheadcity.com +Arizona,Yavapai County,Camp Verde,http://www.campverde.az.gov/ +Arizona,Maricopa County,Carefree,https://www.carefree.org/ +Arizona,Pinal County,Casa Grande,http://www.casagrandeaz.gov +Arizona,Maricopa County,Cave Creek,https://www.cavecreekaz.gov +Arizona,Maricopa County,Chandler,http://www.chandleraz.gov +Arizona,Yavapai County,Chino Valley,http://www.chinoaz.net/ +Arizona,Yavapai County,Clarkdale,http://www.clarkdale.az.gov/ +Arizona,Greenlee County,Clifton,http://cliftonaz.com +Arizona,Mohave County,Colorado City,http://www.tocc.us +Arizona,Pinal County,Coolidge,https://www.coolidgeaz.com/ +Arizona,Pinal County,Cottonwood,https://cottonwoodaz.gov/ +Arizona,Yavapai County,Dewey-Humboldt,https://www.dhaz.gov/ +Arizona,Cochise County,Douglas,http://www.douglasaz.gov/ +Arizona,Greenlee County,Duncan,http://duncanaz.us +Arizona,Apache County,Eagar,http://www.eagaraz.gov +Arizona,Maricopa County,El Mirage,http://www.cityofelmirage.org +Arizona,Pinal County,Eloy,https://www.eloyaz.gov +Arizona,Coconino County,Flagstaff,http://flagstaff.az.gov/ +Arizona,Pinal County,Florence,http://www.florenceaz.gov/ +Arizona,Pinal County,Fountain Hills,http://www.fountainhillsaz.gov +Arizona,Coconino County,Fredonia,http://www.fredoniaaz.net +Arizona,Maricopa County,Gila Bend,http://www.gilabendaz.org +Arizona,Maricopa County,Gilbert,http://www.gilbertaz.gov +Arizona,Maricopa County,Glendale,http://www.glendaleaz.com +Arizona,Gila County,Globe,http://www.globeaz.gov +Arizona,Maricopa County,Goodyear,http://www.goodyearaz.gov +Arizona,Maricopa County,Guadalupe,http://www.guadalupeaz.org +Arizona,Gila County,Hayden,http://www.townofhaydenaz.gov/ +Arizona,Navajo County,Holbrook,http://www.ci.holbrook.az.us +Arizona,Navajo County,Huachuca City,http://www.huachucacityaz.gov +Arizona,Yavapai County,Jerome,http://www.jerome.az.gov/ +Arizona,Pinal County,Kearny,http://www.townofkearny.com/ +Arizona,Mohave County,Kingman,http://www.cityofkingman.gov +Arizona,Mohave County,Lake Havasu City,http://www.lhcaz.gov +Arizona,Maricopa County,Litchfield Park,http://www.litchfield-park.org +Arizona,Pinal County,Mammoth,http://www.townofmammoth.com +Arizona,Pima County,Marana,http://www.marana.com/ +Arizona,Pinal County,Maricopa,https://www.maricopa-az.gov/home +Arizona,Pinal County,Mesa,http://www.mesaaz.gov +Arizona,Gila County,Miami,http://miamiaz.gov +Arizona,Santa Cruz County,Nogales,http://www.nogalesaz.gov +Arizona,Pima County,Oro Valley,https://www.orovalleyaz.gov/ +Arizona,Coconino County,Page,http://www.cityofpage.org/ +Arizona,Maricopa County,Paradise Valley,http://www.ci.paradise-valley.az.us +Arizona,La Paz County,Parker,http://www.townofparkerarizona.com/ +Arizona,Santa Cruz County,Patagonia,https://patagonia-az.gov +Arizona,Gila County,Payson,http://www.paysonaz.gov +Arizona,Maricopa County,Peoria,http://www.peoriaaz.gov +Arizona,Maricopa County,Phoenix,http://www.phoenix.gov +Arizona,Graham County,Pima,http://www.pimatown.az.gov +Arizona,Navajo County,Pinetop-Lakeside,http://www.pinetoplakesideaz.gov/ +Arizona,Yavapai County,Prescott,http://www.prescott-az.gov +Arizona,Yavapai County,Prescott Valley,http://www.prescottvalley-az.gov +Arizona,La Paz County,Quartzsite,http://www.ci.quartzsite.az.us/ +Arizona,Maricopa County,Queen Creek,https://www.queencreekaz.gov +Arizona,Graham County,Safford,http://www.cityofsafford.us/ +Arizona,Pima County,Sahuarita,http://www.sahuaritaaz.gov/ +Arizona,Yuma County,San Luis,https://www.sanluisaz.gov +Arizona,Maricopa County,Scottsdale,http://www.scottsdaleaz.gov +Arizona,Yavapai County,Sedona,http://www.sedonaaz.gov +Arizona,Navajo County,Show Low,http://www.ci.show-low.az.us +Arizona,Cochise County,Sierra Vista,http://www.SierraVistaAZ.gov +Arizona,Navajo County,Snowflake,http://www.ci.snowflake.az.us/ +Arizona,Yuma County,Somerton,http://Somertonaz.gov +Arizona,Pima County,South Tucson,http://www.southtucsonaz.gov/ +Arizona,Apache County,Springerville,http://www.springervilleaz.gov +Arizona,Apache County,St. Johns,https://www.sjaz.us +Arizona,Gila County,Star Valley,https://starvalleyaz.com/ +Arizona,Pinal County,Superior,http://www.superioraz.gov/ +Arizona,Maricopa County,Surprise,http://www.surpriseaz.gov +Arizona,Navajo County,Taylor,http://www.tayloraz.org/ +Arizona,Navajo County,Tempe,http://www.tempe.gov +Arizona,Graham County,Thatcher,http://thatcher.az.gov/ +Arizona,Maricopa County,Tolleson,http://www.tollesonaz.org +Arizona,Cochise County,Tombstone,http://www.cityoftombstone.com +Arizona,Pima County,Tucson,http://tucsonaz.gov +Arizona,Coconino County,Tusayan,https://tusayan-az.gov/ +Arizona,Yuma County,Wellton,http://www.town.wellton.az.us/ +Arizona,Maricopa County,Wickenburg,http://www.wickenburgaz.org +Arizona,Cochise County,Willcox,http://www.cityofwillcox.org +Arizona,Coconino County,Williams,http://www.williamsaz.gov +Arizona,Gila County,Winkelman,http://winkelmanaz.com/ +Arizona,Maricopa County,Youngtown,http://www.youngtownaz.org +Arizona,Yuma County,Yuma,http://www.YumaAZ.gov/ +Arkansas,Pulaski County,Alexander,http://www.cityofalexander.com/ +Arkansas,Crawford County,Alma,http://cityofalma.org +Arkansas,Arkansas County,Almyra,http://www.encyclopediaofarkansas.net/encyclopedia/entry-detail.aspx?entryID=6345 +Arkansas,Clark County,Amity,http://amityarkansas.us/ +Arkansas,Clark County,Arkadelphia,http://cityofarkadelphia.com +Arkansas,Sharp County,Ash Flat,http://www.ash-flat.com/ +Arkansas,Little River County,Ashdown,http://ashdownarkansas.org +Arkansas,Lonoke County,Austin,http://www.austin-ar.com +Arkansas,Benton County,Avoca,http://www.avocaarkansas.info +Arkansas,Independence County,Batesville,http://www.cityofbatesville.com/ +Arkansas,Craighead County,Bay,http://cityofbay.org/ +Arkansas,Carroll County,Beaver,http://www.beavertownarkansas.com +Arkansas,White County,Beebe,http://www.beebeark.org +Arkansas,Benton County,Bella Vista,http://www.bellavistaar.gov +Arkansas,Yell County,Belleville,http://encyclopediaofarkansas.net/encyclopedia/entry-detail.aspx?entryID=6096 +Arkansas,Saline County,Benton,https://www.bentonar.org +Arkansas,Benton County,Bentonville,http://www.bentonvillear.com +Arkansas,Boone County,Bergman,https://townofbergman.com/ +Arkansas,Carroll County,Berryville,https://berryvillear.gov +Arkansas,Mississippi County,Blytheville,http://www.cityofblytheville.com +Arkansas,Craighead County,Bono,http://bonoar.com/ +Arkansas,Monroe County,Brinkley,http://cityofbrinkley.org +Arkansas,Craighead County,Brookland,http://www.brooklandarkansas.org +Arkansas,Saline County,Bryant,http://cityofbryant.com/ +Arkansas,Marion County,Bull Shoals,http://www.cityofbullshoals.org +Arkansas,Lonoke County,Cabot,http://www.cabotar.gov +Arkansas,Clark County,Caddo Valley,https://www.thecityofcaddovalley.com/ +Arkansas,Izard County,Calico Rock,http://www.calicorock.com +Arkansas,Ouachita County,Camden,http://camden.ar.gov +Arkansas,Pulaski County,Cammack Village,http://cammackvillage.org +Arkansas,Craighead County,Caraway,http://www.cityofcarawayar.org +Arkansas,Lonoke County,Carlisle,http://www.carlislear.org +Arkansas,Barren Township,Cave City,https://www.cavecity.us/ +Arkansas,Benton County,Cave Springs,http://cavespringsar.gov/ +Arkansas,Benton County,Centerton,http://www.centertonar.us +Arkansas,Franklin County,Charleston,http://aboutcharleston.com +Arkansas,Sharp County,Cherokee Village,http://www.cherokeevillage.org +Arkansas,Monroe County,Clarendon,http://www.cityofclarendonar.com +Arkansas,Johnson County,Clarksville,https://www.clarksvillear.gov/ +Arkansas,Van Buren County,Clinton,http://www.clintonark.com/ +Arkansas,Johnson County,Coal Hill,https://www.cityofcoalhillar.municipalimpact.com/ +Arkansas,Cleburne County,Conway,http://www.cityofconway.org +Arkansas,Clay County,Corning,http://www.corningar.gov +Arkansas,Baxter County,Cotter,http://www.cotterweb.com +Arkansas,Ashley County,Crossett,https://www.cityofcrossett-ar.com/ +Arkansas,Pike County,Damascus,http://www.townofdamascus.net +Arkansas,Yell County,Dardanelle,http://www.dardanelle.com/ +Arkansas,Sevier County,De Queen,http://cityofdequeen.com +Arkansas,Benton County,Decatur,https://decaturarkansas.com/ +Arkansas,Boone County,Diamond City,https://diamondcityar.com/ +Arkansas,Pope County,Dover,https://www.doverar.com/ +Arkansas,Desha County,Dumas,http://dumasar.net +Arkansas,Crawford County,Dyer,https://www.cityofdyerar.com/ +Arkansas,Union County,El Dorado,http://goeldorado.com/ +Arkansas,Washington County,Elkins,http://elkins.arkansas.gov/ +Arkansas,Lonoke County,England,http://www.cityofengland.org/ +Arkansas,Chicot County,Eudora,http://cityofeudora.municipalimpact.com +Arkansas,Carroll County,Eureka Springs,http://www.cityofeurekasprings.us +Arkansas,Van Buren County,Fairfield Bay,http://www.cityoffairfieldbay.com +Arkansas,Washington County,Farmington,http://www.cityoffarmingtonar.com/ +Arkansas,Washington County,Fayetteville,https://www.fayetteville-ar.gov/ +Arkansas,Marion County,Flippin,http://www.flippincity.com +Arkansas,St. Francis County,Forrest City,http://www.cityofforrestcityar.com/ +Arkansas,Sebastian County,Fort Smith,http://www.fortsmithar.gov +Arkansas,Miller County,Fouke,http://cityoffouke.com +Arkansas,Benton County,Garfield,http://www.garfieldarkansas.org +Arkansas,Baxter County,Gassville,http://www.gassville.com/ +Arkansas,Benton County,Gentry,http://www.gentryarkansas.us +Arkansas,Arkansas County,Gillett,http://www.encyclopediaofarkansas.net/encyclopedia/entry-detail.aspx?entryID=6117 +Arkansas,Washington County,Goshen,http://www.cityofgoshen.net +Arkansas,Mississippi County,Gosnell,http://cityofgosnell.net +Arkansas,Benton County,Gravette,http://www.cityofgravette-ar.gov +Arkansas,Carroll County,Green Forest,http://greenforestar.net/ +Arkansas,Faulkner County,Greenbrier,http://cityofgreenbrierar.com +Arkansas,Washington County,Greenland,http://www.greenland-ar.com/ +Arkansas,Sebastian County,Greenwood,http://www.greenwoodar.org/ +Arkansas,Sharp County,Hardy,https://www.cityofhardy.org/ +Arkansas,Boone County,Harrison,http://www.cityofharrison.com +Arkansas,Saline County,Haskell,https://cityofhaskell.org/ +Arkansas,Prairie County,Hazen,https://www.cityofhazen.org/home +Arkansas,Cleburne County,Heber Springs,http://cityofhebersprings.com +Arkansas,Pope County,Hector,https://www.hectorar.com/ +Arkansas,Phillips County,Helena-West Helena,http://www.cityofhelenawesthelena.com/ +Arkansas,Benton County,Highfill,http://www.highfillar.com/ +Arkansas,Sharp County,Highland,http://highland-arkansas.com/ +Arkansas,Faulkner County,Holland,http://hollandar.com +Arkansas,Hempstead County,Hope,http://www.hopearkansas.net +Arkansas,Izard County,Horseshoe Bend,https://cityofhorseshoebend.wordpress.com/ +Arkansas,Garland County,Hot Springs,http://www.cityhs.net +Arkansas,Lonoke County,Humnoke,http://www.humnoke.com +Arkansas,Madison County,Huntsville,http://www.huntsvillearkansas.org +Arkansas,Lawrence County,Imboden,http://www.imbodenarkansas.com +Arkansas,Pulaski County,Jacksonville,http://www.cityofjacksonville.net/ +Arkansas,Newton County,Jasper,https://cityofjasper.org/ +Arkansas,Washington County,Johnson,http://cityofjohnson.com/ +Arkansas,Craighead County,Jonesboro,http://jonesboro.org +Arkansas,White County,Kensett,https://cityofkensett.com/ +Arkansas,Lonoke County,Keo,http://www.keoar.com +Arkansas,Lee County,Lake City,http://lakecityar.com/ +Arkansas,Chicot County,Lake Village,http://www.cityoflakevillage.com/ +Arkansas,Baxter County,Lakeview,http://cityoflakeview.com/ +Arkansas,Sebastian County,Lavaca,http://cityoflavaca.com/ +Arkansas,Washington County,Lincoln,#cite_note-PopEstCBSA-4 +Arkansas,Benton County,Little Flock,http://cityoflittleflock.com/ +Arkansas,Pulaski County,Little Rock,http://www.littlerock.gov +Arkansas,Lonoke County,Lonoke,http://cityoflonoke.com/ +Arkansas,Benton County,Lowell,http://www.lowellarkansas.gov +Arkansas,Columbia County,Magnolia,http://www.magnolia-ar.com +Arkansas,Hot Spring County,Malvern,http://malvernar.gov +Arkansas,Sebastian County,Mansfield,http://mansfieldar.org/ +Arkansas,Crittenden County,Marion,http://www.marionar.org +Arkansas,Greene County,Marmaduke,http://www.marmadukear.com +Arkansas,Searcy County,Marshall,https://marshallar.net/ +Arkansas,Pulaski County,Maumelle,https://www.maumelle.org/ +Arkansas,Faulkner County,Mayflower,http://cityofmayflower.com/ +Arkansas,Woodruff County,McCrory,http://cityofmccrory.com +Arkansas,Desha County,McGehee,http://cityofmcgehee.com +Arkansas,Izard County,Melbourne,http://www.melbournear.com +Arkansas,Polk County,Mena,http://cityofmena.org/ +Arkansas,Drew County,Monticello,http://monticelloarkansas.us/ +Arkansas,Ashley County,Montrose,http://www.cityofmontrose.net/ +Arkansas,Conway County,Morrilton,http://www.cityofmorrilton.com +Arkansas,Baxter County,Mountain Home,http://cityofmountainhome.com +Arkansas,Stone County,Mountain View,https://www.cityofmtnview.org/ +Arkansas,Crawford County,Mulberry,http://cityofmulberry.org +Arkansas,Pike County,Murfreesboro,http://www.mboroarkansas.com/ +Arkansas,Howard County,Nashville,http://www.nashar.org +Arkansas,Independence County,Newark,http://www.newarkarkansas.com +Arkansas,Jackson County,Newport,http://www.newportarcity.org +Arkansas,Baxter County,Norfork,https://cityofnorfork.org +Arkansas,Union County,Norphlet,http://www.cityofnorphlet.com/ +Arkansas,Pulaski County,North Little Rock,http://www.northlittlerock.ar.gov/ +Arkansas,Carroll County,Oak Grove,http://oakgrovear.com/ +Arkansas,Greene County,Oak Grove Heights,http://www.cityofoakgroveheightsar.com/ +Arkansas,Boone County,Omaha,http://omahaarkansas.com/ +Arkansas,Conway County,Oppelo,http://cityofoppelo.com +Arkansas,Mississippi County,Osceola,http://osceolaarkansas.com +Arkansas,Franklin County,Ozark,http://www.cityofozarkar.com +Arkansas,Greene County,Paragould,http://www.cityofparagould.com/ +Arkansas,Logan County,Paris,http://www.paris-ar.us/ +Arkansas,Benton County,Pea Ridge,http://cityofpearidge.com +Arkansas,Clay County,Piggott,http://www.cityofpiggott.org/ +Arkansas,Jefferson County,Pine Bluff,http://www.cityofpinebluff.com/ +Arkansas,Randolph County,Pocahontas,http://cityofpocahontas.com/ +Arkansas,Pope County,Pottsville,https://cityofpottsville.com/ +Arkansas,Washington County,Prairie Grove,http://www.prairiegrovearkansas.org/ +Arkansas,Nevada County,Prescott,http://www.prescottar.com/ +Arkansas,Marion County,Pyatt,http://www.pyatt.net +Arkansas,Clay County,Rector,http://www.rectorarkansas.com/ +Arkansas,Jefferson County,Redfield,http://redfieldar.com/ +Arkansas,Hot Spring County,Rockport,https://rockportar.org +Arkansas,Benton County,Rogers,http://www.rogersar.gov +Arkansas,Pope County,Russellville,http://russellvillearkansas.org/ +Arkansas,White County,Searcy,https://www.cityofsearcy.org/ +Arkansas,Saline County,Shannon Hills,https://www.shannonhills.ar.gov/ +Arkansas,Grant County,Sheridan,http://www.sheridanark.com +Arkansas,Pulaski County,Sherwood,https://www.cityofsherwood.net/ +Arkansas,Van Buren County,Shirley,http://www.shirleyarkansas.org/ +Arkansas,Benton County,Siloam Springs,https://www.siloamsprings.com/ +Arkansas,Union County,Smackover,https://smackover.org/ +Arkansas,Washington County,Springdale,http://www.springdalear.gov/ +Arkansas,Arkansas County,Stuttgart,http://cityofstuttgartar.com/ +Arkansas,Miller County,Texarkana,http://cityoftexarkanaar.com +Arkansas,Washington County,Tontitown,http://www.tontitown.com/ +Arkansas,Poinsett County,Trumann,https://cityoftrumann.org/ +Arkansas,Jackson County,Tuckerman,http://www.tuckermanar.net +Arkansas,Crawford County,Van Buren,http://vanburencity.org +Arkansas,Faulkner County,Vilonia,http://www.cityofvilonia.net +Arkansas,Lawrence County,Walnut Ridge,http://www.cityofwalnutridge.com +Arkansas,Lonoke County,Ward,https://www.wardarkansas.org/ +Arkansas,Bradley County,Warren,https://cityofwarren.us/ +Arkansas,Poinsett County,Weiner,http://www.cityofweiner.com/ +Arkansas,Washington County,West Fork,http://www.westforkar.com/ +Arkansas,Crittenden County,West Memphis,http://www.westmemphisar.gov/ +Arkansas,Washington Township,White Hall,http://whitehallar.org +Arkansas,Washington County,Winslow,http://www.winslowar.com +Arkansas,Faulkner County,Wooster,http://woosterar.com +Arkansas,Pulaski County,Wrightsville,http://cityofwrightsville-ar.org/ +Arkansas,Cross County,Wynne,http://www.cityofwynne.com +Arkansas,Marion County,Yellville,http://www.yellvilleweb.com +California,San Bernardino County,Adelanto,http://www.ci.adelanto.ca.us +California,Los Angeles County,Agoura Hills,https://www.agourahillscity.org +California,Alameda County,Alameda,http://alamedaca.gov +California,Alameda County,Albany,http://www.albanyca.org +California,Los Angeles County,Alhambra,http://www.cityofalhambra.org +California,Orange County,Aliso Viejo,http://avcity.org +California,Modoc County,Alturas,http://www.cityofalturas.us +California,Amador County,Amador City,http://www.amador-city.com +California,Napa County,American Canyon,http://www.cityofamericancanyon.org +California,Orange County,Anaheim,http://www.anaheim.net +California,Shasta County,Anderson,http://ci.anderson.ca.us/ +California,Calaveras County,Angels Camp,http://angelscamp.gov +California,Contra Costa County,Antioch,http://www.ci.antioch.ca.us +California,San Bernardino County,Apple Valley,http://www.applevalley.org +California,Los Angeles County,Arcadia,http://www.ArcadiaCA.gov +California,Humboldt County,Arcata,http://www.cityofarcata.org +California,San Luis Obispo County,Arroyo Grande,http://www.arroyogrande.org +California,Los Angeles County,Artesia,http://www.cityofartesia.us +California,Kern County,Arvin,http://www.arvin.org +California,San Luis Obispo County,Atascadero,http://www.atascadero.org +California,San Mateo County,Atherton,http://www.ci.atherton.ca.us +California,Merced County,Atwater,http://www.atwater.org +California,Placer County,Auburn,http://auburn.ca.gov +California,Los Angeles County,Avalon,http://cityofavalon.com/ +California,Los Angeles County,Avenal,https://www.cityofavenal.com/ +California,Los Angeles County,Azusa,http://www.ci.azusa.ca.us +California,Kern County,Bakersfield,http://www.bakersfieldcity.us/ +California,Los Angeles County,Baldwin Park,http://www.baldwinpark.com +California,Los Angeles County,Banning,http://www.banning.ca.us +California,San Bernardino County,Barstow,http://www.barstowca.org/ +California,San Bernardino County,Beaumont,http://beaumontca.gov +California,Los Angeles County,Bell,http://www.cityofbell.org +California,Los Angeles County,Bell Gardens,http://www.bellgardens.org +California,Los Angeles County,Bellflower,http://www.bellflower.org +California,San Mateo County,Belmont,http://www.belmont.gov +California,Marin County,Belvedere,http://www.cityofbelvedere.org +California,Solano County,Benicia,http://www.ci.benicia.ca.us +California,Alameda County,Berkeley,https://berkeleyca.gov/ +California,Los Angeles County,Beverly Hills,http://www.beverlyhills.org +California,San Bernardino County,Big Bear Lake,http://citybigbearlake.com +California,Butte County,Biggs,http://www.biggs-ca.gov +California,Bishop Creek (Inyo County),Bishop,http://www.cityofbishop.com/ +California,Humboldt County,Blue Lake,http://bluelake.ca.gov +California,Humboldt County,Blythe,http://www.cityofblythe.ca.gov +California,Los Angeles County,Bradbury,http://www.cityofbradbury.org +California,Imperial County,Brawley,http://www.brawley-ca.gov +California,Orange County,Brea,http://www.cityofbrea.net +California,Contra Costa County,Brentwood,http://www.brentwoodca.gov +California,San Mateo County,Brisbane,https://www.brisbaneca.org/ +California,Santa Barbara County,Buellton,http://www.cityofbuellton.com +California,Orange County,Buena Park,http://www.buenapark.com +California,List of cities in Los Angeles County,Burbank,http://www.burbankca.gov +California,List of cities in Los Angeles County,Burlingame,https://www.burlingame.org/ +California,Los Angeles County,Calabasas,http://www.cityofcalabasas.com +California,Imperial County,Calexico,http://www.calexico.ca.gov +California,Kern County,California City,http://www.californiacity-ca.gov +California,Kern County,Calimesa,http://www.cityofcalimesa.net +California,Imperial County,Calipatria,http://www.calipatria.com +California,Napa County,Calistoga,http://www.ci.calistoga.ca.us +California,Ventura County,Camarillo,http://www.cityofcamarillo.org +California,Santa Clara County,Campbell,http://www.ci.campbell.ca.us +California,Santa Clara County,Canyon Lake,http://www.cityofcanyonlake.org/ +California,Santa Cruz County,Capitola,http://www.cityofcapitola.org +California,San Diego County,Carlsbad,http://www.carlsbadca.gov +California,Monterey County,Carmel-by-the-Sea,http://ci.carmel.ca.us +California,Santa Barbara County,Carpinteria,http://www.carpinteria.ca.us +California,Los Angeles County,Carson,http://ci.carson.ca.us +California,Riverside County,Cathedral City,http://www.cathedralcity.gov +California,File:Seal of Stanislaus County,Ceres,http://www.ci.ceres.ca.us +California,Los Angeles County,Cerritos,http://www.cerritos.us +California,Butte County,Chico,http://www.chico.ca.us +California,San Bernardino County,Chino,http://www.cityofchino.org +California,San Bernardino County,Chino Hills,http://www.chinohills.org +California,San Bernardino County,Chowchilla,http://www.cityofchowchilla.org +California,San Diego County,Chula Vista,http://www.chulavistaca.gov +California,Sacramento County,Citrus Heights,http://www.citrusheights.net +California,Los Angeles County,City of Industry,http://www.cityofindustry.org +California,Los Angeles County,Claremont,http://www.ci.claremont.ca.us +California,Contra Costa County,Clayton,http://www.ci.clayton.ca.us/ +California,Lake County,Clearlake,http://www.clearlake.ca.us +California,Sonoma County,Cloverdale,http://www.cloverdale.net +California,Fresno County,Clovis,http://cityofclovis.com +California,Riverside County,Coachella,http://www.coachella.org +California,Fresno County,Coalinga,http://www.coalinga.com +California,Placer County,Colfax,http://www.colfax-ca.gov +California,San Mateo County,Colma,http://www.colma.ca.gov +California,San Mateo County,Colton,http://www.ci.colton.ca.us +California,Colusa County,Colusa,http://www.cityofcolusa.com +California,Los Angeles County,Commerce,http://www.ci.commerce.ca.us +California,Los Angeles County,Compton,http://www.comptoncity.org +California,Contra Costa County,Concord,http://www.ci.concord.ca.us +California,Contra Costa County,Corcoran,http://www.cityofcorcoran.com +California,Tehama County,Corning,http://corning.org +California,Riverside County,Corona,https://www.coronaca.gov/ +California,San Diego County,Coronado,http://www.coronado.ca.us +California,Marin County,Corte Madera,http://www.townofcortemadera.org +California,Orange County,Costa Mesa,http://www.costamesaca.gov +California,Sonoma County,Cotati,http://ci.cotati.ca.us +California,Los Angeles County,Covina,http://www.covinaca.gov/ +California,Del Norte County,Crescent City,http://www.crescentcity.org +California,Los Angeles County,Cudahy,http://www.cityofcudahy.com +California,Los Angeles County,Culver City,http://www.culvercity.org +California,Santa Clara County,Cupertino,http://www.cupertino.org +California,Orange County,Cypress,http://www.cypressca.org +California,San Mateo County,Daly City,http://www.dalycity.org +California,Orange County,Dana Point,http://www.danapoint.org +California,Contra Costa County,Danville,http://www.danville.ca.gov +California,Yolo County,Davis,http://cityofdavis.org +California,San Diego County,Del Mar,http://www.delmar.ca.us +California,Monterey County,Del Rey Oaks,http://www.delreyoaks.org +California,Kern County,Delano,http://www.cityofdelano.org/ +California,Kern County,Desert Hot Springs,http://www.cityofdhs.org +California,Los Angeles County,Diamond Bar,https://www.diamondbarca.gov/ +California,Tulare County,Dinuba,http://www.dinuba.org +California,Solano County,Dixon,http://www.cityofdixon.us +California,Solano County,Dorris,http://www.dorrisca.us/ +California,Merced County,Dos Palos,http://dospaloscity.wixsite.com/dospalos +California,List of cities in Los Angeles County,Downey,http://www.downeyca.org +California,Los Angeles County,Duarte,http://www.accessduarte.com +California,Alameda County,Dublin,https://dublin.ca.gov/ +California,Alameda County,Dunsmuir,http://ci.dunsmuir.ca.us +California,San Mateo County,East Palo Alto,http://www.cityofepa.org +California,San Mateo County,Eastvale,http://www.eastvaleca.gov +California,San Diego County,El Cajon,http://www.ci.el-cajon.ca.us +California,San Diego County,El Centro,http://www.cityofelcentro.org +California,Contra Costa County,El Cerrito,http://www.el-cerrito.org +California,List of cities in Los Angeles County,El Monte,http://elmonteca.gov +California,Los Angeles County,El Segundo,http://www.elsegundo.org +California,Sacramento County,Elk Grove,http://elkgrovecity.org +California,Alameda County,Emeryville,http://www.emeryville.org +California,San Diego County,Encinitas,http://www.encinitasca.gov +California,San Joaquin County,Escalon,http://www.cityofescalon.org +California,San Diego County,Escondido,http://www.escondido.org +California,San Diego County,Etna,http://www.cityofetna.org +California,Humboldt County,Eureka,http://www.ci.eureka.ca.gov +California,Tulare County,Exeter,http://www.cityofexeter.com +California,Marin County,Fairfax,https://www.townoffairfax.org/ +California,Solano County,Fairfield,http://www.fairfield.ca.gov +California,Tulare County,Farmersville,https://www.cityoffarmersville-ca.gov +California,Humboldt County,Ferndale,http://ci.ferndale.ca.us +California,Ventura County,Fillmore,http://www.fillmoreca.com +California,Fresno County,Firebaugh,http://www.firebaugh.org +California,Sacramento County,Folsom,https://www.folsom.ca.us/ +California,San Bernardino County,Fontana,http://fontana.org +California,Mendocino County,Fort Bragg,http://city.fortbragg.com +California,Mendocino County,Fort Jones,https://fortjonesca.org/ +California,Humboldt County,Fortuna,http://friendlyfortuna.com +California,San Mateo County,Foster City,http://www.fostercity.org +California,Orange County,Fountain Valley,http://www.fountainvalley.org +California,Fresno County,Fowler,http://www.fowlercity.org +California,Alameda County,Fremont,http://www.fremont.gov +California,Fresno County,Fresno,http://www.fresno.gov +California,Orange County,Fullerton,http://www.cityoffullerton.com +California,Orange County,Galt,http://www.ci.galt.ca.us +California,Orange County,Garden Grove,https://ggcity.org +California,Los Angeles County,Gardena,http://www.cityofgardena.org +California,Santa Clara County,Gilroy,http://www.ci.gilroy.ca.us +California,List of cities in Los Angeles County,Glendale,http://glendaleca.gov +California,Los Angeles County,Glendora,http://www.ci.glendora.ca.us +California,Santa Barbara County,Goleta,https://www.cityofgoleta.org +California,Monterey County,Gonzales,https://www.gonzalesca.gov +California,Monterey County,Grand Terrace,http://www.grandterrace-ca.gov +California,Nevada County,Grass Valley,http://www.cityofgrassvalley.com/home +California,Monterey County,Greenfield,http://ci.greenfield.ca.us +California,Butte County,Gridley,http://www.gridley.ca.us +California,San Luis Obispo County,Grover Beach,http://www.grover.org +California,Santa Barbara County,Guadalupe,http://ci.guadalupe.ca.us +California,Merced County,Gustine,http://www.cityofgustine.com +California,San Mateo County,Half Moon Bay,http://www.half-moon-bay.ca.us +California,Kings County,Hanford,https://www.cityofhanfordca.com/ +California,Los Angeles County,Hawaiian Gardens,http://hgcity.org +California,Los Angeles County,Hawthorne,http://www.cityofhawthorne.org +California,Alameda County,Hayward,http://www.hayward-ca.gov +California,Sonoma County,Healdsburg,http://cityofhealdsburg.net +California,Sonoma County,Hemet,http://www.hemetca.gov +California,Contra Costa County,Hercules,http://www.ci.hercules.ca.us +California,Los Angeles County,Hermosa Beach,https://www.hermosabeach.gov/ +California,Los Angeles County,Hesperia,http://www.cityofhesperia.us +California,Los Angeles County,Hidden Hills,http://hiddenhillscity.org +California,San Bernardino County,Highland,http://www.cityofhighland.org +California,San Mateo County,Hillsborough,http://www.hillsborough.net +California,San Benito County,Hollister,http://www.hollister.ca.gov +California,Imperial County,Holtville,http://www.holtville.ca.gov +California,Stanislaus County,Hughson,http://www.hughson.org +California,Orange County,Huntington Beach,http://huntingtonbeachca.gov +California,Los Angeles County,Huntington Park,http://www.huntingtonpark.org +California,Fresno County,Huron,http://cityofhuron.com/ +California,Imperial County,Imperial,http://www.cityofimperial.org +California,San Diego County,Imperial Beach,http://www.ImperialBeachCA.gov +California,Riverside County,Indian Wells,http://cityofindianwells.org +California,Riverside County,Indio,http://indio.org +California,List of cities in Los Angeles County,Inglewood,http://www.cityofinglewood.org +California,Amador County,Ione,http://ione-ca.com +California,Orange County,Irvine,http://cityofirvine.org +California,Los Angeles County,Irwindale,http://www.irwindaleca.gov +California,Los Angeles County,Isleton,http://www.cityofisleton.com/ +California,Amador County,Jackson,https://ci.jackson.ca.us/ +California,Riverside County,Jurupa Valley,http://jurupavalley.org +California,Fresno County,Kerman,http://www.cityofkerman.net +California,Monterey County,King City,http://www.kingcity.com +California,Fresno County,Kingsburg,http://www.cityofkingsburg-ca.gov +California,Los Angeles County,La Cañada Flintridge,https://cityoflcf.org +California,Orange County,La Habra,http://www.lahabraca.gov/ +California,Los Angeles County,La Habra Heights,http://www.lhhcity.org +California,San Diego County,La Mesa,http://cityoflamesa.us +California,Los Angeles County,La Mirada,http://www.cityoflamirada.org +California,Orange County,La Palma,http://www.cityoflapalma.org +California,Orange County,La Puente,http://www.lapuente.org +California,Riverside County,La Quinta,http://www.laquintaca.gov +California,Los Angeles County,La Verne,http://cityoflaverne.org +California,Contra Costa County,Lafayette,https://www.lovelafayette.org/ +California,Orange County,Laguna Beach,http://www.lagunabeachcity.net +California,Orange County,Laguna Hills,http://www.ci.laguna-hills.ca.us +California,Orange County,Laguna Niguel,http://cityoflagunaniguel.org +California,Orange County,Laguna Woods,https://www.cityoflagunawoods.org/ +California,Orange County,Lake Elsinore,http://www.lake-elsinore.org +California,Orange County,Lake Forest,http://www.lakeforestca.gov +California,Lake County,Lakeport,http://cityoflakeport.com +California,Los Angeles County,Lakewood,http://www.lakewoodcity.org +California,Los Angeles County,Lancaster,http://www.cityoflancasterca.org +California,Marin County,Larkspur,http://www.ci.larkspur.ca.us +California,San Joaquin County,Lathrop,http://www.ci.lathrop.ca.us +California,Los Angeles County,Lawndale,http://www.lawndalecity.org +California,San Diego County,Lemon Grove,http://www.lemongrove.ca.gov +California,San Diego County,Lemoore,http://www.lemoore.com +California,Placer County,Lincoln,http://www.ci.lincoln.ca.us +California,Tulare County,Lindsay,http://www.lindsay.ca.us +California,Sutter County,Live Oak,http://www.liveoakcity.org +California,Alameda County,Livermore,http://www.cityoflivermore.net +California,Merced County,Livingston,http://www.livingstoncity.com +California,San Joaquin County,Lodi,http://www.lodi.gov +California,San Bernardino County,Loma Linda,http://www.lomalinda-ca.gov +California,Los Angeles County,Lomita,http://www.lomita.com/cityhall +California,Santa Barbara County,Lompoc,http://www.cityoflompoc.com +California,Los Angeles County,Long Beach,http://www.longbeach.gov +California,Los Angeles County,Loomis,http://www.loomis.ca.gov/ +California,Orange County,Los Alamitos,http://www.cityoflosalamitos.org +California,Santa Clara County,Los Altos,http://www.losaltosca.gov +California,Santa Clara County,Los Altos Hills,http://www.losaltoshills.ca.gov/ +California,Merced County,Los Banos,http://www.losbanos.org +California,Santa Clara County,Los Gatos,http://www.losgatosca.gov +California,Sierra County,Loyalton,http://www.cityofloyalton.org/ +California,Los Angeles County,Lynwood,http://www.lynwood.ca.us +California,Madera County,Madera,http://www.madera.gov +California,Madera County,Malibu,http://www.malibucity.org/ +California,Mono County,Mammoth Lakes,http://www.ci.mammoth-lakes.ca.us +California,Los Angeles County,Manhattan Beach,http://www.citymb.info +California,San Joaquin County,Manteca,http://www.ci.manteca.ca.us +California,Kern County,Maricopa,http://www.cityofmaricopa.org +California,Monterey County,Marina,http://cityofmarina.org +California,Contra Costa County,Martinez,http://www.cityofmartinez.org +California,Yuba County,Marysville,http://www.marysville.ca.us +California,Los Angeles County,Maywood,http://www.cityofmaywood.com +California,Kern County,McFarland,http://www.mcfarlandcity.org +California,Fresno County,Mendota,http://ci.mendota.ca.us/ +California,Riverside County,Menifee,http://www.cityofmenifee.us +California,Menlo,Menlo Park,http://menlopark.gov +California,Merced County,Merced,http://www.cityofmerced.org/ +California,Marin County,Mill Valley,http://www.cityofmillvalley.org +California,San Mateo County,Millbrae,http://www.ci.millbrae.ca.us +California,Santa Clara County,Milpitas,https://www.milpitas.gov +California,Orange County,Mission Viejo,http://cityofmissionviejo.org +California,Stanislaus County,Modesto,http://www.modestogov.com +California,Los Angeles County,Monrovia,http://www.cityofmonrovia.org +California,Los Angeles County,Montague,https://cityofmontagueca.com +California,San Bernardino County,Montclair,http://www.cityofmontclair.org +California,Santa Clara County,Monte Sereno,http://www.montesereno.org/ +California,Los Angeles County,Montebello,https://www.cityofmontebello.com/ +California,Monterey County,Monterey,http://www.monterey.org +California,Los Angeles County,Monterey Park,https://www.montereypark.ca.gov +California,Ventura County,Moorpark,http://www.moorparkca.gov +California,Contra Costa County,Moraga,http://www.moraga.ca.us +California,Riverside County,Moreno Valley,http://www.moval.org/index.shtml +California,Santa Clara County,Morgan Hill,http://Morgan-Hill.ca.gov +California,San Luis Obispo County,Morro Bay,http://www.morro-bay.ca.us +California,San Luis Obispo County,Mount Shasta,http://mtshastaca.gov +California,Santa Clara County,Mountain View,http://www.mountainview.gov +California,Riverside County,Murrieta,https://www.murrietaca.gov +California,Napa County,Napa,http://www.cityofnapa.org +California,San Diego County,National City,http://www.nationalcityca.gov +California,San Bernardino County,Needles,http://www.cityofneedles.com +California,Nevada County,Nevada City,http://www.nevadacityca.gov +California,Alameda County,Newark,http://www.ci.newark.ca.us +California,Stanislaus County,Newman,http://www.cityofnewman.com +California,Orange County,Newport Beach,http://www.newportbeachca.gov +California,Riverside County,Norco,http://www.ci.norco.ca.us +California,List of cities in Los Angeles County,Norwalk,http://www.norwalk.org +California,Marin County,Novato,http://novato.org +California,Stanislaus County,Oakdale,http://www.oakdalegov.com +California,Alameda County,Oakland,https://www.oaklandca.gov +California,Contra Costa County,Oakley,https://www.ci.oakley.ca.us/ +California,San Diego County,Oceanside,http://www.ci.oceanside.ca.us +California,Ventura County,Ojai,http://ojaicity.org +California,San Bernardino County,Ontario,http://www.ontarioca.gov/ +California,Orange County,Orange,http://www.cityoforange.org +California,Fresno County,Orange Cove,http://www.cityoforangecove.com +California,Contra Costa County,Orinda,http://www.cityoforinda.org +California,Glenn County,Orland,http://www.cityoforland.com/ +California,Butte County,Oroville,http://cityoforoville.org +California,Ventura County,Oxnard,https://www.oxnard.org +California,Monterey County,Pacific Grove,http://www.cityofpacificgrove.org +California,San Mateo County,Pacifica,http://www.cityofpacifica.org +California,Riverside County,Palm Desert,http://www.cityofpalmdesert.org +California,Riverside County,Palm Springs,http://palmspringsca.gov +California,List of cities in Los Angeles County,Palmdale,https://www.cityofpalmdaleca.gov +California,Santa Clara County,Palo Alto,https://www.cityofpaloalto.org +California,Los Angeles County,Palos Verdes Estates,http://www.pvestates.org +California,Butte County,Paradise,http://townofparadise.com +California,Los Angeles County,Paramount,http://www.paramountcity.com +California,Fresno County,Parlier,http://www.parlier.ca.us +California,List of cities in Los Angeles County,Pasadena,http://www.cityofpasadena.net +California,San Luis Obispo County,Paso Robles,http://prcity.com +California,List of cities in Stanislaus County (by population),Patterson,http://www.ci.patterson.ca.us +California,List of cities in Stanislaus County (by population),Perris,http://www.cityofperris.org +California,Sonoma County,Petaluma,http://cityofpetaluma.net +California,Los Angeles County,Pico Rivera,https://www.pico-rivera.org +California,Alameda County,Piedmont,http://www.ci.piedmont.ca.us +California,Contra Costa County,Pinole,http://www.ci.pinole.ca.us +California,San Luis Obispo County,Pismo Beach,http://pismobeach.org +California,Contra Costa County,Pittsburg,http://www.ci.pittsburg.ca.us +California,Orange County,Placentia,http://www.placentia.org +California,Orange County,Placerville,http://www.cityofplacerville.org +California,Contra Costa County,Pleasant Hill,http://www.ci.pleasant-hill.ca.us +California,Alameda County,Pleasanton,http://www.cityofpleasantonca.gov +California,Amador County,Plymouth,http://www.cityofplymouth.org/ +California,Mendocino County,Point Arena,http://pointarena.ca.gov +California,List of cities in Los Angeles County,Pomona,http://www.ci.pomona.ca.us +California,Ventura County,Port Hueneme,http://www.cityofporthueneme.org +California,Tulare County,Porterville,http://www.ci.porterville.ca.us +California,Plumas County,Portola,http://www.ci.portola.ca.us +California,San Mateo County,Portola Valley,http://www.portolavalley.net +California,San Diego County,Poway,http://www.ci.poway.ca.us +California,San Diego County,Rancho Cordova,http://www.cityofranchocordova.org +California,San Bernardino County,Rancho Cucamonga,http://www.cityofrc.us +California,Riverside County,Rancho Mirage,http://www.ranchomirageca.gov +California,Los Angeles County,Rancho Palos Verdes,http://rpvca.gov +California,Orange County,Rancho Santa Margarita,http://www.cityofrsm.org +California,Tehama County,Red Bluff,http://www.cityofredbluff.org +California,Shasta County,Redding,https://www.cityofredding.org +California,San Bernardino County,Redlands,http://www.cityofredlands.org +California,Los Angeles County,Redondo Beach,http://redondo.org +California,San Mateo County,Redwood City,http://www.redwoodcity.org/ +California,Fresno County,Reedley,http://www.reedley.ca.gov +California,San Bernardino County,Rialto,http://www.yourrialto.com/ +California,Contra Costa County,Richmond,http://www.ci.richmond.ca.us +California,Kern County,Ridgecrest,https://www.ridgecrest-ca.gov/ +California,Humboldt County,Rio Dell,http://cityofriodell.ca.gov/ +California,Solano County,Rio Vista,http://www.riovistacity.com +California,San Joaquin County,Ripon,http://www.cityofripon.org/ +California,Stanislaus County,Riverbank,http://www.riverbank.org +California,Riverside County,Riverside,http://riversideca.gov +California,Riverside County,Rocklin,http://www.rocklin.ca.us +California,Sonoma County,Rohnert Park,https://www.rpcity.org +California,Los Angeles County,Rolling Hills,http://www.rolling-hills.org +California,Los Angeles County,Rolling Hills Estates,http://www.ci.rolling-hills-estates.ca.us +California,Los Angeles County,Rosemead,http://www.cityofrosemead.org +California,Placer County,Roseville,http://www.roseville.ca.us +California,Marin County,Ross,http://www.townofross.org +California,Sacramento County,Sacramento,http://cityofsacramento.org +California,Monterey County,Salinas,http://www.cityofsalinas.org +California,Marin County,San Anselmo,http://townofsananselmo.org +California,San Bernardino County,San Bernardino,http://sbcity.org +California,San Mateo County,San Bruno,http://sanbruno.ca.gov +California,San Mateo County,San Carlos,http://www.cityofsancarlos.org +California,Orange County,San Clemente,https://www.san-clemente.org +California,Los Angeles County,San Dimas,http://www.sandimasca.gov +California,Los Angeles County,San Fernando,http://www.ci.san-fernando.ca.us +California,Los Angeles County,San Gabriel,http://www.sangabrielcity.com +California,Los Angeles County,San Jacinto,https://www.sanjacintoca.gov/ +California,Fresno County,San Joaquin,http://www.cityofsanjoaquin.org +California,Santa Clara County,San Jose,https://www.sanjoseca.gov +California,San Benito County,San Juan Bautista,http://www.san-juan-bautista.ca.us +California,Orange County,San Juan Capistrano,http://www.sanjuancapistrano.org +California,Alameda County,San Leandro,http://www.sanleandro.org +California,San Luis Obispo County,San Luis Obispo,http://slocity.org +California,San Diego County,San Marcos,http://www.san-marcos.net +California,Los Angeles County,San Marino,http://ci.san-marino.ca.us +California,San Mateo County,San Mateo,http://www.cityofsanmateo.org +California,Contra Costa County,San Pablo,https://www.sanpabloca.gov/ +California,Marin County,San Rafael,http://www.cityofsanrafael.org +California,Contra Costa County,San Ramon,http://www.ci.san-ramon.ca.us +California,Monterey County,Sand City,http://www.sandcity.org +California,Fresno County,Sanger,http://www.ci.sanger.ca.us +California,Orange County,Santa Ana,http://www.santa-ana.org +California,Santa Barbara County,Santa Barbara,https://www.santabarbaraca.gov +California,Santa Clara County,Santa Clara,http://SantaClaraCA.gov +California,List of cities in Los Angeles County,Santa Clarita,http://santa-clarita.com +California,Santa Cruz County,Santa Cruz,http://www.cityofsantacruz.com +California,Los Angeles County,Santa Fe Springs,http://www.santafesprings.org +California,Los Angeles County,Santa Maria,https://www.cityofsantamaria.org/ +California,Los Angeles County,Santa Monica,http://santamonica.gov +California,Ventura County,Santa Paula,https://spcity.org/ +California,Sonoma County,Santa Rosa,https://www.srcity.org +California,San Diego County,Santee,http://www.cityofsanteeca.gov +California,Santa Clara County,Saratoga,http://www.saratoga.ca.us +California,Marin County,Sausalito,http://www.ci.sausalito.ca.us +California,Santa Cruz County,Scotts Valley,http://www.scottsvalley.org/ +California,Orange County,Seal Beach,http://www.sealbeachca.gov/ +California,Monterey County,Seaside,http://www.ci.seaside.ca.us +California,Sonoma County,Sebastopol,http://www.ci.sebastopol.ca.us +California,Fresno County,Selma,http://www.cityofselma.com +California,Kern County,Shafter,http://www.shafter.com +California,Shasta County,Shasta Lake,https://www.cityofshastalake.org/ +California,Los Angeles County,Sierra Madre,http://www.cityofsierramadre.com +California,Los Angeles County,Signal Hill,http://www.cityofsignalhill.org +California,Ventura County,Simi Valley,https://www.simivalley.org/ +California,Ventura County,Solana Beach,http://www.ci.solana-beach.ca.us +California,Monterey County,Soledad,http://cityofsoledad.com +California,Santa Barbara County,Solvang,http://www.cityofsolvang.com +California,Sonoma County,Sonoma,http://www.sonomacity.org +California,Tuolumne County,Sonora,http://www.sonoraca.com +California,Los Angeles County,South El Monte,http://www.ci.south-el-monte.ca.us +California,Los Angeles County,South Gate,http://www.cityofsouthgate.org +California,El Dorado County,South Lake Tahoe,http://www.cityofslt.us +California,Los Angeles County,South Pasadena,http://www.southpasadenaca.gov +California,San Mateo County,South San Francisco,http://www.ssf.net +California,Napa County,St. Helena,http://www.ci.st-helena.ca.us +California,San Mateo County,Stanton,https://www.stantonca.gov/ +California,San Joaquin County,Stockton,http://www.stocktongov.com +California,Solano County,Suisun City,http://www.suisun.com +California,Santa Clara County,Sunnyvale,http://sunnyvale.ca.gov +California,Lassen County,Susanville,http://cityofsusanville.org +California,Amador County,Sutter Creek,http://www.cityofsuttercreek.org +California,Kern County,Taft,http://www.cityoftaft.org +California,Kern County,Tehachapi,http://www.liveuptehachapi.com +California,Tehama County,Tehama,http://cityoftehama.us +California,Riverside County,Temecula,http://temeculaca.gov +California,Los Angeles County,Temple City,http://www.ci.temple-city.ca.us +California,Ventura County,Thousand Oaks,http://www.toaks.org +California,Marin County,Tiburon,http://townoftiburon.org +California,List of cities in Los Angeles County,Torrance,http://www.torranceca.gov +California,San Joaquin County,Tracy,http://cityoftracy.org +California,Humboldt County,Trinidad,https://trinidad.ca.gov +California,Nevada County,Truckee,http://www.townoftruckee.com +California,Tulare County,Tulare,https://www.tulare.ca.gov/ +California,Tulare County,Tulelake,http://www.cityoftulelake.com/ +California,Stanislaus County,Turlock,http://www.cityofturlock.org +California,Orange County,Tustin,http://www.tustinca.org +California,San Bernardino County,Twentynine Palms,http://www.ci.twentynine-palms.ca.us +California,Mendocino County,Ukiah,http://www.cityofukiah.com +California,File:Flag of Alameda County,Union City,https://www.unioncity.org/ +California,San Bernardino County,Upland,https://www.uplandca.gov/ +California,Solano County,Vacaville,http://www.cityofvacaville.com +California,Solano County,Vallejo,https://www.cityofvallejo.net +California,Ventura County,Ventura,https://www.cityofventura.ca.gov/ +California,Los Angeles County,Vernon,http://cityofvernon.org +California,San Bernardino County,Victorville,http://www.victorvilleca.gov/ +California,San Bernardino County,Villa Park,http://www.villapark.org/ +California,Tulare County,Visalia,https://www.visalia.city +California,San Diego County,Vista,http://www.cityofvista.com +California,Los Angeles County,Walnut,http://www.ci.walnut.ca.us +California,Contra Costa County,Walnut Creek,http://www.walnut-creek.org +California,Kern County,Wasco,http://www.ci.wasco.ca.us +California,Stanislaus County,Waterford,http://cityofwaterford.org +California,Santa Cruz County,Watsonville,https://cityofwatsonville.org/ +California,Santa Cruz County,Weed,http://www.ci.weed.ca.us/ +California,List of cities in Los Angeles County,West Covina,http://www.westcovina.org +California,Los Angeles County,West Hollywood,http://www.weho.org +California,Yolo County,West Sacramento,http://www.cityofwestsacramento.org +California,Los Angeles County,Westlake Village,http://www.wlv.org +California,Orange County,Westminster,http://www.westminster-ca.gov +California,Imperial County,Westmorland,http://www.cityofwestmorland.net +California,Yuba County,Wheatland,http://www.wheatland.ca.gov +California,Los Angeles County,Whittier,http://www.cityofwhittier.org +California,Los Angeles County,Wildomar,http://www.cityofwildomar.org +California,Colusa County,Williams,http://www.cityofwilliams.org +California,Mendocino County,Willits,http://cityofwillits.org +California,Glenn County,Willows,http://www.cityofwillows.org +California,Sonoma County,Windsor,http://www.townofwindsor.com/ +California,Sonoma County,Winters,http://www.cityofwinters.org +California,Tulare County,Woodlake,http://www.cityofwoodlake.com/ +California,Yolo County,Woodland,http://www.cityofwoodland.org +California,San Mateo County,Woodside,http://www.woodsidetown.org +California,Orange County,Yorba Linda,http://www.yorbalindaca.gov/ +California,Napa County,Yountville,http://www.townofyountville.com +California,Siskiyou County,Yreka,http://ci.yreka.ca.us +California,Sutter County,Yuba City,http://www.yubacity.net +California,San Bernardino County,Yucaipa,http://yucaipa.org +California,San Bernardino County,Yucca Valley,http://www.yucca-valley.org +Colorado,Las Animas County,Aguilar,http://aguilarco.us/ +Colorado,Washington County,Akron,https://townofakron.colorado.gov/ +Colorado,Alamosa County,Alamosa,https://cityofalamosa.org/ +Colorado,Park County,Alma,http://townofalma.com/ +Colorado,Conejos County,Antonito,http://townofantonito.org/ +Colorado,Lincoln County,Arriba,https://townofarriba.colorado.gov/ +Colorado,Jefferson County,Arvada,https://arvada.org/ +Colorado,Pitkin County,Aspen,https://www.aspen.gov +Colorado,Weld County,Ault,https://www.townofault.org/ +Colorado,Arapahoe County,Aurora,https://www.auroragov.org/ +Colorado,Eagle County,Avon,http://www.avon.org/ +Colorado,Eagle County,Basalt,http://www.basalt.net/ +Colorado,La Plata County,Bayfield,https://www.colorado.gov/townofbayfield +Colorado,Adams County,Bennett,http://www.bennett.co.us +Colorado,Larimer County,Berthoud,https://www.berthoud.org/ +Colorado,Gilpin County,Black Hawk,http://www.cityofblackhawk.org/ +Colorado,Summit County,Blue River,https://townofblueriver.colorado.gov/ +Colorado,Boulder County,Boulder,https://bouldercolorado.gov/ +Colorado,Arapahoe County,Bow Mar,https://www.bowmar.gov +Colorado,Las Animas County,Branson,https://www.bransoncolorado.com/ +Colorado,Summit County,Breckenridge,http://www.townofbreckenridge.com/ +Colorado,Adams County,Brighton,https://www.brightonco.gov/ +Colorado,Fremont County,Brookside,https://townofbrookside.colorado.gov/ +Colorado,Fremont County,Broomfield,http://www.broomfield.org +Colorado,Morgan County,Brush,http://www.brushcolo.com/ +Colorado,Chaffee County,Buena Vista,http://www.buenavistaco.gov +Colorado,Kit Carson County,Burlington,http://www.burlingtoncolo.com/ +Colorado,Fremont County,Cañon City,http://www.canoncity.org/ +Colorado,El Paso County,Calhan,https://www.calhan.co/ +Colorado,Baca County,Campo,https://www.bacacountyco.gov/towns/campo-colorado/ +Colorado,Garfield County,Carbondale,http://carbondalegov.org +Colorado,Douglas County,Castle Pines,https://www.castlepinesgov.com/ +Colorado,Douglas County,Castle Rock,http://www.crgov.com/ +Colorado,Delta County,Cedaredge,http://www.cedaredgecolorado.com/ +Colorado,Arapahoe County,Centennial,http://www.centennialco.gov/ +Colorado,Saguache County,Center,https://www.colorado.gov/townofcenter +Colorado,Gilpin County,Central City,http://www.centralcitycolorado.us +Colorado,Arapahoe County,Cherry Hills Village,http://www.cherryhillsvillage.com +Colorado,Cheyenne County,Cheyenne Wells,http://townofcheyennewells.com +Colorado,Fremont County,Coal Creek,https://www.colorado.gov/pacific/coalcreekco +Colorado,Mesa County,Collbran,https://www.colorado.gov/townofcollbran +Colorado,El Paso County,Colorado Springs,http://coloradosprings.gov +Colorado,Arapahoe County,Columbine Valley,https://columbinevalley.org/ +Colorado,Adams County,Commerce City,http://www.c3gov.com/ +Colorado,Montezuma County,Cortez,http://www.cityofcortez.com/ +Colorado,Moffat County,Craig,http://www.ci.craig.co.us +Colorado,Mineral County,Creede,https://www.colorado.gov/creede +Colorado,Gunnison County,Crested Butte,https://www.crestedbutte-co.gov/ +Colorado,Saguache County,Crestone,https://townofcrestone.colorado.gov/ +Colorado,Teller County,Cripple Creek,https://cityofcripplecreek.com/ +Colorado,Weld County,Dacono,https://www.cityofdacono.com/ +Colorado,Mesa County,De Beque,http://www.debeque.org/ +Colorado,Arapahoe County,Deer Trail,https://townofdeertrail.colorado.gov/ +Colorado,Rio Grande County,Del Norte,https://www.delnortecolorado.com/ +Colorado,Delta County,Delta,http://cityofdelta.net +Colorado,Summit County,Dillon,https://www.townofdillon.com/ +Colorado,Moffat County,Dinosaur,http://townofdinosaur.colorado.gov +Colorado,Montezuma County,Dolores,https://townofdolores.colorado.gov/ +Colorado,Dolores County,Dove Creek,https://townofdovecreek.colorado.gov/ +Colorado,La Plata County,Durango,https://www.durangogov.org/ +Colorado,Kiowa County,Eads,http://www.kcedfonline.org/eads.htm +Colorado,Eagle County,Eagle,http://www.townofeagle.org +Colorado,Weld County,Eaton,https://townofeaton.colorado.gov/ +Colorado,Yuma County,Eckley,https://townofeckley.colorado.gov/ +Colorado,Jefferson County,Edgewater,https://edgewaterco.com/ +Colorado,Elbert County,Elizabeth,http://www.townofelizabeth.org +Colorado,Clear Creek County,Empire,https://townofempire.colorado.gov/ +Colorado,Arapahoe County,Englewood,https://www.englewoodco.gov +Colorado,Weld County,Erie,http://www.erieco.gov +Colorado,Larimer County,Estes Park,https://estespark.colorado.gov/ +Colorado,Weld County,Evans,https://www.evanscolorado.gov/ +Colorado,Park County,Fairplay,http://fairplayco.us +Colorado,Adams County,Federal Heights,http://www.fedheights.org +Colorado,Weld County,Firestone,https://www.firestoneco.gov/ +Colorado,Kit Carson County,Flagler,http://flaglercolorado.com/ +Colorado,Logan County,Fleming,https://www.flemingcolorado.us/ +Colorado,Fremont County,Florence,https://cityofflorence.colorado.gov/ +Colorado,Larimer County,Fort Collins,https://www.fcgov.com/ +Colorado,Weld County,Fort Lupton,https://www.fortluptonco.gov/ +Colorado,Morgan County,Fort Morgan,https://www.cityoffortmorgan.com/ +Colorado,El Paso County,Fountain,http://www.fountaincolorado.org/ +Colorado,Otero County,Fowler,https://www.fowlercolorado.com/ +Colorado,Arapahoe County,Foxfield,https://townoffoxfield.colorado.gov/ +Colorado,Grand County,Fraser,http://www.frasercolorado.com +Colorado,Weld County,Frederick,https://www.frederickco.gov/ +Colorado,Summit County,Frisco,http://www.townoffrisco.com/ +Colorado,Mesa County,Fruita,https://www.fruita.org/ +Colorado,Weld County,Garden City,http://townofgardencity.com/ +Colorado,Lincoln County,Genoa,https://townofgenoa.colorado.gov/ +Colorado,Clear Creek County,Georgetown,http://www.townofgeorgetown.US +Colorado,Weld County,Gilcrest,http://townofgilcrest.org/ +Colorado,Arapahoe County,Glendale,https://www.glendale.co.us/ +Colorado,Garfield County,Glenwood Springs,https://www.ci.glenwood-springs.co.us/ +Colorado,Jefferson County,Golden,https://www.cityofgolden.net/ +Colorado,Grand County,Granby,https://www.townofgranby.com/ +Colorado,Mesa County,Grand Junction,https://www.gjcity.org/ +Colorado,Grand County,Grand Lake,http://www.townofgrandlake.com/ +Colorado,Weld County,Greeley,http://greeleygov.com +Colorado,El Paso County,Green Mountain Falls,https://greenmountainfalls.colorado.gov/ +Colorado,Arapahoe County,Greenwood Village,https://www.greenwoodvillage.com/ +Colorado,Gunnison County,Gunnison,https://www.gunnisonco.gov/ +Colorado,Eagle County,Gypsum,http://www.townofgypsum.com +Colorado,Kiowa County,Haswell,http://www.kcedfonline.org/haswell.htm +Colorado,Routt County,Hayden,https://www.haydencolorado.com/ +Colorado,Morgan County,Hillrose,http://www.hillrosecolorado.org/ +Colorado,Prowers County,Holly,http://www.townofholly.com +Colorado,Phillips County,Holyoke,http://www.holyokechamber.org/ +Colorado,Grand County,Hot Sulphur Springs,http://www.hotsulphurspringsco.com +Colorado,Delta County,Hotchkiss,http://townofhotchkiss.com +Colorado,Weld County,Hudson,http://www.hudsoncolorado.org/ +Colorado,Lincoln County,Hugo,https://townhugo.com/ +Colorado,Clear Creek County,Idaho Springs,http://www.colorado.gov/idahosprings +Colorado,La Plata County,Ignacio,https://www.colorado.gov/ignacio +Colorado,Boulder County,Jamestown,http://www.jamestownco.org +Colorado,Larimer County,Johnstown,http://www.townofjohnstown.com/ +Colorado,Sedgwick County,Julesburg,https://townofjulesburg.com/ +Colorado,Weld County,Keenesburg,http://www.townofkeenesburg.com/ +Colorado,Weld County,Kersey,http://www.kerseygov.com/ +Colorado,Elbert County,Kiowa,https://townofkiowa.colorado.gov/ +Colorado,Cheyenne County,Kit Carson,http://kitcarsoncolorado.com/ +Colorado,Grand County,Kremmling,http://www.townofkremmling.org/ +Colorado,Conejos County,La Jara,https://colorado.gov/townoflajara +Colorado,Otero County,La Junta,https://lajuntacolorado.org +Colorado,Huerfano County,La Veta,http://www.townoflaveta-co.gov +Colorado,Boulder County,Lafayette,https://lafayetteco.gov +Colorado,Hinsdale County,Lake City,http://www.lakecity.com +Colorado,Jefferson County,Lakewood,https://www.lakewood.org/ +Colorado,Prowers County,Lamar,http://www.ci.lamar.co.us +Colorado,Douglas County,Larkspur,http://www.townoflarkspur.org +Colorado,Bent County,Las Animas,https://www.colorado.gov/cityoflasanimas +Colorado,Weld County,LaSalle,http://www.lasalletown.com/ +Colorado,Lake County,Leadville,https://www.colorado.gov/leadville +Colorado,Lincoln County,Limon,http://www.townoflimon.com/ +Colorado,Arapahoe County,Littleton,http://www.littletongov.org/ +Colorado,Weld County,Lochbuie,http://www.lochbuie.org/ +Colorado,Douglas County,Lone Tree,http://www.cityoflonetree.com +Colorado,Boulder County,Longmont,http://www.longmontcolorado.gov +Colorado,Boulder County,Louisville,http://www.louisvilleco.gov +Colorado,Larimer County,Loveland,http://www.cityofloveland.org +Colorado,Boulder County,Lyons,http://www.townoflyons.com +Colorado,Conejos County,Manassa,http://manassa.com +Colorado,Montezuma County,Mancos,http://www.mancoscolorado.com +Colorado,El Paso County,Manitou Springs,http://www.manitouspringsgov.com +Colorado,Otero County,Manzanola,https://www.colorado.com/cities-and-towns/manzanola +Colorado,Gunnison County,Marble,https://www.townofmarble.com/ +Colorado,Weld County,Mead,https://www.townofmead.org/ +Colorado,Rio Blanco County,Meeker,http://www.townofmeeker.org/ +Colorado,Weld County,Milliken,https://www.millikenco.gov/ +Colorado,Eagle County,Minturn,http://www.minturn.org +Colorado,Saguache County,Moffat,http://www.colorado.gov/townofmoffat +Colorado,Rio Grande County,Monte Vista,https://www.cityofmontevista.com/ +Colorado,Montrose County,Montrose,http://www.cityofmontrose.org +Colorado,El Paso County,Monument,http://www.townofmonument.org/ +Colorado,Jefferson County,Morrison,http://town.morrison.co.us +Colorado,Gunnison County,Mount Crested Butte,http://www.mtcrestedbuttecolorado.us +Colorado,Jefferson County,Mountain View,http://mtvgov.org +Colorado,San Miguel County,Mountain Village,https://townofmountainvillage.com/ +Colorado,Boulder County,Nederland,https://townofnederland.colorado.gov/ +Colorado,Garfield County,New Castle,http://www.newcastlecolorado.org +Colorado,Adams County,Northglenn,http://www.northglenn.org +Colorado,San Miguel County,Norwood,http://www.norwoodtown.com/ +Colorado,Montrose County,Nucla,http://www.colorado.gov/nucla +Colorado,Weld County,Nunn,http://www.nunncolorado.com +Colorado,Routt County,Oak Creek,http://townofoakcreek.com/ +Colorado,Montrose County,Olathe,http://www.townofolathe.org +Colorado,San Miguel County,Ophir,https://townofophir.colorado.gov/ +Colorado,Delta County,Orchard City,http://www.orchardcityco.org +Colorado,Crowley County,Ordway,https://www.townofordway.com/ +Colorado,Washington County,Otis,https://townofotis.colorado.gov/ +Colorado,Ouray County,Ouray,http://www.ci.ouray.co.us/ +Colorado,Sedgwick County,Ovid,https://www.facebook.com/OvidColorado +Colorado,Archuleta County,Pagosa Springs,https://visitpagosasprings.com/ +Colorado,Mesa County,Palisade,http://www.townofpalisade.org +Colorado,El Paso County,Palmer Lake,http://www.townofpalmerlake.com +Colorado,Delta County,Paonia,http://www.townofpaonia.com/ +Colorado,Garfield County,Parachute,http://www.parachutecolorado.com +Colorado,Douglas County,Parker,http://www.parkeronline.org +Colorado,Logan County,Peetz,https://www.townofpeetz.com/ +Colorado,Weld County,Pierce,https://townofpierce.org/ +Colorado,Gunnison County,Pitkin,https://colorado.gov/pitkin +Colorado,Weld County,Platteville,http://www.plattevillegov.org/ +Colorado,Chaffee County,Poncha Springs,http://www.ponchaspringscolorado.us +Colorado,Pueblo County,Pueblo,http://www.pueblo.us/ +Colorado,El Paso County,Ramah,https://www.colorado.gov/ramah +Colorado,Rio Blanco County,Rangely,http://www.rangely.com/ +Colorado,Eagle County,Red Cliff,https://townofredcliff.colorado.gov/ +Colorado,Dolores County,Rico,http://ricocolorado.gov +Colorado,Ouray County,Ridgway,http://town.ridgway.co.us/ +Colorado,Garfield County,Rifle,http://www.rifleco.org +Colorado,Fremont County,Rockvale,https://townofrockvale.colorado.gov/ +Colorado,Otero County,Rocky Ford,http://cityofrockyford.colorado.gov +Colorado,Pueblo County,Rye,https://townofrye.colorado.gov/ +Colorado,Saguache County,Saguache,https://www.colorado.gov/saguache +Colorado,Chaffee County,Salida,http://cityofsalida.com/ +Colorado,Costilla County,San Luis,http://townofsanluisco.org +Colorado,Sedgwick County,Sedgwick,https://www.sedgwickcolorado.com/ +Colorado,Weld County,Severance,https://townofseverance.org/ +Colorado,Arapahoe County,Sheridan,http://www.ci.sheridan.co.us +Colorado,Kiowa County,Sheridan Lake,http://www.kcedfonline.org/sheridanlake.htm +Colorado,Garfield County,Silt,http://www.townofsilt.org +Colorado,Custer County,Silver Cliff,http://silvercliffco.com +Colorado,Clear Creek County,Silver Plume,https://townofsilverplume.com/ +Colorado,Summit County,Silverthorne,http://www.silverthorne.org/ +Colorado,San Juan County,Silverton,https://www.colorado.gov/townofsilverton/ +Colorado,Elbert County,Simla,http://townofsimla.com +Colorado,Pitkin County,Snowmass Village,http://www.tosv.com/ +Colorado,Rio Grande County,South Fork,https://townofsouthfork.colorado.gov/ +Colorado,Baca County,Springfield,https://townofspringfield.colorado.gov +Colorado,Routt County,Steamboat Springs,http://www.steamboatsprings.net/ +Colorado,Logan County,Sterling,http://www.sterlingcolo.com/ +Colorado,Kit Carson County,Stratton,https://townofstratton.colorado.gov/ +Colorado,Boulder County,Superior,https://www.superiorcolorado.gov/ +Colorado,Otero County,Swink,http://townofswinkco.ourlocalview.com//HomeTown/ +Colorado,San Miguel County,Telluride,http://www.telluride-co.gov/ +Colorado,Adams County,Thornton,http://www.cityofthornton.net/ +Colorado,Larimer County,Timnath,https://timnath.org/ +Colorado,Las Animas County,Trinidad,http://trinidad.co.gov/ +Colorado,Eagle County,Vail,http://www.vailgov.com/ +Colorado,Teller County,Victor,https://cityofvictor.com/ +Colorado,Jackson County,Walden,https://www.colorado.gov/townofwalden +Colorado,Huerfano County,Walsenburg,https://www.colorado.gov/walsenburg +Colorado,Baca County,Walsh,https://www.colorado.gov/townofwalsh +Colorado,Boulder County,Ward,https://www.ward-co.org/ +Colorado,Larimer County,Wellington,http://www.wellingtoncolorado.gov/ +Colorado,Custer County,Westcliffe,http://www.townofwestcliffe.com +Colorado,Jefferson County,Westminster,http://www.cityofwestminster.us +Colorado,Jefferson County,Wheat Ridge,http://www.ci.wheatridge.co.us/ +Colorado,Morgan County,Wiggins,http://townofwiggins.colorado.gov +Colorado,Prowers County,Wiley,http://www.townofwiley.us/ +Colorado,Fremont County,Williamsburg,http://williamsburgcolorado.com +Colorado,Larimer County,Windsor,http://www.windsorgov.com/ +Colorado,Grand County,Winter Park,http://www.wpgov.com +Colorado,Teller County,Woodland Park,http://www.city-woodlandpark.org/ +Colorado,Yuma County,Wray,https://cityofwray.org/ +Colorado,Routt County,Yampa,https://www.townofyampa.com/ +Colorado,Yuma County,Yuma,https://www.colorado.gov/pacific/cityofyuma +Connecticut,Tolland County,Andover,https://www.andoverconnecticut.org/ +Connecticut,New Haven County,Ansonia,http://www.cityofansonia.com +Connecticut,Windham County,Ashford,http://www.ashfordtownhall.org/ +Connecticut,Hartford County,Avon,http://www.avonct.gov/ +Connecticut,Litchfield County,Barkhamsted,http://barkhamsted.us +Connecticut,New Haven County,Beacon Falls,http://www.beaconfalls-ct.org/ +Connecticut,Hartford County,Berlin,http://www.town.berlin.ct.us +Connecticut,New Haven County,Bethany,http://www.bethany-ct.com +Connecticut,Fairfield County,Bethel,http://www.bethel-ct.gov/ +Connecticut,Litchfield County,Bethlehem,http://www.bethlehemct.org +Connecticut,Hartford County,Bloomfield,http://www.bloomfieldct.org +Connecticut,Tolland County,Bolton,http://bolton.govoffice.com/ +Connecticut,New London County,Bozrah,http://www.townofbozrah.org +Connecticut,New Haven County,Branford,http://www.branford-ct.gov +Connecticut,Fairfield County,Bridgeport,http://bridgeportct.gov/ +Connecticut,Litchfield County,Bridgewater,https://www.bridgewater-ct.gov/ +Connecticut,Hartford County,Bristol,http://www.ci.bristol.ct.us +Connecticut,Fairfield County,Brookfield,https://www.brookfieldct.gov/ +Connecticut,Windham County,Brooklyn,http://www.brooklynct.org/ +Connecticut,Hartford County,Burlington,http://www.burlingtonct.us +Connecticut,Litchfield County,Canaan,http://www.canaanfallsvillage.org +Connecticut,Windham County,Canterbury,http://www.canterburyct.org/ +Connecticut,Hartford County,Canton,http://www.townofcantonct.org +Connecticut,Tolland County,Capitol Planning Region,http://crcog.org +Connecticut,Hartford County,Capitol Planning Region,http://crcog.org +Connecticut,Windham County,Chaplin,http://chaplinct.org/ +Connecticut,New Haven County,Cheshire,http://www.cheshirect.org +Connecticut,Middlesex County,Chester,http://www.chesterct.com/ +Connecticut,Middlesex County,Clinton,http://www.clintonct.org/ +Connecticut,New London County,Colchester,http://www.colchesterct.gov +Connecticut,Litchfield County,Colebrook,http://www.townofcolebrook.org +Connecticut,Tolland County,Columbia,http://www.columbiact.org/ +Connecticut,Litchfield County,Cornwall,http://www.cornwallct.org +Connecticut,Middlesex County,Cromwell,http://www.cromwellct.com/ +Connecticut,Fairfield County,Danbury,http://www.danbury-ct.gov/ +Connecticut,Fairfield County,Darien,http://www.darienct.gov/ +Connecticut,Middlesex County,Deep River,http://www.deepriverct.us/ +Connecticut,New Haven County,Derby,http://www.derbyct.gov +Connecticut,Middlesex County,Durham,http://www.townofdurhamct.org/ +Connecticut,Hartford County,East Granby,http://www.eastgranbyct.org +Connecticut,Middlesex County,East Haddam,http://www.easthaddam.org/ +Connecticut,Middlesex County,East Hampton,http://www.easthamptonct.gov +Connecticut,Hartford County,East Hartford,http://www.easthartfordct.gov +Connecticut,New Haven County,East Haven,http://www.townofeasthavenct.org +Connecticut,New London County,East Lyme,http://eltownhall.com +Connecticut,Hartford County,East Windsor,http://www.eastwindsor-ct.gov +Connecticut,Windham County,Eastford,https://www.eastfordct.org/townofeastford +Connecticut,Fairfield County,Easton,http://www.eastonct.gov/ +Connecticut,Tolland County,Ellington,http://www.ellington-ct.gov/ +Connecticut,Hartford County,Enfield,http://www.enfield-ct.gov +Connecticut,Middlesex County,Essex,http://www.essexct.gov/ +Connecticut,Fairfield County,Fairfield,https://www.fairfieldct.org/ +Connecticut,Hartford County,Farmington,http://www.farmington-ct.org +Connecticut,New London County,Franklin,http://www.franklinct.com +Connecticut,Hartford County,Glastonbury,http://www.glastonbury-ct.gov +Connecticut,Litchfield County,Goshen,http://www.goshenct.gov +Connecticut,Hartford County,Granby,http://www.granby-ct.gov +Connecticut,Fairfield County,Greater Bridgeport Planning Region,http://ctmetro.org +Connecticut,Fairfield County,Greenwich,http://www.greenwichct.org/ +Connecticut,New London County,Griswold,http://www.griswold-ct.org +Connecticut,New London County,Groton,http://www.groton-ct.gov +Connecticut,New Haven County,Guilford,https://www.guilfordct.gov +Connecticut,Middlesex County,Haddam,http://www.haddam.org/ +Connecticut,New Haven County,Hamden,http://www.hamden.com +Connecticut,Windham County,Hampton,http://hamptonct.org/ +Connecticut,Hartford County,Hartford,http://www.hartford.gov +Connecticut,Hartford County,Hartland,https://www.hartlandct.org +Connecticut,Litchfield County,Harwinton,http://harwinton.us +Connecticut,Tolland County,Hebron,http://www.hebronct.com/ +Connecticut,Litchfield County,Kent,http://www.townofkentct.org +Connecticut,Windham County,Killingly,https://www.killingly.org/ +Connecticut,Middlesex County,Killingworth,http://www.townofkillingworth.com/ +Connecticut,New London County,Lebanon,http://www.lebanonct.gov +Connecticut,New London County,Ledyard,http://www.ledyardct.org +Connecticut,New London County,Lisbon,http://www.lisbonct.com +Connecticut,Litchfield County,Litchfield,http://www.townoflitchfield.org +Connecticut,Middlesex County,Lower Connecticut River Valley Planning Region,http://rivercog.org +Connecticut,New London County,Lower Connecticut River Valley Planning Region,http://rivercog.org +Connecticut,New London County,Lyme,http://townlyme.org +Connecticut,New Haven County,Madison,http://www.madisonct.org +Connecticut,Hartford County,Manchester,http://www.manchesterct.gov +Connecticut,Tolland County,Mansfield,http://www.mansfieldct.org/ +Connecticut,Hartford County,Marlborough,https://marlboroughct.net +Connecticut,New Haven County,Meriden,http://www.meridenct.gov +Connecticut,New Haven County,Middlebury,http://www.middlebury-ct.org +Connecticut,Middlesex County,Middlefield,http://www.middlefieldct.org/ +Connecticut,Middlesex County,Middletown,https://www.middletownct.gov/ +Connecticut,New Haven County,Milford,http://www.ci.milford.ct.us +Connecticut,Fairfield County,Monroe,https://www.monroect.gov/ +Connecticut,New London County,Montville,http://www.montville-ct.org +Connecticut,Litchfield County,Morris,http://www.townofmorrisct.com +Connecticut,New Haven County,Naugatuck,http://www.naugatuck-ct.gov +Connecticut,New Haven County,Naugatuck Valley Planning Region,https://nvcogct.gov +Connecticut,Litchfield County,Naugatuck Valley Planning Region,https://nvcogct.gov +Connecticut,Hartford County,Naugatuck Valley Planning Region,https://nvcogct.gov +Connecticut,Fairfield County,Naugatuck Valley Planning Region,https://nvcogct.gov +Connecticut,Hartford County,New Britain,http://www.newbritainct.gov +Connecticut,Fairfield County,New Canaan,http://www.newcanaan.info/ +Connecticut,Fairfield County,New Fairfield,https://www.newfairfield.org/ +Connecticut,Litchfield County,New Hartford,http://newhartfordct.gov +Connecticut,New Haven County,New Haven,http://www.newhavenct.gov +Connecticut,New London County,New London,https://www.newlondonct.org/ +Connecticut,Litchfield County,New Milford,http://www.newmilford.org +Connecticut,Hartford County,Newington,http://www.newingtonct.gov +Connecticut,Fairfield County,Newtown,http://www.newtown-ct.gov +Connecticut,Litchfield County,Norfolk,http://www.norfolkct.org +Connecticut,New Haven County,North Branford,http://www.townofnorthbranfordct.com +Connecticut,Litchfield County,North Canaan,http://www.northcanaan.org +Connecticut,New Haven County,North Haven,http://www.town.north-haven.ct.us +Connecticut,New London County,North Stonington,http://www.northstoningtonct.gov +Connecticut,Windham County,Northeastern Connecticut Planning Region,http://neccog.org +Connecticut,Tolland County,Northeastern Connecticut Planning Region,http://neccog.org +Connecticut,New London County,Northeastern Connecticut Planning Region,http://neccog.org +Connecticut,Litchfield County,Northwest Hills Planning Region,http://northwesthillscog.org +Connecticut,Hartford County,Northwest Hills Planning Region,http://northwesthillscog.org +Connecticut,Fairfield County,Norwalk,https://www.norwalkct.gov/ +Connecticut,New London County,Norwich,http://www.norwichct.org/ +Connecticut,New London County,Old Lyme,http://www.oldlyme-ct.gov +Connecticut,Middlesex County,Old Saybrook,http://www.oldsaybrookct.org/ +Connecticut,New Haven County,Orange,http://www.orange-ct.gov +Connecticut,New Haven County,Oxford,http://www.oxford-ct.gov +Connecticut,Windham County,Plainfield,http://www.plainfieldct.org/ +Connecticut,Hartford County,Plainville,http://www.plainvillect.com +Connecticut,Litchfield County,Plymouth,http://www.plymouthct.us +Connecticut,Windham County,Pomfret,http://www.pomfretct.com/ +Connecticut,Middlesex County,Portland,http://www.portlandct.org/ +Connecticut,New London County,Preston,http://www.preston-ct.org +Connecticut,New Haven County,Prospect,http://www.townofprospect.com +Connecticut,Windham County,Putnam,http://www.putnamct.us/ +Connecticut,Fairfield County,Redding,http://www.townofreddingct.org/ +Connecticut,Fairfield County,Ridgefield,http://www.ridgefieldct.org/ +Connecticut,Hartford County,Rocky Hill,http://www.rockyhillct.gov +Connecticut,Litchfield County,Roxbury,http://www.roxburyct.com +Connecticut,New London County,Salem,http://www.salemct.gov +Connecticut,Litchfield County,Salisbury,http://salisburyct.us +Connecticut,Windham County,Scotland,http://www.scotlandct.org/ +Connecticut,New Haven County,Seymour,http://www.seymourct.org +Connecticut,Litchfield County,Sharon,http://www.sharonct.org +Connecticut,Fairfield County,Shelton,http://www.cityofshelton.org/ +Connecticut,Fairfield County,Sherman,http://www.townofshermanct.org/ +Connecticut,Hartford County,Simsbury,http://www.simsbury-ct.gov +Connecticut,Tolland County,Somers,http://www.somersct.gov/ +Connecticut,New Haven County,South Central Connecticut Planning Region,http://scrcog.org +Connecticut,Hartford County,South Windsor,http://www.southwindsor.org +Connecticut,New Haven County,Southbury,http://www.southbury-ct.org +Connecticut,New London County,Southeastern Connecticut Planning Region,http://seccog.org +Connecticut,Windham County,Southeastern Connecticut Planning Region,http://seccog.org +Connecticut,Hartford County,Southington,http://www.southington.org +Connecticut,New London County,Sprague,http://www.ctsprague.org +Connecticut,Tolland County,Stafford,http://www.staffordct.org +Connecticut,Fairfield County,Stamford,http://www.stamfordct.gov/ +Connecticut,Windham County,Sterling,http://www.sterlingct.us/ +Connecticut,New London County,Stonington,http://www.stonington-ct.gov +Connecticut,Fairfield County,Stratford,http://www.townofstratford.com +Connecticut,Hartford County,Suffield,https://www.suffieldct.gov +Connecticut,Litchfield County,Thomaston,http://www.thomastonct.org +Connecticut,Windham County,Thompson,http://www.thompsonct.org/ +Connecticut,Tolland County,Tolland,http://www.tolland.org/ +Connecticut,Litchfield County,Torrington,http://www.torringtonct.org/ +Connecticut,Fairfield County,Trumbull,http://www.trumbull-ct.gov/ +Connecticut,Tolland County,Union,http://www.unionconnecticut.org +Connecticut,Tolland County,Vernon,http://www.vernon-ct.gov/ +Connecticut,New London County,Voluntown,http://www.voluntown.gov +Connecticut,New Haven County,Wallingford,http://www.town.wallingford.ct.us +Connecticut,Litchfield County,Warren,http://www.warrenct.org +Connecticut,Litchfield County,Washington,http://www.washingtonct.org +Connecticut,New Haven County,Waterbury,http://www.waterburyct.org +Connecticut,New London County,Waterford,http://www.waterfordct.org +Connecticut,Litchfield County,Watertown,http://www.watertownct.org +Connecticut,Hartford County,West Hartford,http://www.westhartfordct.gov +Connecticut,New Haven County,West Haven,http://www.cityofwesthaven.com +Connecticut,Middlesex County,Westbrook,http://www.westbrookct.us/ +Connecticut,Fairfield County,Western Connecticut Planning Region,http://westcog.org +Connecticut,Litchfield County,Western Connecticut Planning Region,http://westcog.org +Connecticut,Fairfield County,Weston,http://www.westonct.gov/ +Connecticut,Fairfield County,Westport,http://www.westportct.gov/ +Connecticut,Hartford County,Wethersfield,http://wethersfieldct.gov +Connecticut,Tolland County,Willington,http://www.willingtonct.org/ +Connecticut,Fairfield County,Wilton,http://www.wiltonct.org/ +Connecticut,Litchfield County,Winchester,http://www.townofwinchester.org +Connecticut,Windham County,Windham,http://www.windhamct.com/ +Connecticut,Hartford County,Windsor,http://www.townofwindsorct.com +Connecticut,Hartford County,Windsor Locks,http://www.windsorlocksct.org +Connecticut,New Haven County,Wolcott,http://www.wolcottct.org +Connecticut,New Haven County,Woodbridge,http://www.woodbridgect.org +Connecticut,Litchfield County,Woodbury,http://www.woodburyct.org +Connecticut,Windham County,Woodstock,http://www.woodstockct.gov/ +Delaware,Windham County,Arden,http://arden.delaware.gov/ +Delaware,Windham County,Ardentown,https://ardentown.delaware.gov/ +Delaware,New Castle County,Bellefonte,http://www.townofbellefonte.com +Delaware,Sussex County,Bethany Beach,http://www.townofbethanybeach.com +Delaware,Sussex County,Bethel,https://bethel.delaware.gov/ +Delaware,Sussex County,Blades,http://blades.delaware.gov/ +Delaware,Sussex County,Bowers,https://bowersbeach.delaware.gov/ +Delaware,Sussex County,Bridgeville,http://bridgeville.delaware.gov/ +Delaware,Sussex County,Camden,https://camden.delaware.gov/ +Delaware,Sussex County,Cheswold,https://cheswold.delaware.gov/ +Delaware,Kent County,Clayton,http://www.clayton.delaware.gov/ +Delaware,Kent County,Dagsboro,https://dagsboro.delaware.gov/ +Delaware,Kent County,Delaware City,https://www.delawarecity.org/ +Delaware,Kent County,Delmar,http://www.townofdelmar.us/index.cfm +Delaware,Sussex County,Dewey Beach,http://www.townofdeweybeach.com/ +Delaware,Kent County,Dover,http://www.cityofdover.com +Delaware,Kent County,Ellendale,https://ellendale.delaware.gov/ +Delaware,New Castle County,Elsmere,https://www.townofelsmere.com/ +Delaware,New Castle County,Felton,https://felton.delaware.gov/ +Delaware,New Castle County,Fenwick Island,https://www.fenwickisland.delaware.gov +Delaware,New Castle County,Frankford,https://frankford.delaware.gov/ +Delaware,New Castle County,Frederica,http://frederica.delaware.gov/ +Delaware,Sussex County,Georgetown,http://www.georgetowndel.com/ +Delaware,Sussex County,Greenwood,https://greenwood.delaware.gov/ +Delaware,Sussex County,Harrington,https://harrington.delaware.gov/ +Delaware,Sussex County,Hartly,https://hartly.delaware.gov/ +Delaware,Sussex County,Henlopen Acres,https://henlopenacres.delaware.gov/ +Delaware,Sussex County,Houston,http://www.townofhouston.com/ +Delaware,Sussex County,Kenton,https://kenton.delaware.gov/ +Delaware,Sussex County,Laurel,http://www.townoflaurel.net/ +Delaware,Sussex County,Lewes,http://www.ci.lewes.de.us +Delaware,Sussex County,Little Creek,https://littlecreek.delaware.gov/ +Delaware,Sussex County,Magnolia,https://magnolia.delaware.gov/ +Delaware,New Castle County,Middletown,https://www.middletown.delaware.gov/ +Delaware,Kent County,Milford,http://www.cityofmilford.com/ +Delaware,Sussex County,Millsboro,http://www.millsboro.org/ +Delaware,Sussex County,Millville,https://millville.delaware.gov/ +Delaware,Sussex County,Milton,http://www.ci.milton.de.us/ +Delaware,New Castle County,New Castle,http://newcastlecity.delaware.gov/ +Delaware,New Castle County,Newark,https://www.newarkde.gov/ +Delaware,New Castle County,Newport,https://newport.delaware.gov +Delaware,New Castle County,Ocean View,http://www.oceanviewde.com/ +Delaware,New Castle County,Odessa,http://odessa.delaware.gov +Delaware,Sussex County,Rehoboth Beach,http://www.cityofrehoboth.com/ +Delaware,Sussex County,Seaford,http://www.seafordde.com/ +Delaware,Sussex County,Selbyville,https://selbyville.delaware.gov/ +Delaware,Sussex County,Slaughter Beach,https://slaughterbeach.delaware.gov/ +Delaware,Kent County,Smyrna,https://smyrna.delaware.gov/ +Delaware,Kent County,South Bethany,https://southbethany.delaware.gov +Delaware,New Castle County,Townsend,http://townsend.delaware.gov +Delaware,New Castle County,Viola,http://www.violade.com/ +Delaware,New Castle County,Wilmington,https://www.wilmingtonde.gov/ +Delaware,New Castle County,Woodside,https://woodside.delaware.gov/ +Delaware,New Castle County,Wyoming,https://wyoming.delaware.gov/ +Florida,New Castle County,Alachua,http://www.cityofalachua.com +Florida,New Castle County,Altamonte Springs,http://www.altamonte.org/ +Florida,New Castle County,Anna Maria,http://www.cityofannamaria.com +Florida,Franklin County,Apalachicola,http://www.cityofapalachicola.com/ +Florida,Orange County,Apopka,https://www.apopka.gov +Florida,DeSoto County,Arcadia,http://www.arcadia-fl.gov +Florida,DeSoto County,Archer,http://www.cityofarcher.com +Florida,DeSoto County,Astatula,http://www.townofastatula.com +Florida,DeSoto County,Atlantic Beach,http://www.coab.us +Florida,Palm Beach County,Atlantis,http://www.atlantisfl.gov/ +Florida,Polk County,Auburndale,http://www.auburndalefl.com +Florida,Miami-Dade County,Aventura,http://www.cityofaventura.com +Florida,Highlands County,Avon Park,http://www.avonpark.cc +Florida,Miami-Dade County,Bal Harbour,http://www.balharbourfl.gov/ +Florida,Duval County,Baldwin,https://baldwinfl.govoffice2.com +Florida,Polk County,Bartow,http://www.cityofbartow.net/ +Florida,Polk County,Bay Harbor Islands,http://www.bayharborislands-fl.gov +Florida,Metrorail (Miami-Dade County),Bell,http://townofbellflorida.com +Florida,Palm Beach County,Belle Glade,http://www.bellegladegov.com/ +Florida,Palm Beach County,Belle Isle,http://www.cityofbelleislefl.org +Florida,Palm Beach County,Belleair,http://www.townofbelleair.com/ +Florida,Palm Beach County,Belleair Beach,http://www.cityofbelleairbeach.com +Florida,Palm Beach County,Belleair Bluffs,http://www.belleairbluffs.org +Florida,Palm Beach County,Belleair Shore,http://belleairshore.com/ +Florida,Palm Beach County,Belleview,http://www.belleviewfl.org +Florida,Palm Beach County,Beverly Beach,http://mybeverlybeach.org +Florida,Palm Beach County,Biscayne Park,http://www.biscayneparkfl.gov +Florida,Metrorail (Miami-Dade County),Blountstown,https://blountstownfl.govoffice3.com/ +Florida,Palm Beach County,Boca Raton,http://www.myboca.us +Florida,Palm Beach County,Bonifay,http://cityofbonifayfl.com/ +Florida,Lee County,Bonita Springs,http://www.cityofbonitasprings.org/ +Florida,Lee County,Bowling Green,http://www.bowlinggreenfl.org/ +Florida,Palm Beach County,Boynton Beach,http://www.boynton-beach.org +Florida,Manatee County,Bradenton,http://cityofbradenton.com +Florida,Manatee County,Bradenton Beach,http://www.cityofbradentonbeach.com +Florida,Manatee County,Branford,http://townofbranford.net/ +Florida,Manatee County,Briny Breezes,http://www.brinybreezes.us/ +Florida,Manatee County,Bristol,http://www.cityofbristolflorida.org +Florida,Manatee County,Bronson,http://townofbronson.org +Florida,Manatee County,Brooker,http://townofbrooker.com +Florida,Hernando County,Brooksville,https://www.cityofbrooksville.us/ +Florida,Hernando County,Bunnell,http://www.bunnellcity.us +Florida,Hernando County,Bushnell,http://cityofbushnellfl.com/ +Florida,Hernando County,Callahan,https://www.townofcallahan-fl.gov/ +Florida,Hernando County,Callaway,http://www.cityofcallaway.com +Florida,Hernando County,Cape Canaveral,http://www.cityofcapecanaveral.org/ +Florida,Lee County,Cape Coral,http://www.capecoral.net +Florida,Lee County,Carrabelle,http://www.mycarrabelle.com +Florida,Seminole County,Casselberry,http://www.casselberry.org/ +Florida,Seminole County,Century,http://www.townofcenturyflorida.com +Florida,Seminole County,Chattahoochee,https://www.chattgov.org/ +Florida,Seminole County,Chiefland,https://chiefland.govoffice.com/ +Florida,Seminole County,Chipley,http://www.cityofchipley.com +Florida,Seminole County,Cinco Bayou,http://www.cincobayou.com/ +Florida,Pinellas County,Clearwater,http://www.myclearwater.com +Florida,Pinellas County,Clermont,http://www.clermontfl.gov/ +Florida,Pinellas County,Clewiston,http://www.clewiston-fl.gov +Florida,Pinellas County,Cocoa,http://www.cocoafl.org/ +Florida,Pinellas County,Cocoa Beach,http://www.cityofcocoabeach.com +Florida,Broward County,Coconut Creek,http://www.coconutcreek.net +Florida,Broward County,Coleman,http://www.cityofcolemanfl.com/ +Florida,Broward County,Cooper City,http://www.coopercityfl.org +Florida,Miami-Dade County,Coral Gables,http://www.citybeautiful.net/ +Florida,Broward County,Coral Springs,http://www.coralsprings.org/ +Florida,Broward County,Cottondale,http://www.cityofcottondale.net/ +Florida,Broward County,Crescent City,http://www.crescentcity-fl.com/ +Florida,Broward County,Crestview,http://www.cityofcrestview.org/ +Florida,Citrus County,Crystal River,http://www.crystalriverfl.org +Florida,Citrus County,Cutler Bay,http://www.cutlerbay-fl.gov +Florida,Pasco County,Dade City,http://www.dadecityfl.com +Florida,File:Logo of Broward County,Dania Beach,http://www.daniabeachfl.gov +Florida,Polk County,Davenport,https://www.mydavenport.org/ +Florida,File:Logo of Broward County,Davie,http://www.davie-fl.gov +Florida,Volusia County,Daytona Beach,http://www.codb.us +Florida,File:Logo of Volusia County,Daytona Beach Shores,http://www.dbshores.org/ +Florida,Volusia County,DeBary,http://www.debary.org +Florida,Broward County,Deerfield Beach,http://www.deerfield-beach.com +Florida,Walton County,DeFuniak Springs,http://www.defuniaksprings.net +Florida,Volusia County,DeLand,http://www.deland.org +Florida,Palm Beach County,Delray Beach,http://www.mydelraybeach.com +Florida,Volusia County,Deltona,http://www.deltonafl.gov +Florida,Volusia County,Destin,http://www.cityofdestin.com/ +Florida,Volusia County,Doral,http://www.cityofdoral.com +Florida,Polk County,Dundee,http://www.townofdundee.com +Florida,Pinellas County,Dunedin,http://www.dunedingov.com +Florida,Pinellas County,Dunnellon,http://www.dunnellon.org +Florida,Polk County,Eagle Lake,http://www.eaglelake-fla.com +Florida,Polk County,Eatonville,http://www.townofeatonville.org +Florida,Volusia County,Edgewater,http://www.cityofedgewater.org +Florida,Volusia County,Edgewood,http://www.edgewood-fl.gov +Florida,Volusia County,El Portal,http://www.elportalvillage.com +Florida,Lee County,Estero,https://estero-fl.gov/ +Florida,Lee County,Esto,https://estoflorida.com/ +Florida,Lee County,Eustis,http://www.eustis.org/ +Florida,Lee County,Everglades City,https://www.cityofeverglades.org/ +Florida,Levy County,Fanning Springs,http://www.fanningsprings.org/ +Florida,Levy County,Fellsmere,http://www.cityoffellsmere.org/ +Florida,Nassau County,Fernandina Beach,http://www.fbfl.us +Florida,Flagler County,Flagler Beach,http://www.cityofflaglerbeach.com +Florida,Miami-Dade County,Florida City,http://www.floridacityfl.gov +Florida,Broward County,Fort Lauderdale,http://www.fortlauderdale.gov +Florida,Polk County,Fort Meade,http://www.cityoffortmeade.com/ +Florida,Lee County,Fort Myers,http://www.cityftmyers.com +Florida,Lee County,Fort Myers Beach,http://www.fortmyersbeachfl.gov/ +Florida,St. Lucie County,Fort Pierce,http://cityoffortpierce.com +Florida,St. Lucie County,Fort Walton Beach,http://www.fwb.org +Florida,St. Lucie County,Fort White,http://fortwhitefl.com/ +Florida,Walton County,Freeport,https://www.freeportflorida.gov/ +Florida,Polk County,Frostproof,http://www.cityoffrostproof.com/ +Florida,Lake County,Fruitland Park,http://www.fruitlandpark.org/ +Florida,Alachua County,Gainesville,http://www.gainesvillefl.gov +Florida,Alachua County,Glen Ridge,https://www.townofglenridgefl.com/ +Florida,Alachua County,Glen St. Mary,https://glenstmary.govoffice.com/ +Florida,Alachua County,Golden Beach,http://www.goldenbeach.us +Florida,Metrorail (Miami-Dade County),Golf,http://www.villageofgolf.org/ +Florida,Metrorail (Miami-Dade County),Grant-Valkaria,http://www.grantvalkaria.org/ +Florida,Clay County,Green Cove Springs,http://www.greencovesprings.com +Florida,Palm Beach County,Greenacres,http://greenacresfl.gov/ +Florida,Palm Beach County,Greensboro,http://www.greensboro-fl.com +Florida,Palm Beach County,Greenville,http://mygreenvillefl.com +Florida,Palm Beach County,Greenwood,http://www.townofgreenwood.org/ +Florida,Palm Beach County,Gretna,http://mygretna.com +Florida,Palm Beach County,Groveland,http://groveland-fl.gov/ +Florida,Santa Rosa County Library System,Gulf Breeze,http://www.cityofgulfbreeze.com +Florida,Santa Rosa County Library System,Gulf Stream,https://www.gulf-stream.org/ +Florida,Pinellas County,Gulfport,http://www.mygulfport.us +Florida,Polk County,Haines City,http://www.hainescity.com +Florida,Broward County,Hallandale Beach,http://www.hallandalebeach.org/ +Florida,Broward County,Hampton,http://hamptonfl.com/ +Florida,Broward County,Havana,http://www.townofhavana.com +Florida,Broward County,Haverhill,https://www.townofhaverhill-fl.gov +Florida,Alachua County,Hawthorne,http://www.cityofhawthorne.net +Florida,Alachua County,Hialeah,http://www.hialeahfl.gov +Florida,Metrorail (Miami-Dade County),Hialeah Gardens,http://www.cityofhialeahgardens.com +Florida,Alachua County,High Springs,http://highsprings.us +Florida,Alachua County,Highland Beach,http://www.highlandbeach.us/ +Florida,Polk County,Highland Park,http://www.highlandpark-fl.org/ +Florida,Polk County,Hillcrest Heights,http://www.townofhillcrestheights.com/ +Florida,Polk County,Hilliard,http://www.townofhilliard.com/ +Florida,Broward County,Hillsboro Beach,http://www.townofhillsborobeach.com +Florida,Broward County,Holly Hill,https://www.hollyhillfl.org +Florida,Broward County,Hollywood,http://www.hollywoodfl.org/ +Florida,Manatee County,Holmes Beach,http://holmesbeachfl.org +Florida,Manatee County,Homestead,http://www.cityofhomestead.com +Florida,Metrorail (Miami-Dade County),Howey-in-the-Hills,http://www.howey.org +Florida,Metrorail (Miami-Dade County),Hypoluxo,http://www.hypoluxo.org/ +Florida,Metrorail (Miami-Dade County),Indialantic,http://www.indialantic.com/ +Florida,Metrorail (Miami-Dade County),Indian Creek,http://indiancreekvillagefl.gov +Florida,Metrorail (Miami-Dade County),Indian Harbour Beach,http://www.indianharbourbeach.org +Florida,Metrorail (Miami-Dade County),Indian River Shores,http://irshores.com +Florida,Metrorail (Miami-Dade County),Indian Rocks Beach,http://www.indian-rocks-beach.com +Florida,Metrorail (Miami-Dade County),Indian Shores,http://www.myindianshores.com/ +Florida,Metrorail (Miami-Dade County),Indiantown,http://www.indiantownfl.gov +Florida,Metrorail (Miami-Dade County),Inglis,http://townofinglis.org +Florida,Metrorail (Miami-Dade County),Interlachen,http://www.interlachen-fl.gov +Florida,Metrorail (Miami-Dade County),Inverness,https://inverness-fl.gov/ +Florida,Metrorail (Miami-Dade County),Islamorada,http://www.islamorada.fl.us +Florida,Duval County,Jacksonville,http://www.coj.net +Florida,Duval County,Jacksonville Beach,http://www.jacksonvillebeach.org +Florida,Duval County,Jacob City,http://www.jacobcityfl.org +Florida,Duval County,Jasper,http://jasperflonline.com +Florida,Duval County,Jay,http://www.townofjayfl.com/ +Florida,Duval County,Juno Beach,https://www.juno-beach.fl.us/ +Florida,File:Flag of Palm Beach County,Jupiter,http://jupiter.fl.us/ +Florida,File:Flag of Palm Beach County,Jupiter Inlet Colony,http://www.jupiterinletcolony.org/ +Florida,File:Flag of Palm Beach County,Jupiter Island,http://townofjupiterisland.com +Florida,Pinellas County,Kenneth City,https://www.kennethcityfl.org/ +Florida,Pinellas County,Key Biscayne,http://www.keybiscayne.fl.gov +Florida,Metrorail (Miami-Dade County),Key Colony Beach,http://www.keycolonybeach.net +Florida,Monroe County,Key West,http://www.cityofkeywest-fl.gov +Florida,Clay County,Keystone Heights,https://www.keystoneheights.us/ +Florida,Clay County,Kissimmee,https://www.kissimmee.gov/ +Florida,Hendry County,LaBelle,http://www.citylabelle.com +Florida,Hendry County,LaCrosse,http://townoflacrosse.net +Florida,Hendry County,Lady Lake,https://www.ladylake.org/ +Florida,Polk County,Lake Alfred,http://mylakealfred.com/ +Florida,Union County,Lake Butler,http://www.cityoflakebutler.org/ +Florida,Columbia County,Lake City,http://www.lcfla.com +Florida,Columbia County,Lake Clarke Shores,https://www.townoflcs.com/ +Florida,Polk County,Lake Hamilton,http://www.townoflakehamilton.com/ +Florida,Polk County,Lake Helen,http://www.lakehelen.org/ +Florida,Polk County,Lake Mary,http://www.lakemaryfl.com/ +Florida,Polk County,Lake Park,https://www.lakeparkflorida.gov/ +Florida,Highlands County,Lake Placid,http://www.lakeplacidfl.net +Florida,Polk County,Lake Wales,http://www.cityoflakewales.com +Florida,Palm Beach County,Lake Worth Beach,https://www.lakeworthbeachfl.gov/ +Florida,Polk County,Lakeland,https://www.lakelandgov.net/ +Florida,File:Flag of Palm Beach County,Lantana,https://www.lantana.org/ +Florida,Pinellas County,Largo,http://www.largo.com +Florida,File:Logo of Broward County,Lauderdale Lakes,http://www.lauderdalelakes.org +Florida,Broward County,Lauderdale-by-the-Sea,http://www.lauderdalebythesea-fl.gov/ +Florida,File:Logo of Broward County,Lauderhill,http://www.lauderhill-fl.gov/ +Florida,File:Logo of Broward County,Lawtey,http://www.lawtey-fl.com +Florida,File:Logo of Broward County,Layton,http://www.cityoflayton.com +Florida,Broward County,Lazy Lake,http://lazylakefl.us/ +Florida,Broward County,Lee,http://www.leeflorida.org +Florida,Broward County,Leesburg,https://www.leesburgflorida.gov/ +Florida,File:Logo of Broward County,Lighthouse Point,http://www.lighthousepoint.com +Florida,File:Logo of Broward County,Live Oak,http://www.cityofliveoak.org/ +Florida,Sarasota County,Longboat Key,http://www.longboatkey.org +Florida,Sarasota County,Longwood,http://www.longwoodfl.org/ +Florida,Palm Beach County,Loxahatchee Groves,https://www.loxahatcheegrovesfl.gov/ +Florida,Palm Beach County,Lynn Haven,http://www.cityoflynnhaven.com +Florida,Palm Beach County,Macclenny,http://www.cityofmacclenny.com +Florida,Palm Beach County,Madeira Beach,http://www.madeirabeachfl.gov +Florida,Palm Beach County,Madison,http://www.cityofmadisonfl.com +Florida,Palm Beach County,Maitland,https://www.itsmymaitland.org/ +Florida,Brevard County,Malabar,http://www.townofmalabar.org/ +Florida,Palm Beach County,Manalapan,http://www.manalapan.org/ +Florida,Palm Beach County,Mangonia Park,https://tompfl.com/ +Florida,File:Seal of Monroe County,Marathon,http://www.ci.marathon.fl.us +Florida,Collier County,Marco Island,http://www.cityofmarcoisland.com/ +Florida,Broward County,Margate,http://www.margatefl.com/ +Florida,Broward County,Marianna,http://www.cityofmarianna.com +Florida,Flagler County,Mary Esther,http://cityofmaryesther.com/ +Florida,Flagler County,Mascotte,https://www.cityofmascotte.com/ +Florida,Flagler County,McIntosh,http://www.townofmcintosh.org +Florida,Flagler County,Medley,http://www.townofmedley.com +Florida,Brevard County,Melbourne,http://www.melbourneflorida.org/ +Florida,Brevard County,Melbourne Beach,http://www.melbournebeachfl.org/ +Florida,Brevard County,Melbourne Village,http://www.melbournevillage.org/ +Florida,Bay County,Mexico Beach,http://mexicobeachgov.com/ +Florida,Metrorail (Miami-Dade County),Miami Beach,https://www.miamibeachfl.gov/ +Florida,Miami-Dade County,Miami Gardens,http://www.miamigardens-fl.gov/ +Florida,Metrorail (Miami-Dade County),Miami Lakes,http://miamilakes-fl.gov +Florida,Metrorail (Miami-Dade County),Miami Shores,http://www.msvfl.gov +Florida,Metrorail (Miami-Dade County),Miami Springs,http://www.miamisprings-fl.gov +Florida,Metrorail (Miami-Dade County),Micanopy,http://www.micanopytown.com +Florida,Gadsden County,Midway,http://www.mymidwayfl.com +Florida,Gadsden County,Milton,http://www.ci.milton.fl.us/ +Florida,Gadsden County,Minneola,http://www.minneola.us/ +Florida,Broward County,Miramar,http://www.miramarfl.gov +Florida,Broward County,Monticello,http://www.cityofmonticello.us +Florida,Broward County,Montverde,http://www.mymontverde.com +Florida,Broward County,Moore Haven,http://www.moorehaven.org +Florida,Broward County,Mount Dora,http://www.ci.mount-dora.fl.us +Florida,Polk County,Mulberry,https://www.cityofmulberryfl.org/ +Florida,Collier County,Naples,http://www.naplesgov.com +Florida,Duval County,Neptune Beach,http://ci.neptune-beach.fl.us +Florida,Pasco County,New Port Richey,http://www.cityofnewportrichey.org/ +Florida,Volusia County,New Smyrna Beach,http://www.cityofnsb.com +Florida,Alachua County,Newberry,https://www.newberryfl.gov +Florida,Alachua County,Niceville,https://www.cityofniceville.org/ +Florida,Alachua County,North Bay Village,https://northbayvillage-fl.gov +Florida,File:Logo of Broward County,North Lauderdale,http://www.nlauderdale.org +Florida,File:Logo of Broward County,North Miami,http://www.northmiamifl.gov +Florida,Miami-Dade County,North Miami Beach,http://www.citynmb.com +Florida,File:Flag of Palm Beach County,North Palm Beach,http://www.village-npb.org/ +Florida,File:Flag of Palm Beach County,North Port,http://cityofnorthport.com +Florida,File:Flag of Palm Beach County,North Redington Beach,http://www.townofnorthredingtonbeach.com/ +Florida,File:Flag of Palm Beach County,Oak Hill,http://www.oakhillfl.com +Florida,File:Flag of Palm Beach County,Oakland,http://www.oaklandfl.gov +Florida,Broward County,Oakland Park,http://www.oaklandparkfl.gov +Florida,Marion County,Ocala,http://www.ocalafl.org +Florida,Marion County,Ocean Breeze,http://townofoceanbreeze.org +Florida,Marion County,Ocean Ridge,http://www.oceanridgeflorida.com/ +Florida,Marion County,Ocoee,http://www.ocoee.org +Florida,Okeechobee County,Okeechobee,http://www.cityofokeechobee.com +Florida,Okeechobee County,Oldsmar,http://www.myoldsmar.com +Florida,Miami-Dade County,Opa-locka,http://www.opalockafl.gov +Florida,Volusia County,Orange City,https://www.orangecityfl.gov +Florida,Volusia County,Orange Park,http://www.townoforangepark.com +Florida,Orange County,Orlando,http://www.orlando.gov +Florida,Orange County,Ormond Beach,http://www.ormondbeach.org/ +Florida,Seminole County,Oviedo,http://www.cityofoviedo.net/ +Florida,Palm Beach County,Pahokee,http://cityofpahokee.com/Pages/index +Florida,Putnam County,Palatka,http://palatka-fl.gov +Florida,Putnam County,Palm Bay,http://www.palmbayflorida.org/ +Florida,Putnam County,Palm Beach,https://townofpalmbeach.com/ +Florida,Palm Beach County,Palm Beach Gardens,http://www.pbgfl.com +Florida,Palm Beach County,Palm Beach Shores,http://www.palmbeachshoresfl.us/ +Florida,Flagler County,Palm Coast,https://www.palmcoast.gov +Florida,Flagler County,Palm Shores,http://www.townofpalmshores.org/ +Florida,Flagler County,Palm Springs,https://www.vpsfl.org/ +Florida,Manatee County,Palmetto,http://palmettofl.org +Florida,Manatee County,Palmetto Bay,http://www.palmettobay-fl.gov +Florida,Metrorail (Miami-Dade County),Panama City,http://www.pcgov.org/ +Florida,Bay County,Panama City Beach,http://www.pcbgov.com +Florida,Bay County,Parker,http://www.cityofparker.com +Florida,File:Logo of Broward County,Parkland,http://www.cityofparkland.org +Florida,File:Logo of Broward County,Paxton,http://paxtonfl.net/ +Florida,Broward County,Pembroke Park,http://www.townofpembrokepark.com +Florida,Broward County,Pembroke Pines,http://www.ppines.com/ +Florida,Broward County,Penney Farms,http://www.penneyfarmsfl.govoffice2.com +Florida,Escambia County,Pensacola,http://www.cityofpensacola.com +Florida,Escambia County,Perry,https://cityofperry.net/ +Florida,Volusia County,Pierson,http://www.townofpierson.org +Florida,Volusia County,Pinecrest,http://pinecrest-fl.gov +Florida,Pinellas County,Pinellas Park,https://www.pinellas-park.com +Florida,Pinellas County,Plant City,http://www.plantcitygov.com +Florida,Broward County,Plantation,http://www.plantation.org +Florida,Polk County,Polk City,http://www.mypolkcity.org/ +Florida,Polk County,Pomona Park,http://pomonapark.com/ +Florida,Broward County,Pompano Beach,http://pompanobeachfl.gov +Florida,Broward County,Ponce de Leon,http://www.poncedeleonfl.com +Florida,Broward County,Ponce Inlet,http://ponce-inlet.org/ +Florida,Broward County,Port Orange,http://www.port-orange.org +Florida,Pasco County,Port Richey,https://cityofportrichey.com/ +Florida,Pasco County,Port St. Joe,http://www.cityofportstjoe.com +Florida,St. Lucie County,Port St. Lucie,https://www.cityofpsl.com/ +Florida,Charlotte County,Punta Gorda,http://www.ci.punta-gorda.fl.us +Florida,Gadsden County,Quincy,http://www.myquincy.net +Florida,Lake Butler,Reddick,http://www.townofreddick.com +Florida,Lake Butler,Redington Beach,https://www.townofredingtonbeach.com/ +Florida,Lake Butler,Redington Shores,https://townofredingtonshores.com/ +Florida,Palm Beach County,Riviera Beach,http://rivierabch.com/ +Florida,Palm Beach County,Rockledge,http://www.cityofrockledge.org/ +Florida,File:Flag of Palm Beach County,Royal Palm Beach,http://www.royalpalmbeach.com/ +Florida,Pinellas County,Safety Harbor,http://www.cityofsafetyharbor.com +Florida,Pasco County,San Antonio,http://www.sanantonioflorida.org/ +Florida,Seminole County,Sanford,http://sanfordfl.gov +Florida,Seminole County,Sanibel,http://www.mysanibel.com +Florida,Sarasota County,Sarasota,http://www.sarasotafl.gov +Florida,Sarasota County,Satellite Beach,http://www.satellitebeachfl.org/ +Florida,Indian River County,Sebastian,http://www.cityofsebastian.org/ +Florida,Highlands County,Sebring,http://www.mysebring.com +Florida,Highlands County,Seminole,http://www.myseminole.com +Florida,Highlands County,Sewall's Point,http://sewallspoint.org +Florida,Okaloosa County,Shalimar,http://www.shalimarflorida.org +Florida,Okaloosa County,Sneads,http://www.sneadsfl.com/ +Florida,Okaloosa County,Sopchoppy,http://www.sopchoppy.org/ +Florida,Palm Beach County,South Bay,http://www.southbaycity.com +Florida,Palm Beach County,South Daytona,https://www.southdaytona.org/ +Florida,Palm Beach County,South Miami,http://www.southmiamifl.gov +Florida,Metrorail (Miami-Dade County),South Palm Beach,http://www.southpalmbeach.com/ +Florida,Metrorail (Miami-Dade County),South Pasadena,http://mysouthpasadena.com/ +Florida,File:Logo of Broward County,Southwest Ranches,http://southwestranches.org +Florida,File:Logo of Broward County,Springfield,http://springfield.fl.gov +Florida,File:Logo of Broward County,St. Augustine,http://www.ci.st-augustine.fl.us/ +Florida,File:Logo of Broward County,St. Augustine Beach,http://www.staugbch.com +Florida,Osceola County,St. Cloud,http://www.stcloud.org +Florida,Pasco County,St. Leo,http://www.townofstleo.org +Florida,Pasco County,St. Lucie Village,https://stlucievillagefl.gov/ +Florida,Pasco County,St. Marks,http://www.cityofstmarks.com/ +Florida,Pasco County,St. Pete Beach,http://www.stpetebeach.org +Florida,Pinellas County,St. Petersburg,https://www.stpete.org/ +Florida,Pinellas County,Starke,http://www.cityofstarke.org +Florida,Martin County,Stuart,http://cityofstuart.us +Florida,Martin County,Sunny Isles Beach,http://www.sibfl.net +Florida,File:Logo of Broward County,Sunrise,http://www.sunrisefl.gov +Florida,File:Logo of Broward County,Surfside,https://www.townofsurfsidefl.gov/ +Florida,Metrorail (Miami-Dade County),Sweetwater,http://www.cityofsweetwater.fl.gov +Florida,Leon County,Tallahassee,http://www.talgov.com +Florida,Broward County,Tamarac,http://www.tamarac.org +Florida,Hillsborough County,Tampa,https://www.tampa.gov/ +Florida,Pinellas County,Tarpon Springs,http://www.ctsfl.us +Florida,Pinellas County,Tavares,http://www.tavares.org +Florida,Pinellas County,Temple Terrace,http://www.templeterrace.com +Florida,Palm Beach County,Tequesta,http://www.tequesta.org/ +Florida,Palm Beach County,Titusville,http://www.titusville.com +Florida,Pinellas County,Treasure Island,http://www.mytreasureisland.org +Florida,Pinellas County,Trenton,http://www.trentonflorida.org +Florida,Pinellas County,Umatilla,http://www.umatillafl.org +Florida,Pinellas County,Valparaiso,http://www.valp.org/ +Florida,Sarasota County,Venice,https://www.venicegov.com +Florida,Sarasota County,Vernon,http://vernonflorida.net/ +Florida,Indian River County,Vero Beach,http://www.covb.org +Florida,Miami-Dade County,Virginia Gardens,https://www.virginiagardens-fl.gov +Florida,Metrorail (Miami-Dade County),Waldo,http://waldo-fl.com +Florida,Metrorail (Miami-Dade County),Wauchula,http://cityofwauchula.com +Florida,Metrorail (Miami-Dade County),Webster,http://www.websterfl.com/ +Florida,Metrorail (Miami-Dade County),Welaka,https://www.welaka-fl.gov/ +Florida,File:Flag of Palm Beach County,Wellington,http://wellingtonfl.gov/ +Florida,Palm Beach County,West Melbourne,http://www.westmelbourne.org/ +Florida,Palm Beach County,West Miami,http://www.cityofwestmiamifl.com +Florida,Palm Beach County,West Palm Beach,http://wpb.org/ +Florida,File:Logo of Broward County,West Park,https://www.cityofwestpark.org/ +Florida,Palm Beach County,Westlake,https://www.westlakegov.com/ +Florida,File:Logo of Broward County,Weston,http://www.westonfl.org +Florida,File:Logo of Broward County,Wewahitchka,http://cityofwewahitchka.com +Florida,File:Logo of Broward County,White Springs,http://www.whitesprings.org +Florida,File:Logo of Broward County,Wildwood,https://www.wildwood-fl.gov/ +Florida,File:Logo of Broward County,Williston,http://www.willistonfl.org/ +Florida,File:Logo of Broward County,Wilton Manors,http://www.wiltonmanors.com +Florida,File:Logo of Broward County,Windermere,http://www.town.windermere.fl.us +Florida,File:Logo of Broward County,Winter Garden,http://www.cwgdn.com +Florida,Polk County,Winter Haven,http://www.mywinterhaven.com +Florida,Orange County,Winter Park,http://cityofwinterpark.org +Florida,Orange County,Winter Springs,http://www.winterspringsfl.org/ +Florida,Lake Butler,Yankeetown,http://yankeetownfl.govoffice2.com +Florida,Pasco County,Zephyrhills,http://www.ci.zephyrhills.fl.us/ +Florida,Pasco County,Zolfo Springs,http://www.townofzolfo.com +Georgia,Wilcox County,Abbeville,http://www.abbevillegeorgia.org +Georgia,Cobb County,Acworth,http://www.acworth.org +Georgia,Bartow County,Adairsville,http://www.adairsvillega.net +Georgia,Cook County,Adel,http://www.cityofadel.us +Georgia,Johnson County,Adrian,https://cityofadrianga.org/ +Georgia,Dougherty County,Albany,http://www.albanyga.gov +Georgia,Wilkinson County,Allentown,http://cityofallentownga.org +Georgia,Bacon County,Alma,http://www.cityofalmaga.gov +Georgia,Fulton County,Alpharetta,https://www.alpharetta.ga.us/ +Georgia,Habersham County,Alto,http://townofaltoga.org +Georgia,Sumter County,Americus,http://www.cityofamericus.net +Georgia,Sumter County,Andersonville,http://andersonvillegeorgia.info +Georgia,Crisp County,Arabi,http://cityofarabi.com +Georgia,Jackson County,Arcade,http://cityofarcade.org +Georgia,Turner County,Ashburn,https://www.cityofashburn.net +Georgia,Clarke County,Athens,http://www.athensclarkecounty.com/ +Georgia,Decatur County,Attapulgus,http://georgiainfo.galileo.usg.edu/topics/historical_markers/county/decatur/attapulgus +Georgia,Barrow County,Auburn,http://www.cityofauburn-ga.org +Georgia,Richmond County,Augusta,http://www.augustaga.gov +Georgia,Cobb County,Austell,http://www.austellga.gov +Georgia,DeKalb County,Avondale Estates,https://www.avondaleestates.org/ +Georgia,Mitchell County,Baconton,http://www.cityofbacontonga.com +Georgia,Decatur County,Bainbridge,http://bainbridgecity.com +Georgia,Habersham County,Baldwin,http://www.cityofbaldwin.org +Georgia,Cherokee County,Ball Ground,http://cityofballground.com +Georgia,Lamar County,Barnesville,http://www.cityofbarnesville.com +Georgia,Thomas County,Barwick,http://www.cityofbarwick.org +Georgia,Appling County,Baxley,http://www.baxley.org +Georgia,Evans County,Bellville,http://georgiainfo.galileo.usg.edu/topics/historical_markers/county/evans/bellville +Georgia,Gwinnett County,Berkeley Lake,http://www.berkeley-lake.com +Georgia,Colquitt County,Berlin,https://cityofberlinga.com +Georgia,Barrow County,Bethlehem,http://www.bethlehemga.org +Georgia,Oconee County,Bishop,http://www.townofbishop.org +Georgia,Pierce County,Blackshear,http://blackshearga.com +Georgia,Union County,Blairsville,http://www.blairsville-ga.gov +Georgia,Early County,Blakely,http://cityofblakely.net/ +Georgia,Chatham County,Bloomingdale,http://www.bloomingdale-ga.com +Georgia,Fannin County,Blue Ridge,http://www.cityofblueridgega.gov +Georgia,Richmond County,Blythe,http://cityofblythega.com/ +Georgia,Oconee County,Bogart,http://www.cityofbogart.com +Georgia,Thomas County,Boston,http://www.bostonga.com/ +Georgia,Morgan County,Bostwick,http://bostwickga.com +Georgia,Carroll County,Bowdon,http://www.bowdon.net/ +Georgia,Hart County,Bowersville,https://townofbowersville.com/ +Georgia,Elbert County,Bowman,http://www.cityofbowmanga.gov +Georgia,Jackson County,Braselton,http://www.braselton.net +Georgia,Haralson County,Bremen,http://www.bremenga.gov +Georgia,Decatur County,Brinson,http://georgiainfo.galileo.usg.edu/topics/historical_markers/county/decatur/brinson-side-1 +Georgia,DeKalb County,Brookhaven,http://brookhavenga.gov +Georgia,Fayette County,Brooks,http://www.brooksga.com +Georgia,Coffee County,Broxton,http://www.cityofbroxton.com/ +Georgia,Glynn County,Brunswick,http://www.brunswickga.org +Georgia,Haralson County,Buchanan,http://buchananga.com +Georgia,Gwinnett County,Buford,http://www.cityofbuford.com +Georgia,Taylor County,Butler,https://www.cityofbutlerga.com/ +Georgia,Peach County,Byron,http://byronga.com +Georgia,Grady County,Cairo,http://www.syrupcity.net +Georgia,Gordon County,Calhoun,http://www.cityofcalhoun-ga.com +Georgia,Mitchell County,Camilla,http://www.camillaga.net +Georgia,Franklin County,Canon,http://www.canongeorgia.com +Georgia,Cherokee County,Canton,http://www.cantonga.gov +Georgia,Barrow County,Carl,http://www.townofcarl.com +Georgia,Carroll County,Carrollton,http://www.carrollton-ga.gov +Georgia,Bartow County,Cartersville,http://www.cityofcartersville.org +Georgia,Floyd County,Cave Spring,http://www.cityofcavespring.com +Georgia,Polk County,Cedartown,http://cedartowngeorgia.gov/ +Georgia,Houston County,Centerville,http://www.centervillega.org +Georgia,DeKalb County,Chamblee,http://www.chambleega.com/ +Georgia,Murray County,Chatsworth,http://www.chatsworthga.gov +Georgia,Fulton County,Chattahoochee Hills,http://www.chatthillsga.us +Georgia,Habersham County,Clarkesville,http://clarkesvillega.com +Georgia,DeKalb County,Clarkston,http://www.clarkstonga.gov/ +Georgia,Evans County,Claxton,http://cityofclaxton.net/ +Georgia,Rabun County,Clayton,https://cityofclaytonga.gov/ +Georgia,Hall County,Clermont,http://www.clermontga.com +Georgia,White County,Cleveland,http://www.cityofclevelandga.org +Georgia,Bleckley County,Cochran,http://www.cityofcochran.com +Georgia,Whitfield County,Cohutta,https://cohuttaga.com/ +Georgia,Madison County,Colbert,http://www.colbertgeorgia.com +Georgia,Fulton County,College Park,http://www.collegeparkga.com +Georgia,Tattnall County,Colquitt,http://www.colquittga.org +Georgia,Muscogee County,Columbus,http://www.columbusga.gov +Georgia,Madison County,Comer,http://www.cityofcomer.com +Georgia,Jackson County,Commerce,http://www.commercega.org +Georgia,Pike County,Concord,http://www.concordga.com/ +Georgia,Rockdale County,Conyers,http://www.conyersga.com/ +Georgia,Crisp County,Cordele,http://www.cityofcordele.com +Georgia,Habersham County,Cornelia,http://corneliageorgia.org +Georgia,Newton County,Covington,http://www.cityofcovington.org +Georgia,Taliaferro County,Crawfordville,http://www.crawfordvillega.org/ +Georgia,Forsyth County,Cumming,http://www.cityofcumming.net +Georgia,Chattahoochee County,Cusseta,http://cusseta.georgia.gov/ +Georgia,Gwinnett County,Dacula,http://daculaga.gov +Georgia,Lumpkin County,Dahlonega,http://dahlonega-ga.gov +Georgia,Paulding County,Dallas,https://www.dallasga.gov/ +Georgia,Whitfield County,Dalton,http://www.cityofdalton-ga.gov/ +Georgia,Madison County,Danielsville,http://www.danielsvillega.com +Georgia,Twiggs County,Danville,http://cityofdanvillega.com/ +Georgia,McIntosh County,Darien,http://www.cityofdarienga.com +Georgia,Lowndes County,Dasher,http://www.dasherga.com +Georgia,Dawson County,Dawsonville,http://www.dawsonville-ga.gov +Georgia,DeKalb County,Decatur,http://decaturga.com +Georgia,Habersham County,Demorest,http://www.cityofdemorest.org +Georgia,Rabun County,Dillard,http://www.dillardgeorgia.com +Georgia,Colquitt County,Doerun,http://www.cityofdoerun.com +Georgia,Seminole County,Donalsonville,http://www.donalsonvillega.org/ +Georgia,DeKalb County,Doraville,http://doravillega.us +Georgia,Coffee County,Douglas,http://www.cityofdouglas.com +Georgia,Douglas County,Douglasville,http://www.douglasvillega.gov +Georgia,Laurens County,Dublin,http://www.cityofdublin.org +Georgia,Gwinnett County,Duluth,http://www.duluthga.net +Georgia,DeKalb County,Dunwoody,http://dunwoodyga.gov +Georgia,Laurens County,East Dublin,http://cityofeastdublin.org +Georgia,Fulton County,East Point,http://www.eastpointcity.org +Georgia,Dodge County,Eastman,http://cityofeastman.com +Georgia,Putnam County,Eatonton,http://www.eatontonga.us/ +Georgia,Glascock County,Edge Hill,https://edgehillga.com/ +Georgia,Elbert County,Elberton,http://www.cityofelberton.net +Georgia,Schley County,Ellaville,http://www.ellavillega.org/ +Georgia,Colquitt County,Ellenton,http://www.ellentonga.com/ +Georgia,Gilmer County,Ellijay,http://www.pickellijay.com +Georgia,Bartow County,Emerson,http://www.cityofemerson.org +Georgia,Murray County,Eton,http://www.etongeorgia.com +Georgia,Bartow County,Euharlee,http://www.euharlee.com +Georgia,Fulton County,Fairburn,http://www.fairburn.com/ +Georgia,Gordon County,Fairmount,http://fairmountga.gov +Georgia,Fayette County,Fayetteville,http://www.fayetteville-ga.gov +Georgia,Ben Hill County,Fitzgerald,http://www.fitzgeraldga.org +Georgia,Liberty County,Flemington,http://cityofflemington.org +Georgia,Butts County,Flovilla,http://cityofflovilla.org/ +Georgia,Hall County,Flowery Branch,https://www.flowerybranchga.org/ +Georgia,Charlton County,Folkston,http://www.folkston.com +Georgia,Clayton County,Forest Park,http://forestparkga.org/ +Georgia,Monroe County,Forsyth,http://www.cityofforsyth.com +Georgia,Clay County,Fort Gaines,http://www.fortgaines.com +Georgia,Catoosa County,Fort Oglethorpe,http://www.fortogov.com +Georgia,Peach County,Fort Valley,http://fortvalleyga.org/ +Georgia,Heard County,Franklin,http://www.FranklinGeorgia.com +Georgia,Franklin County,Franklin Springs,https://www.cityoffranklinsprings.com/ +Georgia,Hall County,Gainesville,http://www.gainesville.org +Georgia,Chatham County,Garden City,http://www.gardencityga.org +Georgia,Meriwether County,Gay,https://gayga.gov +Georgia,Hall County,Gillsville,http://gillsvillega.com/ +Georgia,Burke County,Girard,http://georgia.gov/cities-counties/girard +Georgia,Tattnall County,Glennville,http://www.cityofglennville.com/ +Georgia,Walton County,Good Hope,https://goodhopega.com +Georgia,Wilkinson County,Gordon,http://cityofgordonga.org/ +Georgia,Appling County,Graham,https://cityofgrahamga.com/ +Georgia,Coweta County,Grantville,http://www.grantvillega.org +Georgia,Jones County,Gray,http://grayga.us +Georgia,Gwinnett County,Grayson,http://www.cityofgrayson.org +Georgia,Greene County,Greensboro,http://www.greensboroga.gov +Georgia,Meriwether County,Greenville,http://www.cityofgreenvillega.com +Georgia,Spalding County,Griffin,http://www.cityofgriffin.com/ +Georgia,Columbia County,Grovetown,http://cityofgrovetown.com +Georgia,Effingham County,Guyton,http://www.cityofguyton.com +Georgia,Lowndes County,Hahira,http://www.hahiraga.gov +Georgia,Harris County,Hamilton,http://hamiltoncityhall.net +Georgia,Henry County,Hampton,http://hamptonga.gov +Georgia,Fulton County,Hapeville,http://www.hapeville.org/ +Georgia,Columbia County,Harlem,http://harlemga.org +Georgia,Hart County,Hartwell,http://www.hartwell-ga.info +Georgia,Pulaski County,Hawkinsville,https://hawkinsville-pulaski.org/ +Georgia,Jeff Davis County,Hazlehurst,http://www.hazlehurstga.gov +Georgia,White County,Helen,https://www.cityofhelen.org/ +Georgia,Towns County,Hiawassee,http://hiawasseega.gov/ +Georgia,Liberty County,Hinesville,http://www.cityofhinesville.org +Georgia,Paulding County,Hiram,http://www.cityofhiramga.gov/ +Georgia,Troup County,Hogansville,http://www.cityofhogansville.org/ +Georgia,Cherokee County,Holly Springs,http://www.hollyspringsga.us +Georgia,Clinch County,Homerville,http://www.cityofhomerville.com/ +Georgia,Jackson County,Hoschton,http://www.cityofhoschton.com +Georgia,Butts County,Jackson,http://www.cityofjacksonga.com +Georgia,Early County,Jakin,http://www.ircusa.com/jakin/ +Georgia,Pickens County,Jasper,https://www.jasper-ga.us/ +Georgia,Jackson County,Jefferson,http://www.cityofjeffersonga.com +Georgia,Twiggs County,Jeffersonville,https://cityofjeffersonville.org/ +Georgia,Butts County,Jenkinsburg,http://www.cityofjenkinsburg.com +Georgia,Wayne County,Jesup,http://www.jesupga.gov/ +Georgia,Fulton County,Johns Creek,http://www.johnscreekga.gov +Georgia,Clayton County,Jonesboro,http://jonesboroga.com +Georgia,Cobb County,Kennesaw,http://www.kennesaw-ga.gov +Georgia,Burke County,Keysville,http://keysvillega.org +Georgia,Camden County,Kingsland,http://www.visitkingsland.com/ +Georgia,Bartow County,Kingston,http://www.cityofkingstonga.org +Georgia,Johnson County,Kite,http://kite.georgia.gov/ +Georgia,Walker County,LaFayette,http://cityoflafayettega.org +Georgia,Troup County,LaGrange,http://www.lagrange-ga.org/ +Georgia,Clayton County,Lake City,http://www.lakecityga.net +Georgia,Lowndes County,Lake Park,http://cityoflakeparkga.com +Georgia,Franklin County,Lavonia,https://www.lavoniaga.gov +Georgia,Gwinnett County,Lawrenceville,http://www.lawrencevillega.org +Georgia,Lee County,Leesburg,http://cityofleesburgga.com +Georgia,Cook County,Lenox,https://www.cityoflenox.municipalimpact.com/ +Georgia,Oglethorpe County,Lexington,https://lexingtonga.org/ +Georgia,Gwinnett County,Lilburn,http://www.cityoflilburn.com +Georgia,DeKalb County,Lithonia,http://cityoflithoniaga.org +Georgia,Henry County,Locust Grove,http://www.locustgrove-ga.gov +Georgia,Walton County,Loganville,http://www.loganville-ga.gov +Georgia,Walker County,Lookout Mountain,https://www.lookoutmtnga.com/ +Georgia,Jefferson County,Louisville,http://cityoflouisvillegeorgia.com +Georgia,Clayton County,Lovejoy,http://www.cityoflovejoy.com +Georgia,Hall County,Lula,https://www.cityoflula.com/ +Georgia,Stewart County,Lumpkin,http://cityoflumpkin.org/ +Georgia,Chattooga County,Lyerly,http://www.townoflyerly.com +Georgia,Toombs County,Lyons,https://lyonsga.org/ +Georgia,Bibb County,Macon,http://maconbibb.us/ +Georgia,Morgan County,Madison,http://madisonga.com +Georgia,Meriwether County,Manchester,http://manchester-ga.gov +Georgia,Newton County,Mansfield,http://www.mansfieldga.gov/ +Georgia,Cobb County,Marietta,http://www.mariettaga.gov +Georgia,Macon County,Marshallville,http://www.cityofmarshallville.org +Georgia,Stephens County,Martin,http://www.townofmartin.com +Georgia,Banks County,Maysville,http://cityofmaysvillega.org +Georgia,Fannin County,McCaysville,http://cityofmccaysvillega.gov +Georgia,Henry County,McDonough,http://www.mcdonoughga.org +Georgia,Wilkinson County,McIntyre,http://www.mcintyrega.com/ +Georgia,Telfair County,McRae–Helena,http://mcrae-helena.org +Georgia,Candler County,Metter,http://www.metter-candler.com +Georgia,Liberty County,Midway,http://historicmidway.com +Georgia,Baldwin County,Milledgeville,http://milledgevillega.us +Georgia,Lamar County,Milner,http://milnerga.com +Georgia,Fulton County,Milton,http://www.cityofmiltonga.us +Georgia,Glascock County,Mitchell,https://mitchellgeorgia.com/ +Georgia,Walton County,Monroe,http://www.monroega.com/ +Georgia,Macon County,Montezuma,http://www.montezuma-ga.org +Georgia,Jasper County,Monticello,http://www.monticelloga.org +Georgia,Coweta County,Moreland,http://morelandgausa.com/ +Georgia,Clayton County,Morrow,http://cityofmorrow.com +Georgia,Brooks County,Morven,http://georgia.gov/cities-counties/morven +Georgia,Colquitt County,Moultrie,http://www.moultriega.com/ +Georgia,Habersham County,Mount Airy,http://townofmtairy.com +Georgia,Montgomery County,Mount Vernon,http://mtvernonga.org +Georgia,Carroll County,Mount Zion,http://www.cityofmountzion.com +Georgia,Fulton County,Mountain Park,http://mountainparkgov.com/ +Georgia,Berrien County,Nashville,http://www.cityofnashvillega.net +Georgia,Newton County,Newborn,http://newbornga.com +Georgia,Screven County,Newington,https://www.newingtonga.com/ +Georgia,Coweta County,Newnan,http://newnanga.gov +Georgia,Jackson County,Nicholson,http://nicholson-ga.com +Georgia,Gwinnett County,Norcross,http://www.norcrossga.net +Georgia,Colquitt County,Norman Park,https://normanparkga.gov/ +Georgia,Oconee County,North High Shoals,http://northhighshoals.org/ +Georgia,Emanuel County,Oak Park,http://www.oakparkga.org +Georgia,Hall County,Oakwood,http://www.cityofoakwood.net +Georgia,Irwin County,Ocilla,http://www.cityofocillaga.net/ +Georgia,Wayne County,Odum,http://odumgeorgia.com/ +Georgia,Macon County,Oglethorpe,http://www.cityofoglethorpe.com +Georgia,Newton County,Oxford,https://oxfordgeorgia.org/ +Georgia,Fulton County,Palmetto,http://www.citypalmetto.com +Georgia,Terrell County,Parrott,http://www.parrottga.com +Georgia,Pierce County,Patterson,https://thecityofpatterson.com/ +Georgia,Thomas County,Pavo,http://cityofpavo.com/ +Georgia,Fayette County,Peachtree City,http://www.peachtree-city.org +Georgia,Gwinnett County,Peachtree Corners,http://peachtreecornersga.gov +Georgia,Atkinson County,Pearson,http://www.pearson-ga.com +Georgia,Mitchell County,Pelham,http://cityofpelhamga.com +Georgia,Bryan County,Pembroke,https://www.pembrokega.net/ +Georgia,Jackson County,Pendergrass,http://cityofpendergrass.com +Georgia,Houston County,Perry,http://www.perry-ga.gov +Georgia,DeKalb County,Pine Lake,https://www.pinelakega.net/ +Georgia,Harris County,Pine Mountain,http://pinemountainga.org +Georgia,Dooly County,Pinehurst,https://cityofpinehurstga.com/ +Georgia,Sumter County,Plains,http://www.plainsgeorgia.org/ +Georgia,Gordon County,Plainville,https://plainvillega.com/ +Georgia,Chatham County,Pooler,http://pooler-ga.gov +Georgia,Chatham County,Port Wentworth,http://www.cityofportwentworth.com +Georgia,Newton County,Porterdale,http://www.cityofporterdale.com/ +Georgia,Worth County,Poulan,http://www.cityofpoulan.com/ +Georgia,Cobb County,Powder Springs,http://www.cityofpowdersprings.org +Georgia,Candler County,Pulaski,http://georgiainfo.galileo.usg.edu/topics/historical_markers/county/candler/pulaski-georgia +Georgia,Brooks County,Quitman,http://www.cityofquitmanga.com +Georgia,Tattnall County,Reidsville,https://cityofreidsvillega.com/ +Georgia,Lowndes County,Remerton,http://cityofremerton.com/ +Georgia,Taylor County,Reynolds,http://reynoldsga.com/ +Georgia,Liberty County,Riceboro,https://www.cityofriceboro.org/ +Georgia,Bryan County,Richmond Hill,http://www.richmondhill-ga.gov +Georgia,Effingham County,Rincon,http://www.cityofrincon.com +Georgia,Catoosa County,Ringgold,http://www.cityofringgoldga.gov +Georgia,Clayton County,Riverdale,http://www.riverdalega.gov +Georgia,Crawford County,Roberta,http://cityofroberta.com +Georgia,Polk County,Rockmart,http://www.rockmart-ga.gov/ +Georgia,Floyd County,Rome,https://romega.gov/ +Georgia,Walker County,Rossville,http://www.rossvillegagov.us/ +Georgia,Fulton County,Roswell,http://www.roswellgov.com +Georgia,Franklin County,Royston,http://cityofroyston.com +Georgia,Morgan County,Rutledge,http://www.rutledgega.us +Georgia,Washington County,Sandersville,http://www.sandersville.net/ +Georgia,Fulton County,Sandy Springs,http://www.sandyspringsga.gov +Georgia,Chatham County,Savannah,http://www.savannahga.gov/ +Georgia,Wayne County,Screven,http://www.cityofscreven.com/ +Georgia,Coweta County,Senoia,http://www.senoia.com +Georgia,Coweta County,Sharpsburg,http://www.townofsharpsburg.com/ +Georgia,Rabun County,Sky Valley,http://www.skyvalleyga.com/ +Georgia,Lee County,Smithville,https://georgia.gov/cities-counties/smithville +Georgia,Cobb County,Smyrna,http://www.smyrnaga.gov +Georgia,Gwinnett County,Snellville,http://www.snellville.org +Georgia,Walton County,Social Circle,https://socialcirclega.gov/visitors/welcome/ +Georgia,Treutlen County,Soperton,http://www.soperton-treutlen.org/soperton.html +Georgia,Fulton County,South Fulton,http://cityofsouthfultonga.gov/ +Georgia,Hancock County,Sparta,https://www.cityofsparta.org/ +Georgia,Effingham County,Springfield,http://www.cityofspringfield.com/ +Georgia,Camden County,St. Marys,http://www.stmarysga.gov/ +Georgia,Bulloch County,Statesboro,http://www.statesboroga.gov +Georgia,Barrow County,Statham,http://www.cityofstatham.com +Georgia,Henry County,Stockbridge,http://www.cityofstockbridge.com +Georgia,DeKalb County,Stone Mountain,http://www.stonemountaincity.org/ +Georgia,DeKalb County,Stonecrest,https://www.stonecrestga.gov/ +Georgia,Gwinnett County,Sugar Hill,http://www.cityofsugarhill.com +Georgia,Chattooga County,Summerville,http://www.summervillega.org/ +Georgia,Gwinnett County,Suwanee,http://www.suwanee.com +Georgia,Emanuel County,Swainsboro,http://cityofswainsboro.org +Georgia,Turner County,Sycamore,https://www.sycamorega.com +Georgia,Screven County,Sylvania,http://www.citysylvaniaga.net/ +Georgia,Worth County,Sylvester,http://www.cityofsylvester.com/ +Georgia,Talbot County,Talbotton,https://talbottonga.org/ +Georgia,Pickens County,Talking Rock,http://talkingrockga.com/ +Georgia,Haralson County,Tallapoosa,http://tallapoosaga.gov +Georgia,Rabun County,Tallulah Falls,http://www.tallulahfallsga.gov/ +Georgia,Jackson County,Talmo,http://www.city-data.com/city/Talmo-Georgia.html +Georgia,Carroll County,Temple,http://www.templega.us +Georgia,Washington County,Tennille,https://www.tennille-ga.gov/ +Georgia,Upson County,Thomaston,http://www.cityofthomaston.com/ +Georgia,Thomas County,Thomasville,http://www.thomasvillega.com +Georgia,McDuffie County,Thomson,https://www.thomson-mcduffie.gov +Georgia,Chatham County,Thunderbolt,http://www.thunderboltga.org/ +Georgia,Tift County,Tifton,http://www.tifton.net +Georgia,Stephens County,Toccoa,http://www.cityoftoccoa.com +Georgia,Dade County,Trenton,https://trentonga.gov/ +Georgia,Chattooga County,Trion,http://www.townoftrion.net/ +Georgia,DeKalb County,Tucker,http://tuckerga.gov/ +Georgia,Coweta County,Turin,https://townofturin.com/ +Georgia,Emanuel County,Twin City,https://www.twincityga.com +Georgia,Chatham County,Tybee Island,http://www.cityoftybee.org +Georgia,County Tyrone,Tyrone,http://tyrone.org +Georgia,Dooly County,Unadilla,https://cityofunadillaga.com/ +Georgia,Fulton County,Union City,http://www.unioncityga.org +Georgia,Greene County,Union Point,http://www.unionpointga.org +Georgia,Lowndes County,Valdosta,http://www.valdostacity.com +Georgia,Whitfield County,Varnell,http://cityofvarnell.com/ +Georgia,Toombs County,Vidalia,http://www.vidaliaga.com +Georgia,Dooly County,Vienna,http://www.cityofvienna.org +Georgia,Carroll County,Villa Rica,https://www.villarica.gov +Georgia,Haralson County,Waco,http://www.wacoga.net +Georgia,Cherokee County,Waleska,http://cityofwaleska.com +Georgia,Walton County,Walnut Grove,https://www.walnutgrovegeorgia.com/ +Georgia,Liberty County,Walthourville,http://cityofwalthourville.com +Georgia,Meriwether County,Warm Springs,http://warmspringsga.com +Georgia,Houston County,Warner Robins,http://www.wrga.gov/ +Georgia,Warren County,Warrenton,https://www.warrentonga.gov/ +Georgia,Wilkes County,Washington,http://cityofwashingtonga.gov +Georgia,Oconee County,Watkinsville,http://cityofwatkinsville.com/ +Georgia,Harris County,Waverly Hall,http://waverlyhallga.gov/ +Georgia,Ware County,Waycross,http://www.waycrossga.com +Georgia,Burke County,Waynesboro,http://www.waynesboroga.com +Georgia,Troup County,West Point,http://www.cityofwestpointga.com +Georgia,Bartow County,White,http://www.cityofwhitega.com +Georgia,Carroll County,Whitesburg,http://www.whitesburgcity.com +Georgia,Atkinson County,Willacoochee,http://www.willacoochee.com +Georgia,Pike County,Williamson,https://cityofwilliamsonga.org/ +Georgia,Barrow County,Winder,http://www.cityofwinder.com +Georgia,Clarke County,Winterville,http://www.cityofwinterville.com/ +Georgia,Camden County,Woodbine,http://woodbinegeorgia.net +Georgia,Meriwether County,Woodbury,http://www.cityofwoodburyga.gov +Georgia,Cherokee County,Woodstock,http://www.woodstockga.gov +Georgia,Fayette County,Woolsey,http://woolseyga.com/ +Georgia,Jefferson County,Wrens,https://cityofwrens.com/ +Georgia,Towns County,Young Harris,http://www.youngharrisga.net/ +Georgia,Pike County,Zebulon,http://cityofzebulonga.us/ +Hawaii,Honolulu County,Ahuimanu,http://www.ahuimanu.k12.hi.us/ +Hawaii,Honolulu County,Honolulu,http://www.honolulu.gov/ +Hawaii,Maui County,Ocean Pointe,http://www.ocean-pointe.com/home.html +Idaho,Bingham County,Aberdeen,http://www.aberdeenidaho.us/ +Idaho,Cassia County,Albion,http://www.albionidaho.org/ +Idaho,Power County,American Falls,http://www.cityofamericanfalls.com/ +Idaho,Bonneville County,Ammon,http://www.ci.ammon.id.us/ +Idaho,Fremont County,Ashton,http://www.cityofashton.com/ +Idaho,Kootenai County,Athol,http://cityofathol.us/ +Idaho,Caribou County,Bancroft,http://www.cityofbancroft.com/ +Idaho,Blaine County,Bellevue,http://www.bellevueidaho.us/ +Idaho,Bingham County,Blackfoot,http://www.cityofblackfoot.org/ +Idaho,Bear Lake County,Bloomington,http://bloomingtonidaho.net/ +Idaho,Ada County,Boise,https://www.cityofboise.org +Idaho,Boundary County,Bonners Ferry,https://bonnersferry.id.gov/ +Idaho,Latah County,Bovill,https://www.cityofbovill.net/ +Idaho,Twin Falls County,Buhl,http://www.cityofbuhl.us/ +Idaho,Cassia County,Burley,http://burleyidaho.org +Idaho,Canyon County,Caldwell,http://www.cityofcaldwell.com +Idaho,Washington County,Cambridge,http://www.cambridge.id.gov/ +Idaho,Blaine County,Carey,http://cityofcarey.org/ +Idaho,Valley County,Cascade,http://cascadeid.us/ +Idaho,Bannock County,Chubbuck,http://www.cityofchubbuck.us +Idaho,Kootenai County,Coeur d'Alene,http://cdaid.org +Idaho,Adams County,Council,http://www.councilidaho.org +Idaho,Kootenai County,Dalton Gardens,http://daltongardens.govoffice.com +Idaho,Latah County,Deary,http://www.dearyidaho.com/ +Idaho,Lincoln County,Dietrich,http://www.dietrichidaho.com/ +Idaho,Valley County,Donnelly,http://www.cityofdonnelly.org +Idaho,Bonner County,Dover,https://cityofdover.id.gov/ +Idaho,Bannock County,Downey,https://www.downeyidaho.us +Idaho,Teton County,Driggs,http://www.driggs.govoffice.com/ +Idaho,Clark County,Dubois,http://www.duboisidaho.com +Idaho,Ada County,Eagle,http://www.cityofeagle.org/ +Idaho,Gem County,Emmett,http://www.cityofemmett.org/ +Idaho,Camas County,Fairfield,http://cityoffairfieldidaho.com/ +Idaho,Kootenai County,Fernan Lake Village,http://www.fernanvillage.org +Idaho,Twin Falls County,Filer,http://www.cityoffiler.com/ +Idaho,Franklin County,Franklin,http://franklinidaho.org/ +Idaho,Payette County,Fruitland,http://fruitland.org/ +Idaho,Ada County,Garden City,https://gardencityidaho.org/ +Idaho,Latah County,Genesee,http://www.cityofgenesee.com/ +Idaho,Bear Lake County,Georgetown,http://georgetown.id.gov/ +Idaho,Elmore County,Glenns Ferry,http://glennsferryidaho.org +Idaho,Gooding County,Gooding,http://www.goodingidaho.org +Idaho,Owyhee County,Grand View,http://www.grandview.id.gov/ +Idaho,Idaho County,Grangeville,http://www.grangeville.us/ +Idaho,Canyon County,Greenleaf,http://www.greenleaf-idaho.us/ +Idaho,Blaine County,Hailey,http://www.haileycityhall.org +Idaho,Twin Falls County,Hansen,https://cityofhansen.org/ +Idaho,Kootenai County,Harrison,https://www.cityofharrisonid.com/ +Idaho,Kootenai County,Hauser,http://www.cityofhauser.org +Idaho,Kootenai County,Hayden,http://www.cityofhaydenid.us +Idaho,Minidoka County,Heyburn,http://heyburn.id.gov +Idaho,Owyhee County,Homedale,http://www.cityofhomedale.com/ +Idaho,Bonneville County,Idaho Falls,https://www.idahofallsidaho.gov/ +Idaho,Bannock County,Inkom,https://inkomcity.org +Idaho,Bonneville County,Iona,http://www.cityofiona.org/ +Idaho,Jerome County,Jerome,http://www.ci.jerome.id.us/ +Idaho,Latah County,Juliaetta,http://www.kendrick-juliaetta.org/ +Idaho,Lewis County,Kamiah,http://www.kamiahchamber.com/ +Idaho,Shoshone County,Kellogg,http://kellogg.id.gov/ +Idaho,Latah County,Kendrick,http://www.kendrick-juliaetta.org/ +Idaho,Blaine County,Ketchum,http://ketchumidaho.org/ +Idaho,Twin Falls County,Kimberly,http://www.cityofkimberly.org/ +Idaho,Kootenai County,Kootenai,http://cityofkootenai.org +Idaho,Ada County,Kuna,http://kunacity.id.gov/ +Idaho,Nez Perce County,Lapwai,http://cityoflapwai.com +Idaho,Nez Perce County,Lewiston,http://www.cityoflewiston.org +Idaho,Jefferson County,Lewisville,http://www.cityoflewisville.org/ +Idaho,Custer County,Mackay,http://mackayidaho-city.com/ +Idaho,Oneida County,Malad City,http://www.maladidaho.org +Idaho,Owyhee County,Marsing,https://cityofmarsing.org/ +Idaho,Valley County,McCall,http://www.mccall.id.us +Idaho,Canyon County,Melba,http://www.cityofmelba.org/ +Idaho,Jefferson County,Menan,http://www.cityofmenan.org/ +Idaho,Ada County,Meridian,http://www.meridiancity.org +Idaho,Canyon County,Middleton,http://www.middleton.id.gov/ +Idaho,Washington County,Midvale,http://midvaleidaho.com/ +Idaho,Bear Lake County,Montpelier,http://montpelier.id.gov/ +Idaho,Latah County,Moscow,http://www.ci.moscow.id.us/ +Idaho,Elmore County,Mountain Home,http://mountain-home.us +Idaho,Canyon County,Nampa,http://www.cityofnampa.us/ +Idaho,Adams County,New Meadows,http://www.newmeadowsidaho.us/ +Idaho,Payette County,New Plymouth,http://www.npidaho.com/ +Idaho,Fremont County,Newdale,https://cityofnewdale.org/ +Idaho,Lewis County,Nezperce,http://www.cityofnezperce.com/ +Idaho,Canyon County,Notus,http://notusidaho.org/index.html +Idaho,Clearwater County,Orofino,http://www.cityoforofino.org/ +Idaho,Canyon County,Parma,http://www.cityofparma.org/ +Idaho,Minidoka County,Paul,http://cityofpaul.org +Idaho,Payette County,Payette,http://payette.govoffice.com +Idaho,Clearwater County,Pierce,http://www.cityofpierce.com/ +Idaho,Boise County,Placerville,https://placervilleidaho.org/ +Idaho,Benewah County,Plummer,http://www.plummerid.govoffice3.com/ +Idaho,Bannock County,Pocatello,https://pocatello.gov/ +Idaho,Bonner County,Ponderay,http://www.cityofponderay.org/ +Idaho,Kootenai County,Post Falls,http://www.postfallsidaho.org/ +Idaho,Latah County,Potlatch,http://www.cityofpotlatch.org/ +Idaho,Franklin County,Preston,http://www.prestonidaho.net/ +Idaho,Bonner County,Priest River,http://priestriver-id.gov/ +Idaho,Kootenai County,Rathdrum,http://www.rathdrum.org/ +Idaho,Madison County,Rexburg,http://www.rexburg.org +Idaho,Lincoln County,Richfield,http://www.cityofrichfield.us/ +Idaho,Jefferson County,Rigby,http://www.cityofrigby.com/ +Idaho,Idaho County,Riggins,http://www.rigginsidaho.com/ +Idaho,Minidoka County,Rupert,http://www.rupert-idaho.com +Idaho,Lemhi County,Salmon,http://www.cityofsalmon.com/ +Idaho,Bonner County,Sandpoint,http://www.cityofsandpoint.com/ +Idaho,Bingham County,Shelley,https://ci.shelley.id.us/ +Idaho,Lincoln County,Shoshone,http://www.shoshonecity.com/ +Idaho,Caribou County,Soda Springs,http://www.sodaspringsid.com/ +Idaho,Kootenai County,Spirit Lake,http://www.spiritlakeid.gov/ +Idaho,Fremont County,St. Anthony,http://www.cityofstanthony.org/ +Idaho,Bear Lake County,St. Charles,http://stcharlesidaho.org/ +Idaho,Custer County,Stanley,http://www.stanley.id.gov/ +Idaho,Ada County,Star,http://staridaho.org/ +Idaho,Madison County,Sugar City,http://www.sugarcityidaho.gov +Idaho,Blaine County,Sun Valley,http://www.sunvalley.govoffice.com/ +Idaho,Bonneville County,Swan Valley,http://www.cityofswanvalley.com +Idaho,Teton County,Tetonia,https://tetoniaidaho.com/ +Idaho,Latah County,Troy,http://www.troyidaho.net/ +Idaho,Twin Falls County,Twin Falls,http://www.tfid.org +Idaho,Bonneville County,Ucon,http://www.cityofucon.us/ +Idaho,Teton County,Victor,https://www.victoridaho.gov +Idaho,Shoshone County,Wallace,http://wallace.id.gov +Idaho,Shoshone County,Wardner,http://www.wardner.id.gov/ +Idaho,Clearwater County,Weippe,http://www.weippe.com/ +Idaho,Washington County,Weiser,https://cityofweiser.net/ +Idaho,Gooding County,Wendell,https://wendell.id.gov/ +Idaho,Idaho County,White Bird,http://www.visitwhitebird.com/ +Idaho,Canyon County,Wilder,http://cityofwilder.org/ +Illinois,Addison Township,Addison,http://www.addisonadvantage.org +Illinois,Clinton County,Albers,http://www.albersil.com/ +Illinois,Mercer Township,Aledo,http://www.aledoil.org +Illinois,Algonquin Township,Algonquin,http://www.algonquin.org +Illinois,Alhambra Township,Alhambra,http://villageofalhambra.com +Illinois,Henry County,Alpha,http://villageofalpha.org/ +Illinois,Worth Township,Alsip,http://villageofalsip.org +Illinois,Effingham County,Altamont,http://www.altamontil.net +Illinois,Madison County,Alton,https://www.cityofaltonil.com/ +Illinois,Walnut Grove Township,Altona,http://altonaillinois.weebly.com/ +Illinois,South Ross Township,Alvin,https://villageofalvin.com/ +Illinois,Lee County,Amboy,https://cityofamboy.com/ +Illinois,Rock Island County,Andalusia,https://villageofandalusiail.org/ +Illinois,Henry County,Andover,http://www.andoveril.org/ +Illinois,Henry County,Anna,https://cityofanna.org/ +Illinois,Henry County,Annawan,https://www.annawanil.org/ +Illinois,Antioch Township,Antioch,http://www.antioch.il.gov +Illinois,Arcola Township,Arcola,http://www.arcolaillinois.org/ +Illinois,Friends Creek Township,Argenta,http://argentail.com +Illinois,Wheeling Township,Arlington Heights,https://www.vah.com/ +Illinois,Aroma Township,Aroma Park,https://villageofaromapark.com/ +Illinois,Bourbon Township,Arthur,http://www.arthur-il.gov +Illinois,Ashkum Township,Ashkum,http://www.ashkum.net +Illinois,Cass County,Ashland,https://www.ashlandil.com/ +Illinois,Lee County,Ashton,http://www.ashtonusa.com/ +Illinois,Christian County,Assumption,https://cityofassumption.org +Illinois,Menard County,Athens,http://www.athensil.com +Illinois,Henry County,Atkinson,http://www.atkinsonil.org/ +Illinois,Logan County,Atlanta,http://www.atlantaillinois.org/ +Illinois,Sangamon County,Auburn,http://www.auburnillinois.us/ +Illinois,Aurora Township,Aurora,http://www.aurora-il.org +Illinois,Clinton County,Aviston,http://www.avistonil.org +Illinois,West Deerfield Township,Bannockburn,http://www.bannockburn.org +Illinois,Barrington Township,Barrington,http://www.barrington-il.gov +Illinois,Barrington Township,Barrington Hills,http://barringtonhills-il.gov +Illinois,Barry Township,Barry,http://www.barryil.org +Illinois,Clinton County,Bartelso,http://bartelsoil.org +Illinois,Hanover Township,Bartlett,http://village.bartlett.il.us +Illinois,Limestone Township,Bartonville,https://bartonville.org/ +Illinois,Batavia Township,Batavia,http://www.cityofbatavia.net +Illinois,Lake County,Beach Park,http://www.villageofbeachpark.com +Illinois,Cass County,Beardstown,http://cityofbeardstown.org/ +Illinois,Clinton County,Beckemeyer,http://beckemeyeril.gov/ +Illinois,Lyons Township,Bedford Park,http://www.villageofbedfordpark.com +Illinois,Will County,Beecher,http://www.villageofbeecher.org +Illinois,Danville Township,Belgium,http://www.belgiumillinois.us/ +Illinois,St. Clair County,Belleville,http://belleville.net/ +Illinois,Peoria County,Bellevue,http://villageofbellevueil.com/ +Illinois,Proviso Township,Bellwood,http://www.vil.bellwood.il.us +Illinois,Boone County,Belvidere,http://www.ci.belvidere.il.us/ +Illinois,Addison Township,Bensenville,https://www.bensenville.il.us/ +Illinois,Woodford County,Benson,https://www.villageofbenson.com/ +Illinois,Franklin County,Benton,https://bentonil.com/ +Illinois,Proviso Township,Berkeley,http://www.berkeley.il.us +Illinois,Berwyn Township,Berwyn,http://www.berwyn-il.gov +Illinois,Wood River Township,Bethalto,http://www.bethalto.com +Illinois,Marrowbone Township,Bethany,http://www.villageofbethany.com +Illinois,Big Rock Township,Big Rock,http://www.villageofbigrock.us +Illinois,Henry County,Bishop Hill,http://www.bishophill.com/ +Illinois,Bloomingdale Township,Bloomingdale,https://www.villageofbloomingdale.org/ +Illinois,McLean County,Bloomington,http://www.cityblm.org +Illinois,Bremen Township,Blue Island,http://www.blueisland.org +Illinois,DuPage Township,Bolingbrook,http://www.bolingbrook.com +Illinois,Salina Township,Bonfield,http://www.villageofbonfield.org +Illinois,Spring Garden Township,Bonnie,http://www.villageofbonnie.com/ +Illinois,Kankakee County,Bourbonnais,http://www.villageofbourbonnais.com/ +Illinois,Hancock County,Bowen,https://www.villageofbowen.com/ +Illinois,Stark County,Bradford,http://bradfordil.com +Illinois,Bourbonnais Township,Bradley,http://www.bradleyil.org +Illinois,Will County,Braidwood,https://braidwood.us/ +Illinois,Clinton County,Breese,http://www.breese.org/ +Illinois,Lyons Township,Bridgeview,http://www.bridgeview-il.gov +Illinois,Brighton Township,Brighton,http://www.brightonil.com +Illinois,Peoria County,Brimfield,https://www.brimfieldil.org/ +Illinois,Proviso Township,Broadview,http://www.broadview-il.gov +Illinois,Embarrass Township,Brocton,https://www.brocton.org/ +Illinois,Lyons Township,Brookfield,http://www.BrookfieldIL.gov +Illinois,St. Clair County,Brooklyn,https://thevillageofbrooklyn.org/ +Illinois,Vernon Township,Buffalo Grove,http://www.vbg.org +Illinois,Cook County Board of Commissioners,Bull Valley,http://www.thevillageofbullvalley.com/ +Illinois,Bunker Hill Township,Bunker Hill,http://www.cityofbunkerhillil.org +Illinois,Stickney Township,Burbank,http://www.burbankil.gov +Illinois,Burlington Township,Burlington,http://www.vil.burlington.il.us +Illinois,Thornton Township,Burnham,https://burnham-il.gov/ +Illinois,Downers Grove Township,Burr Ridge,https://www.burr-ridge.gov/ +Illinois,Bushnell Township,Bushnell,http://bushnell.illinois.gov +Illinois,Byron Township,Byron,http://byron.govoffice.com +Illinois,St. Clair County,Cahokia,http://www.cahokiaillinois.org +Illinois,Alexander County,Cairo,http://www.cairodevelopment.com/ +Illinois,Boone County,Caledonia,http://www.villageofcaledonia.com/ +Illinois,Thornton Township,Calumet City,http://www.calumetcity.org +Illinois,Calumet Township,Calumet Park,http://calumetparkvillage.org +Illinois,Camargo Township,Camargo,http://camargoinfo.com/ +Illinois,Cambridge Township,Cambridge,https://www.cambridgeil.org/ +Illinois,Camp Point Township,Camp Point,https://www.camppoint.com/ +Illinois,Campton Township,Campton Hills,http://villageofcamptonhills.org +Illinois,Canton Township,Canton,http://www.cantonillinois.org +Illinois,Boone County,Capron,http://www.villageofcapron.net/ +Illinois,Rock Island County,Carbon Cliff,http://www.carbon-cliff.com +Illinois,Grundy County,Carbon Hill,https://villageofcarbonhill-il.gov/ +Illinois,Carterville Precinct,Carbondale,http://www.explorecarbondale.com +Illinois,Carlinville Township,Carlinville,http://www.cityofcarlinville.com +Illinois,Clinton County,Carlyle,https://carlylelake.com/ +Illinois,White County,Carmi,http://www.cityofcarmi.com +Illinois,Bloomingdale Township,Carol Stream,http://www.carolstream.org +Illinois,Kane County,Carpentersville,http://www.cville.org +Illinois,Saline County,Carrier Mills,http://www.cmsf.saline.k12.il.us/main.html +Illinois,Greene County,Carrollton,http://www.carrolltonil.net +Illinois,Williamson County,Carterville,https://www.visitcarterville.com/ +Illinois,Carthage Township,Carthage,http://carthage-il.com +Illinois,Algonquin Township,Cary,http://www.caryillinois.com/ +Illinois,Casey Township,Casey,http://www.cityofcaseyil.org/ +Illinois,St. Clair County,Caseyville,http://www.caseyville.org +Illinois,Catlin Township,Catlin,http://catlinil.com/ +Illinois,Centralia Township,Central City,http://www.centralcityil.com +Illinois,Centralia Township,Centralia,http://cityofcentralia.org +Illinois,St. Clair County,Centreville,http://www.cityofcentreville-il.com/ +Illinois,Cerro Gordo Township,Cerro Gordo,http://www.fathill.com +Illinois,Carroll County,Chadwick,http://www.chadwickil.com/ +Illinois,Champaign County,Champaign,http://www.champaignil.gov +Illinois,Channahon Township,Channahon,https://www.channahon.org/ +Illinois,Morgan County,Chapin,http://www.villageofchapin.com +Illinois,Charleston Township,Charleston,http://www.charlestonillinois.org/ +Illinois,Chatham Township,Chatham,https://www.chathamil.net/ +Illinois,Chatsworth Township,Chatsworth,https://www.chatsworthil.gov/ +Illinois,Chebanse Township,Chebanse,http://www.chebanseillinois.org +Illinois,Chenoa Township,Chenoa,http://www.chenoail.org +Illinois,Cherry Valley Township,Cherry Valley,http://www.cherryvalley.org/ +Illinois,Randolph County,Chester,http://www.chesterill.com +Illinois,Cook County,Chicago,http://chicago.gov +Illinois,Bloom Township,Chicago Heights,http://cityofchicagoheights.org +Illinois,Worth Township,Chicago Ridge,http://chicagoridge.org +Illinois,Peoria County,Chillicothe,http://www.cityofchillicotheil.com +Illinois,Ross Township,Chrisman,https://www.cityofchrisman.com/ +Illinois,Franklin County,Christopher,http://www.cityofchristopher.org/ +Illinois,Cicero Township,Cicero,http://www.thetownofcicero.com +Illinois,Pigeon Grove Township,Cissna Park,https://cissnapark.com/ +Illinois,Downers Grove Township,Clarendon Hills,https://www.clarendonhills.us/ +Illinois,Clay County,Clay City,https://www.villageofclaycityil.com/ +Illinois,Clayton Township,Clayton,https://villageofclayton.municipalimpact.com/ +Illinois,Chebanse Township,Clifton,http://www.cliftonillinois.com +Illinois,Clintonia Township,Clinton,http://www.clintonillinois.com/ +Illinois,Braceville Township,Coal City,https://coalcity-il.gov/ +Illinois,Rock Island County,Coal Valley,http://www.coalvalleyil.org +Illinois,Union County,Cobden,http://www.cobdenil.com +Illinois,Martin Township,Colfax,http://colfaxillinois.com +Illinois,Collinsville Township,Collinsville,http://www.collinsvilleil.org +Illinois,Henry County,Colona,http://www.colonail.com +Illinois,St. Clair County,Columbia,http://www.columbiaillinois.com/ +Illinois,Rock Island County,Cordova,https://villageofcordova.com/ +Illinois,DeKalb County,Cortland,https://www.cortlandil.org/ +Illinois,Randolph County,Coulterville,https://www.coulterville.org +Illinois,Bremen Township,Country Club Hills,http://countryclubhills.org +Illinois,Lyons Township,Countryside,http://www.countryside-il.org +Illinois,Williamson County,Crainville,https://www.crainville.net/ +Illinois,Williamson County,Creal Springs,https://crealsprings.net/ +Illinois,Lockport Township,Crest Hill,http://www.cityofcresthill.com +Illinois,Dement Township,Creston,http://www.villageofcreston.org/ +Illinois,Worth Township,Crestwood,http://crestwood.illinois.gov/ +Illinois,Will County,Crete,http://www.villageofcrete.org/ +Illinois,Groveland Township,Creve Coeur,http://www.villageofcc.com/ +Illinois,Algonquin Township,Crystal Lake,http://www.crystallake.org +Illinois,Sullivan Township,Cullom,http://villageofcullomillinois.com +Illinois,Curran Township,Curran,https://curranil.govoffice2.com/ +Illinois,Dallas City Township,Dallas City,http://www.dallascity-il.com +Illinois,Clinton County,Damiansville,http://www.damiansville.org +Illinois,Danvers Township,Danvers,https://danversil.com/ +Illinois,Blount Township,Danville,http://www.cityofdanville.org +Illinois,Downers Grove Township,Darien,http://www.darien.il.us +Illinois,Scott Township,Davis Junction,http://www.davisjunction.com +Illinois,Sangamon County,Dawson,http://www.dawson.illinois.gov/ +Illinois,Selby Township,De Pue,http://www.villageofdepue.com +Illinois,DeSoto Township,De Soto,http://villageofdesoto.com +Illinois,Decatur Township,Decatur,http://www.decaturil.gov/ +Illinois,Tazewell County,Deer Creek,http://deercreekillinois.org +Illinois,Ela Township,Deer Park,http://villageofdeerpark.com +Illinois,West Deerfield Township,Deerfield,http://www.deerfield.il.us +Illinois,DeKalb County,DeKalb,https://www.cityofdekalb.com +Illinois,Tazewell County,Delavan,http://www.Delavanil.org +Illinois,Maine Township,Des Plaines,http://www.desplaines.org/ +Illinois,Grundy County,Diamond,https://www.villageofdiamond.org/ +Illinois,Effingham County,Dieterich,http://www.dieterichillinois.com +Illinois,Effingham County,Divernon,http://divernonil.com/ +Illinois,Rome Township,Dix,http://villageofdixillinois.com +Illinois,Thornton Township,Dixmoor,http://www.villageofdixmoor.org +Illinois,Lee County,Dixon,http://www.discoverdixon.org/ +Illinois,Thornton Township,Dolton,http://vodolton.org +Illinois,Grisham Township,Donnellson,http://www.villageofdonnellson.com +Illinois,Downers Grove Township,Downers Grove,http://www.downers.us/ +Illinois,Downs Township,Downs,http://www.villageofdowns.org +Illinois,Perry County,Du Quoin,http://duquoin.org/ +Illinois,Radnor Township,Dunlap,http://www.villageofdunlap-il.gov/ +Illinois,St. Clair County,Dupo,http://www.villageofdupo.org/ +Illinois,Durand Township,Durand,https://villageofdurand.com/ +Illinois,Dwight Township,Dwight,http://www.dwightillinois.org +Illinois,Earl Township,Earlville,https://earlvilleil.org/ +Illinois,Wood River Township,East Alton,http://www.eastaltonvillage.org +Illinois,Dunleith Township,East Dubuque,http://www.cityofeastdubuque.com +Illinois,Dundee Township,East Dundee,http://eastdundee.net +Illinois,Thornton Township,East Hazel Crest,http://easthazelcrest.com +Illinois,Rock Island County,East Moline,http://www.eastmoline.com +Illinois,Tazewell County,East Peoria,http://www.cityofeastpeoria.com/ +Illinois,St. Clair County,East St. Louis,http://www.cesl.us/ +Illinois,Madison County,Edwardsville,http://cityofedwardsville.com +Illinois,Effingham County,Effingham,http://www.effinghamil.com/ +Illinois,El Paso Township,El Paso,http://www.elpasoil.org +Illinois,Kane County,Elburn,http://elburn.il.us +Illinois,Elgin Township,Elgin,https://www.cityofelgin.org/ +Illinois,Elizabeth Township,Elizabeth,http://www.villageofelizabethil.com/ +Illinois,Elk Grove Township,Elk Grove Village,http://www.elkgrove.com +Illinois,Elkhart Township,Elkhart,http://elkhartillinois.us +Illinois,Randolph County,Ellis Grove,http://www.villageofellisgrove.com/ +Illinois,Dawson Township,Ellsworth,https://www.villageofellsworthil.com/ +Illinois,Addison Township,Elmhurst,https://www.elmhurst.org/ +Illinois,Peoria County,Elmwood,http://www.elmwoodil.com +Illinois,Leyden Township,Elmwood Park,http://www.elmwoodpark.org +Illinois,Elsah Township,Elsah,http://www.elsah.org/ +Illinois,Will County,Elwood,https://www.villageofelwood.com/ +Illinois,Logan County,Emden,https://emdenil.weebly.com/ +Illinois,Williamson County,Energy,http://www.villageofenergy.com/ +Illinois,Whiteside County,Erie,http://www.villageoferie.com/ +Illinois,Essex Township,Essex,http://villageofessex.com +Illinois,Woodford County,Eureka,http://www.eurekaillinois.net/ +Illinois,Cook County,Evanston,http://cityofevanston.org +Illinois,Randolph County,Evansville,http://evansvilleil.org/ +Illinois,Worth Township,Evergreen Park,http://evergreenpark-ill.com +Illinois,Livingston County,Fairbury,http://ww2.cityoffairbury.com/wp/ +Illinois,Wayne County,Fairfield,http://www.fairfield-il.com +Illinois,Canteen Township,Fairmont City,http://www.fairmontcityil.com +Illinois,Vance Township,Fairmount,http://fairmountil.com/ +Illinois,St. Clair County,Fairview Heights,http://cofh.org +Illinois,Santa Anna Township,Farmer City,https://cityoffarmercity.org/ +Illinois,Farmington Township,Farmington,https://www.cityoffarmingtonil.com/ +Illinois,Champaign County,Fisher,http://www.fisher.il.us +Illinois,Nebraska Township,Flanagan,http://www.flanaganil.org +Illinois,Clay County,Flora,http://florail.govoffice2.com/ +Illinois,Rich Township,Flossmoor,http://flossmoor.org +Illinois,Bloom Township,Ford Heights,http://www.villageoffordheights.org/ +Illinois,Proviso Township,Forest Park,http://www.forestpark.net +Illinois,Stickney Township,Forest View,http://villageofforestview.com/ +Illinois,Forrest Township,Forrest,http://www.forrestil.org +Illinois,Forreston Township,Forreston,https://forreston.municipalimpact.com/ +Illinois,Hickory Point Township,Forsyth,http://forsythvillage.us +Illinois,Grant Township,Fox Lake,http://www.foxlake.org +Illinois,McHenry County,Fox River Grove,http://www.foxrivergrove.org +Illinois,Frankfort Township,Frankfort,http://villageoffrankfort.com +Illinois,Morgan County,Franklin,http://www.franklinillinois.net +Illinois,Lee County,Franklin Grove,http://www.franklingrove.org/ +Illinois,Leyden Township,Franklin Park,http://vofp.com +Illinois,St. Clair County,Freeburg,http://www.freeburg.com +Illinois,Freeport Township,Freeport,http://www.cityoffreeport.org/ +Illinois,Whiteside County,Fulton,https://www.cityoffulton.us/ +Illinois,East Galena Township,Galena,http://www.cityofgalena.org/ +Illinois,Galesburg City Township,Galesburg,http://www.ci.galesburg.il.us +Illinois,Henry County,Galva,http://www.galvail.gov/ +Illinois,Henry County,Geneseo,http://www.cityofgeneseo.com/ +Illinois,Kane County,Geneva,http://geneva.il.us +Illinois,DeKalb County,Genoa,http://www.genoa-il.com +Illinois,Georgetown Township,Georgetown,https://georgetownil.net/ +Illinois,Clinton County,Germantown,http://www.germantownil.net +Illinois,Worth Township,Germantown Hills,https://germantownhillsillinois.org/ +Illinois,Ford County,Gibson City,http://gibsoncityillinois.com +Illinois,Champaign County,Gifford,https://villageofgifford.com/ +Illinois,Rutland Township,Gilberts,http://villageofgilberts.com +Illinois,Douglas Township,Gilman,http://cityofgilman.com +Illinois,Peoria County,Glasford,http://www.glasfordil.com +Illinois,Edwardsville Township,Glen Carbon,http://www.glen-carbon.il.us +Illinois,Milton Township,Glen Ellyn,http://www.glenellyn.org +Illinois,New Trier Township,Glencoe,http://www.villageofglencoe.org +Illinois,DuPage County,Glendale Heights,http://www.glendaleheights.org +Illinois,Northfield Township,Glenview,http://www.glenview.il.us +Illinois,Thornton Township,Glenwood,http://villageofglenwood.com +Illinois,Madison County,Godfrey,http://www.godfreyil.org +Illinois,Cook County,Golf,http://villageofgolf.us +Illinois,Woodford County,Goodfield,http://goodfieldillinois.com/ +Illinois,Johnson County,Goreville,http://villageofgoreville.com/ +Illinois,Quarry Township,Grafton,http://cityofgraftonil.com/ +Illinois,Farm Ridge Township,Grand Ridge,https://villageofgrandridge.org/ +Illinois,Sangamon County,Grandview,http://villageofgrandview.com/ +Illinois,Madison County,Granite City,http://www.granitecity.illinois.gov +Illinois,Kankakee County,Grant Park,http://www.grantpark-il.org/ +Illinois,Leef Township,Grantfork,http://villageofgrantfork.wixsite.com/home +Illinois,Granville Township,Granville,http://villageofgranville.org/ +Illinois,Lake County,Grayslake,http://villageofgrayslake.com +Illinois,Edwards County,Grayville,https://grayville-il.gov/ +Illinois,Lake County,Green Oaks,http://www.greenoaks.org +Illinois,Tazewell County,Green Valley,http://villageofgvil.org/ +Illinois,Greene County,Greenfield,http://www.greenfieldillinois.org/ +Illinois,Greenup Township,Greenup,http://villageofgreenup.com +Illinois,Greenview No. 6 Precinct,Greenview,http://thevillageofgreenview.com +Illinois,Bond County,Greenville,http://www.greenvilleillinois.com +Illinois,Gridley Township,Gridley,http://www.gridleyillinois.org +Illinois,Pike County,Griggsville,http://www.griggsville-il.org/ +Illinois,Lake County,Gurnee,http://www.gurnee.il.us +Illinois,Lake County,Hainesville,http://www.hainesville.org +Illinois,Calhoun County,Hamburg,http://www.hamburgillinois.com/ +Illinois,Hamel Township,Hamel,http://www.villageofhamel.com +Illinois,Hamel Township,Hamilton,http://www.hamiltonillinois.org +Illinois,Unity Township,Hammond,https://villageofhammond.us/ +Illinois,Hampshire Township,Hampshire,http://www.hampshireil.org +Illinois,Rock Island County,Hampton,http://hamptonil.org/ +Illinois,Peoria County,Hanna City,http://hannacityil.com/ +Illinois,Hanover Township,Hanover,http://www.hanover-il.com/ +Illinois,Hanover Township,Hanover Park,http://hanoverparkillinois.org +Illinois,Saline County,Harrisburg,http://www.thecityofharrisburgil.com/ +Illinois,Harristown Township,Harristown,http://villageofharristown.com +Illinois,Chouteau Township,Hartford,http://hartfordillinois.net +Illinois,Chemung Township,Harvard,http://www.cityofharvard.org +Illinois,Thornton Township,Harvey,http://www.cityofharvey.org +Illinois,Norwood Park Township,Harwood Heights,http://www.harwoodheights.org/ +Illinois,Havana Township,Havana,https://www.havanail.gov/ +Illinois,Lake County,Hawthorn Woods,http://www.vhw.org +Illinois,Bremen Township,Hazel Crest,http://www.villageofhazelcrest.com +Illinois,McHenry County,Hebron,http://www.villageofhebron.org +Illinois,Monroe County,Hecker,http://hecker.illinois.gov +Illinois,Hennepin Township,Hennepin,http://www.villageofhennepin.com +Illinois,Henry Township,Henry,http://www.cityofhenryil.org +Illinois,Williamson County,Herrin,http://www.cityofherrin.com/ +Illinois,Pilot Township,Herscher,https://herscher.net/ +Illinois,Randolph Township,Heyworth,http://heyworth-il.gov +Illinois,Palos Township,Hickory Hills,http://www.hickoryhillsil.org +Illinois,Helvetia Township,Highland,http://www.highlandil.gov +Illinois,File:Flag of Lake County,Highland Park,https://www.cityhpil.com/ +Illinois,Lake County,Highwood,http://www.cityofhighwood.com +Illinois,Flagg Township,Hillcrest,http://www.hillcrestil.us +Illinois,Hillsboro Township,Hillsboro,http://www.hillsboroillinois.net +Illinois,Cook County,Hillside,http://www.hillside-il.org +Illinois,Squaw Grove Township,Hinckley,https://hinckleyil.com/ +Illinois,Downers Grove Township,Hinsdale,http://www.villageofhinsdale.org +Illinois,Cook County,Hodgkins,http://www.villageofhodgkins.org +Illinois,Clinton County,Hoffman,http://www.villageofhoffman.us +Illinois,Schaumburg Township,Hoffman Estates,http://www.hoffmanestates.org +Illinois,McHenry County,Holiday Hills,http://www.villageofholidayhills.com +Illinois,Champaign County,Homer,http://homervillage.com/ +Illinois,Homer Township,Homer Glen,http://homerglenil.org +Illinois,Worth Township,Hometown,http://www.cityofhometown.org +Illinois,Bremen Township,Homewood,http://www.homesweethomewood.com +Illinois,Grant Township,Hoopeston,http://www.cityofhoopeston.com +Illinois,Tazewell County,Hopedale,http://www.hopedale.net/ +Illinois,Steuben Township,Hopewell,http://villageofhopewell.com +Illinois,Pembroke Township,Hopkins Park,https://www.hopkinspark-il.org/ +Illinois,Hudson Township,Hudson,http://my.hudsonil.org +Illinois,Grafton Township,Huntley,http://www.huntley.il.us +Illinois,Sangamon County,Illiopolis,http://illiopolis.illinois.gov/ +Illinois,Spring Garden Township,Ina,https://www.villageofina.org/ +Illinois,Lyons Township,Indian Head Park,http://www.indianheadpark-il.gov +Illinois,Palatine Township,Inverness,http://inverness-il.gov +Illinois,Clay County,Iola,https://iolaillinois.org/ +Illinois,Lake County,Island Lake,http://www.villageofislandlake.com +Illinois,DuPage County,Itasca,http://www.itasca.com/ +Illinois,Morgan County,Jacksonville,http://www.jacksonvilleil.com +Illinois,Sangamon County,Jerome,https://www.villageofjerome.com/ +Illinois,Jersey Township,Jerseyville,http://www.jerseyville-il.us +Illinois,McHenry County,Johnsburg,https://www.johnsburg.org/ +Illinois,Joliet Township,Joliet,https://www.joliet.gov/ +Illinois,Union County,Jonesboro,http://www.cojil.org/ +Illinois,Millersburg Township,Joy,http://joyillinois.com +Illinois,Cook County,Justice,http://www.villageofjustice.org +Illinois,Kaneville Township,Kaneville,http://villageofkaneville.com +Illinois,Kankakee County,Kankakee,http://www.citykankakee-il.gov +Illinois,Kansas Township,Kansas,https://kansasillinois.com/ +Illinois,Keithsburg Township,Keithsburg,http://www.cityofkeithsburg.com +Illinois,New Trier Township,Kenilworth,https://www.vok.org/ +Illinois,Henry County,Kewanee,http://cityofkewanee.com +Illinois,Lake County,Kildeer,http://www.villageofkildeer.com +Illinois,Christian County,Kincaid,https://www.villageofkincaid.com/ +Illinois,DeKalb County,Kingston,http://www.villageofkingston.org/ +Illinois,Kinmundy Township,Kinmundy,http://cityofkinmundy.com +Illinois,DeKalb County,Kirkland,https://villageofkirkland.com/ +Illinois,Tompkins Township,Kirkwood,https://villageofkirkwood.municipalimpact.com/home +Illinois,Knox Township,Knoxville,http://kville.org/ +Illinois,Lyons Township,La Grange,http://www.villageoflagrange.com +Illinois,Cook County,La Grange Park,http://www.lagrangepark.org +Illinois,Hancock County,La Harpe,http://cityoflaharpe.com/ +Illinois,Lacon Township,Lacon,http://laconcity.com +Illinois,Hall Township,Ladd,http://www.villageofladd.com/ +Illinois,Cuba Township,Lake Barrington,http://www.lakebarrington.org +Illinois,Shields Township,Lake Bluff,http://www.lakebluff.org +Illinois,Moraine Township,Lake Forest,http://www.cityoflakeforest.com +Illinois,Grafton Township,Lake in the Hills,http://www.lith.org +Illinois,Lake County,Lake Villa,http://www.lake-villa.org +Illinois,Ela Township,Lake Zurich,http://lakezurich.org +Illinois,Lake County,Lakemoor,http://www.lakemoor.net +Illinois,Algonquin Township,Lakewood,http://www.village.lakewood.il.us/ +Illinois,Carroll County,Lanark,http://www.lanarkil.com/ +Illinois,Thornton Township,Lansing,http://villageoflansing.org +Illinois,LaSalle Township,LaSalle,http://lasalle-il.gov/ +Illinois,Lawrence County,Lawrenceville,http://www.lawrencecity.com +Illinois,Empire Township,Le Roy,http://www.leroy.org +Illinois,Leaf River Township,Leaf River,http://leafriver.homestead.com/VillageLR.html +Illinois,St. Clair County,Lebanon,http://www.lebanonil.org/city +Illinois,DeKalb County,Lee,https://www.villageoflee.com/ +Illinois,Sangamon County,Leland Grove,http://www.lelandgrove.com/ +Illinois,Lemont Township,Lemont,http://lemont.il.us +Illinois,West Point Township,Lena,http://www.villageoflena.com/ +Illinois,Lewistown Township,Lewistown,http://lewistownillinois.org +Illinois,Lexington Township,Lexington,https://www.lexingtonillinois.org/ +Illinois,Liberty Township,Liberty,http://www.libertyschool.net +Illinois,Libertyville Township,Libertyville,http://www.libertyville.com +Illinois,Campton Township,Lily Lake,http://www.villageoflilylake.org +Illinois,Limestone Township,Limestone,http://thevillageoflimestone.org/ +Illinois,East Lincoln Township,Lincoln,https://www.lincolnil.gov/ +Illinois,Vernon Township,Lincolnshire,https://www.lincolnshireil.gov/ +Illinois,Niles Township,Lincolnwood,http://www.lincolnwoodil.org +Illinois,Lake County,Lindenhurst,http://www.lindenhurstil.org +Illinois,Lisle Township,Lisle,http://www.villageoflisle.org/ +Illinois,North Litchfield Township,Litchfield,http://www.cityoflitchfieldil.com +Illinois,Olive Township,Livingston,http://villageoflivingston.us/ +Illinois,Sangamon County,Loami,https://loamiil.com/ +Illinois,Lockport Township,Lockport,http://www.cityoflockport.net +Illinois,Loda Township,Loda,http://www.villageofloda.com +Illinois,York Township,Lombard,http://www.villageoflombard.org +Illinois,Ela Township,Long Grove,https://www.longgroveil.gov +Illinois,Hope Township,Lostant,http://www.villageoflostant.com +Illinois,Clay County,Louisville,http://villageoflouisvilleil.com +Illinois,Winnebago County,Loves Park,https://cityoflovespark.com/ +Illinois,Lovington Township,Lovington,http://www.lovingtonil.com +Illinois,Champaign County,Ludlow,https://villageofludlow.com/home +Illinois,Whiteside County,Lyndon,https://villageoflyndon.org/ +Illinois,Bloom Township,Lynwood,https://www.lynwoodil.us/ +Illinois,Cook County,Lyons,http://www.villageoflyons-il.net/ +Illinois,Winnebago County,Machesney Park,http://machesneypark.org/ +Illinois,Tazewell County,Mackinaw,https://mackinawil.gov/ +Illinois,McDonough County,Macomb,http://cityofmacomb.com +Illinois,South Macon Township,Macon,http://maconcity.us +Illinois,Venice Township,Madison,http://cityofmadisonil.com +Illinois,Champaign County,Mahomet,https://www.mahomet-il.gov/ +Illinois,Makanda Township,Makanda,http://villageofmakanda.com/ +Illinois,DeKalb County,Malta,https://www.villageofmaltail.com/ +Illinois,Will County,Manhattan,https://www.villageofmanhattan.org/ +Illinois,Manito Township,Manito,http://villageofmanito.com +Illinois,Blue Ridge Township,Mansfield,http://villageofmansfield.net/ +Illinois,Manteno Township,Manteno,http://www.villageofmanteno.com +Illinois,Cortland Township,Maple Park,https://villageofmaplepark.org/ +Illinois,Peoria County,Mapleton,https://www.mapletonillinois.com/ +Illinois,Maquon Township,Maquon,http://maquon.org +Illinois,Marengo Township,Marengo,http://www.cityofmarengo.com/ +Illinois,Marine Township,Marine,http://villageofmarine.net +Illinois,Williamson County,Marion,http://cityofmarionil.gov/ +Illinois,St. Clair County,Marissa,http://www.villageofmarissa.com/ +Illinois,Granville Township,Mark,http://www.vil.mark.il.us/ +Illinois,Bremen Township,Markham,http://www.cityofmarkham.net +Illinois,Maroa Township,Maroa,http://maroaillinois.gov +Illinois,Tazewell County,Marquette Heights,http://cityofmhgov.org/ +Illinois,Manlius Township,Marseilles,http://cityofmarseilles.com/ +Illinois,Clark County,Marshall,http://www.marshall-il.com/ +Illinois,Clark County,Martinsville,http://martinsvilleil.com/ +Illinois,Collinsville Township,Maryville,http://www.vil.maryville.il.us +Illinois,St. Clair County,Mascoutah,http://www.mascoutah.org +Illinois,Mason City Township,Mason City,http://www.masoncityillinois.org +Illinois,Preemption Township,Matherville,https://mathervilleil.govoffice2.com/ +Illinois,Rich Township,Matteson,http://www.villageofmatteson.org +Illinois,Mattoon Township,Mattoon,http://www.mattoon.illinois.gov/ +Illinois,Proviso Township,Maywood,http://www.maywood-il.org +Illinois,Cook County,McCook,http://www.villageofmccook.org +Illinois,McHenry Township,McCullom Lake,https://voml.org/ +Illinois,McHenry Township,McHenry,http://www.ci.mchenry.il.us +Illinois,Mount Hope Township,McLean,http://www.mclean-il.com +Illinois,McLeansboro Township,McLeansboro,https://mcleansboro.us/ +Illinois,Magnolia Township,McNabb,http://www.villageofmcnabb.org/ +Illinois,Sangamon County,Mechanicsburg,https://sites.google.com/view/mechanicsburgil +Illinois,Proviso Township,Melrose Park,http://melrosepark.org +Illinois,Ford County,Melvin,https://www.melvinill.com/ +Illinois,Mendon Township,Mendon,https://www.mendonillinois.com/ +Illinois,Mendon Township,Mendota,http://www.mendota.il.us/ +Illinois,Worth Township,Merrionette Park,http://merrionettepark.org +Illinois,Woodford County,Metamora,http://villageofmetamora.com/ +Illinois,Massac County,Metropolis,https://www.metropolisil.gov +Illinois,Lake County,Mettawa,http://www.mettawa.org +Illinois,Corwin Township,Middletown,http://middletownillinois.com +Illinois,Bremen Township,Midlothian,http://villageofmidlothian.net +Illinois,Rock Island County,Milan,http://www.milanil.org/ +Illinois,Milford Township,Milford,https://www.villageofmilfordil.com/ +Illinois,Fox Township,Millbrook,http://www.thevillageofmillbrook.com +Illinois,Wysox Township,Milledgeville,http://www.milledgevilleil.net/ +Illinois,Fox Township,Millington,http://www.millingtonil.com +Illinois,St. Clair County,Millstadt,https://www.villageofmillstadt.org/ +Illinois,Tazewell County,Minier,https://minier.com/ +Illinois,Woodford County,Minonk,https://cityofminonk.com/ +Illinois,Aux Sable Township,Minooka,http://www.minooka.com +Illinois,Frankfort Township,Mokena,http://www.mokena.org/ +Illinois,Rock Island County,Moline,http://www.moline.il.us +Illinois,Kankakee County,Momence,http://cityofmomence.com +Illinois,Monee Township,Monee,http://villageofmonee.org/ +Illinois,Monmouth Township,Monmouth,http://cityofmonmouth.com/ +Illinois,Monroe Township,Monroe Center,http://www.monroecenter.org/ +Illinois,Aurora Township,Montgomery,http://ci.montgomery.il.us +Illinois,Monticello Township,Monticello,http://www.monticelloillinois.net/ +Illinois,Morris Township,Morris,http://morrisil.org/ +Illinois,Whiteside County,Morrison,http://www.morrisonil.org/ +Illinois,Tazewell County,Morton,http://www.morton-il.gov/ +Illinois,Maine Township,Morton Grove,http://www.mortongroveil.org +Illinois,Carroll County,Mount Carroll,http://www.mtcarrollil.org +Illinois,Mt. Morris Township,Mount Morris,http://mtmorrisil.net/ +Illinois,Elk Grove Township,Mount Prospect,http://www.mountprospect.org +Illinois,Logan County,Mount Pulaski,https://cityofmtpulaski.com/ +Illinois,Brown County,Mount Sterling,https://mtsterlingil.com/ +Illinois,Mt. Vernon Township,Mount Vernon,http://mtvernon.com +Illinois,Mount Zion Township,Mount Zion,http://www.mtzion.com +Illinois,Shelby County,Moweaqua,https://moweaqua.org/ +Illinois,Fremont Township,Mundelein,http://www.mundelein.org +Illinois,Murphysboro Township,Murphysboro,http://www.murphysboro.com +Illinois,DuPage County,Naperville,http://naperville.il.us/ +Illinois,Ottawa Township,Naplate,https://villageofnaplate.com/ +Illinois,Nauvoo Township,Nauvoo,https://www.beautifulnauvoo.com/ +Illinois,Neoga Township,Neoga,http://www.neoga.org +Illinois,Neponset Township,Neponset,https://www.villageofneponsetil.com +Illinois,St. Clair County,New Athens,http://www.newathens.us/ +Illinois,Clinton County,New Baden,http://www.newbadenil.com/ +Illinois,Sangamon County,New Berlin,http://www.newberlin.il.us/ +Illinois,New Boston Township,New Boston,http://cityofnewbostonil.com +Illinois,Sheridan Township,New Holland,http://www.newhollandil.com +Illinois,Will County,New Lenox,http://newlenox.net +Illinois,Rockford Township,New Milford,https://villageofnewmilford.org/ +Illinois,Big Grove Township,Newark,http://newark-il.us +Illinois,Wade Township,Newton,http://www.cityofnewtonil.com +Illinois,Maine Township,Niles,http://www.vniles.com +Illinois,Richland County,Noble,http://www.nobleillinois.com/ +Illinois,Normal Township,Normal,http://www.normal.org/ +Illinois,Cook County,Norridge,http://www.villageofnorridge.com +Illinois,Aurora Township,North Aurora,http://www.northaurora.org +Illinois,Lake County,North Barrington,http://www.northbarrington.org +Illinois,Lake County,North Chicago,http://northchicago.org +Illinois,Tazewell County,North Pekin,http://northpekin.us +Illinois,Cook County,North Riverside,http://www.northriverside-il.org +Illinois,Utica Township,North Utica,http://www.utica-il.gov/ +Illinois,Northfield Township,Northbrook,http://www.northbrook.il.us +Illinois,Cook County,Northfield,http://www.northfieldil.org +Illinois,Cook County,Northlake,http://www.northlakecity.com/ +Illinois,Peoria County,Norwood,http://villageofnorwoodil.com/ +Illinois,York Township,Oak Brook,http://www.oak-brook.org/ +Illinois,Menard County,Oak Forest,http://www.oak-forest.org +Illinois,Worth Township,Oak Lawn,http://www.oaklawn-il.gov +Illinois,Oak Park Township,Oak Park,http://www.oak-park.us +Illinois,York Township,Oakbrook Terrace,http://www.oakbrookterrace.net +Illinois,Oakwood Township,Oakwood,http://oakwoodil.org/ +Illinois,Nunda Township,Oakwood Hills,http://www.oakwoodhills.org +Illinois,Crawford County,Oblong,http://www.villageofoblong.com/ +Illinois,Odell Township,Odell,http://odell-il.com +Illinois,Odin Township,Odin,http://www.odinishome.com +Illinois,O'Fallon Township,O'Fallon,http://ofallon.org +Illinois,Champaign County,Ogden,http://www.ogdenil.com/ +Illinois,LaSalle Township,Oglesby,http://www.oglesby.il.us +Illinois,Washington County,Okawville,http://www.okawvillecc.com/ +Illinois,Richland County,Olney,http://www.ci.olney.il.us/ +Illinois,Bloom Township,Olympia Fields,http://www.olympia-fields.com +Illinois,Onarga Township,Onarga,http://villageofonarga.com/ +Illinois,Ontario Township,Oneida,https://www.cityofoneidail.com/ +Illinois,Oquawka Township,Oquawka,http://www.oquawkail.com/ +Illinois,Oneco Township,Orangeville,http://villageoforangeville.com/ +Illinois,Whitmore Township,Oreana,http://oreanail.com +Illinois,Oregon-Nashua Township,Oregon,http://cityoforegon.org/ +Illinois,Denning Township,Orient,http://www.cityoforient.com +Illinois,Henry County,Orion,http://orionil.org/ +Illinois,Orland Township,Orland Hills,http://www.orlandhills.org +Illinois,Cook County,Orland Park,http://www.orlandpark.org +Illinois,Oswego Township,Oswego,http://www.oswegoil.org +Illinois,Ottawa Township,Ottawa,https://cityofottawa.org/ +Illinois,Palatine Township,Palatine,http://www.palatine.il.us +Illinois,Crawford County,Palestine,http://www.villageofpalestine.net/ +Illinois,Palos Township,Palos Heights,http://www.palosheights.org +Illinois,Palos Township,Palos Hills,http://www.paloshillsweb.org +Illinois,Palos Township,Palos Park,http://www.palospark.org +Illinois,Christian County,Pana,https://www.cityofpana.org/ +Illinois,Paris Township,Paris,http://www.parisillinois.org +Illinois,Lake County,Park City,http://parkcityil.org/ +Illinois,Cook County,Park Forest,http://www.villageofparkforest.com +Illinois,Maine Township,Park Ridge,http://www.parkridge.us +Illinois,Lee County,Paw Paw,http://pawpawil.org/ +Illinois,Sangamon County,Pawnee,http://www.pawneeil.net/ +Illinois,Ford County,Paxton,http://www.cityofpaxton.com/ +Illinois,Payson Township,Payson,https://paysonil.com/ +Illinois,Loran Township,Pearl City,http://villageofpearlcity.com/ +Illinois,Pecatonica Township,Pecatonica,http://www.villageofpecatonica.com/ +Illinois,Pekin Township,Pekin,http://www.ci.pekin.il.us/ +Illinois,Peoria County,Peoria,http://www.peoriagov.org +Illinois,Richwoods Township,Peoria Heights,https://www.peoriaheights.org/home +Illinois,Peotone Township,Peotone,https://villageofpeotone.com/ +Illinois,Peru Township,Peru,http://www.peru.il.us +Illinois,Champaign County,Pesotum,https://pesotum.org/ +Illinois,Menard County,Petersburg,http://www.petersburgil.org +Illinois,Champaign County,Philo,http://villageofphilo.com/ +Illinois,Thornton Township,Phoenix,http://www.villageofphoenix.org +Illinois,Perry County,Pinckneyville,http://www.ci.pinckneyville.il.us/ +Illinois,Rutland Township,Pingree Grove,http://www.villageofpingreegrove.org +Illinois,Ford County,Piper City,http://pipercity.com/ +Illinois,Pike County,Pittsfield,http://www.pittsfieldil.org/ +Illinois,Plainfield Township,Plainfield,http://www.plainfield-il.org +Illinois,Little Rock Township,Plano,http://www.cityofplanoil.com/ +Illinois,Sangamon County,Pleasant Plains,http://pleasantplainsillinois.com/ +Illinois,Buffalo Township,Polo,http://www.poloil.org/ +Illinois,Livingston County,Pontiac,http://www.pontiac.org +Illinois,Nameoki Township,Pontoon Beach,http://pontoonbeachil.com +Illinois,Poplar Grove Township,Poplar Grove,https://villageofpoplargrove.com/ +Illinois,Lake County,Port Barrington,http://www.portbarrington.net +Illinois,Rock Island County,Port Byron,https://portbyronil.com/ +Illinois,Bremen Township,Posen,http://www.villageofposen.org +Illinois,Nunda Township,Prairie Grove,https://www.prairiegrove.org/ +Illinois,Princeton Township,Princeton,http://www.princeton-il.com +Illinois,Peoria County,Princeville,https://princeville.org/ +Illinois,Whiteside County,Prophetstown,http://prophetstownil.org/ +Illinois,Cook County,Prospect Heights,http://www.prospect-heights.il.us +Illinois,Adams County,Quincy,http://www.quincyil.gov +Illinois,Allen Township,Ransom,http://www.villageofransom.com +Illinois,Rantoul Township,Rantoul,http://www.myrantoul.com/ +Illinois,Rock Island County,Rapids City,http://www.rapidscity.us/ +Illinois,Randolph County,Red Bud,http://www.cityofredbud.org +Illinois,McHenry County,Richmond,http://richmond-il.com/ +Illinois,Rich Township,Richton Park,http://www.richtonpark.org +Illinois,Elwood Township,Ridge Farm,https://ridgefarmillinois.com/ +Illinois,McHenry Township,Ringwood,http://ringwood-il.us +Illinois,River Forest Township,River Forest,http://www.vrf.us +Illinois,Cook County Board of Commissioners,River Grove,http://rivergroveil.gov +Illinois,Thornton Township,Riverdale,http://www.villageofriverdale.net +Illinois,Riverside Township,Riverside,http://www.riverside.il.us +Illinois,Sangamon County,Riverton,http://riverton.illinois.gov/ +Illinois,Lake County,Riverwoods,http://villageofriverwoods.com +Illinois,Woodford County,Roanoke,http://www.roanokeil.org/ +Illinois,Bremen Township,Robbins,http://www.robbins-il.com +Illinois,Crawford County,Robinson,http://cityofrobinson.com +Illinois,Flagg Township,Rochelle,http://www.cityofrochelle.net/ +Illinois,Sangamon County,Rochester,http://www.rochesteril.org +Illinois,Whiteside County,Rock Falls,https://rockfalls61071.net/ +Illinois,Rock Island County,Rock Island,http://www.rigov.org/ +Illinois,Will County,Rockdale,https://rockdaleillinois.org/ +Illinois,Rockford Township,Rockford,https://rockfordil.gov/ +Illinois,Rockton Township,Rockton,http://www.rocktonvillage.com/ +Illinois,Cook County,Rolling Meadows,http://www.cityrm.org +Illinois,DuPage Township,Romeoville,http://www.romeoville.org/ +Illinois,Roscoe Township,Roscoe,https://www.villageofroscoe.com/ +Illinois,DuPage County,Roselle,http://www.roselle.il.us +Illinois,Cook County,Rosemont,http://www.rosemont.com +Illinois,Roseville Township,Roseville,https://rosevilleil.com/ +Illinois,Hardin County,Rosiclare,http://www.cityofrosiclare.com/ +Illinois,Grant Township,Rossville,http://www.villageofrossville.org/ +Illinois,Lake County,Round Lake,http://roundlakeil.gov +Illinois,Avon Township,Round Lake Beach,http://www.villageofroundlakebeach.com +Illinois,Lake County,Round Lake Heights,http://www.villageofroundlakeheights.org +Illinois,Lake County,Round Lake Park,http://www.villageofroundlakepark.com +Illinois,Wood River Township,Roxana,http://www.roxana-il.org +Illinois,Champaign County,Royal,https://villageofroyal.com/ +Illinois,Six Mile Township,Royalton,http://www.royaltonillinois.com +Illinois,Schuyler County,Rushville,http://rushvilleillinois.us/ +Illinois,Champaign County,Sadorus,http://www.sadorus.com +Illinois,Salem Township,Salem,http://www.salemil.us +Illinois,Otto Township,Sammons Point,https://villageofsammonspoint.org/ +Illinois,Allens Grove Township,San Jose,http://www.sanjoseil.com +Illinois,Sandoval Township,Sandoval,http://villageofsandoval.com +Illinois,Sandwich Township,Sandwich,http://www.sandwich.il.us/ +Illinois,Bloom Township,Sauk Village,http://www.saukvillage.org +Illinois,Saunemin Township,Saunemin,http://www.sauneminillinois.org +Illinois,Savanna Township,Savanna,https://www.savanna-il.us/ +Illinois,Champaign County,Savoy,http://www.savoy.illinois.gov/ +Illinois,Scales Mound Township,Scales Mound,http://scalesmound.com +Illinois,Schaumburg Township,Schaumburg,http://www.ci.schaumburg.il.us +Illinois,Cook County,Schiller Park,http://www.villageofschillerpark.com +Illinois,Manlius Township,Seneca,http://senecail.org/ +Illinois,Franklin County,Sesser,http://www.sesser.org +Illinois,DeKalb County,Shabbona,http://shabbona-il.com/ +Illinois,Cherry Grove-Shannon Township,Shannon,http://www.shannonillinois.com/ +Illinois,Concord Township,Sheffield,https://sheffieldil.org/ +Illinois,Shelbyville Township,Shelbyville,http://www.shelbyvilleillinois.net/ +Illinois,Sheldon Township,Sheldon,https://villageofsheldonil.org/ +Illinois,Mission Township,Sheridan,http://www.sheridan-il.us/ +Illinois,Sangamon County,Sherman,https://www.shermanil.org/ +Illinois,St. Clair County,Shiloh,http://www.shilohil.org/ +Illinois,Troy Township,Shorewood,http://vil.shorewood.il.us/ +Illinois,Champaign County,Sidney,http://villageofsidney.com/index.html +Illinois,Rock Island County,Silvis,http://www.silvisil.org/ +Illinois,Niles Township,Skokie,http://skokie.org +Illinois,Dundee Township,Sleepy Hollow,http://www.sleepyhollowil.org +Illinois,St. Clair County,Smithton,https://smithton-village.com/ +Illinois,Somonauk Township,Somonauk,https://www.vil.somonauk.il.us/ +Illinois,Barrington Township,South Barrington,http://www.southbarrington.org +Illinois,Winnebago County,South Beloit,http://www.southbeloit.org/ +Illinois,Bloom Township,South Chicago Heights,http://www.southchicagoheights.com +Illinois,Elgin Township,South Elgin,http://www.southelgin.com +Illinois,Thornton Township,South Holland,http://www.southholland.org +Illinois,Morgan County,South Jacksonville,https://southjacksonville-il.gov +Illinois,Cincinnati Township,South Pekin,http://villageofsouthpekin.org/ +Illinois,Grundy County,South Wilmington,https://villageofsouthwilmington.com/ +Illinois,Sangamon County,Southern View,http://www.southernview.us/ +Illinois,Randolph County,Sparta,http://spartaillinois.us/ +Illinois,Sangamon County,Spaulding,https://www.villageofspaulding.com/ +Illinois,Woodford County,Spring Bay,https://www.villageofspringbay.org/ +Illinois,McHenry County,Spring Grove,http://www.springgrovevillage.com/ +Illinois,Hall Township,Spring Valley,https://spring-valley.il.us/ +Illinois,Capital Township,Springfield,https://www.springfield.il.us/ +Illinois,St. Anne Township,St. Anne,http://www.villageofstanne.com +Illinois,Kane County,St. Charles,http://www.stcharlesil.gov +Illinois,Fayette County,St. Elmo,https://www.cityofstelmo.com +Illinois,St. Jacob Township,St. Jacob,http://www.stjacobil.com +Illinois,Champaign County,St. Joseph,http://www.stjosephillinois.org/ +Illinois,Clinton County,St. Rose,https://stroseil.org/ +Illinois,Allin Township,Stanford,https://www.stanford-il.org/ +Illinois,Staunton Township,Staunton,http://www.cityofstauntonil.com +Illinois,Randolph County,Steeleville,http://steeleville.org/ +Illinois,Bloom Township,Steger,http://villageofsteger.org/ +Illinois,Whiteside County,Sterling,http://ci.sterling.il.us/ +Illinois,Lee County,Steward,http://www.stewardil.com/ +Illinois,Shelby County,Stewardson,http://www.stewardsonil.com +Illinois,Stickney Township,Stickney,http://www.villageofstickney.com +Illinois,Marion Township,Stillman Valley,http://www.stillmanvalley.us/ +Illinois,Stockton Township,Stockton,http://www.villageofstockton.com/ +Illinois,Cook County,Stone Park,http://www.vosp.us/ +Illinois,Christian County,Stonington,http://www.villageofstonington.com/ +Illinois,Shelby County,Strasburg,http://www.strasburgil.com/ +Illinois,Cook County,Streamwood,http://www.streamwood.org +Illinois,Bruce Township,Streator,http://www.ci.streator.il.us/cms/ +Illinois,Stronghurst Township,Stronghurst,https://www.villageofstronghurst.org/ +Illinois,Sublette Township,Sublette,http://www.subletteweb.com +Illinois,Sugar Grove Township,Sugar Grove,http://sugargroveil.gov +Illinois,Sullivan Township,Sullivan,http://sullivanil.us +Illinois,Cook County,Summit,https://www.summit-il.org +Illinois,Lawrence County,Sumner,http://sumnerillinois.com/ +Illinois,Ganeer Township,Sun River Terrace,https://sunriverterrace.com/ +Illinois,St. Clair County,Swansea,http://swanseail.org/ +Illinois,DeKalb County,Sycamore,http://www.cityofsycamore.com/ +Illinois,Tampico Township,Tampico,https://www.tampicoil.com/ +Illinois,Hillsboro Township,Taylor Springs,http://taylorspringsil.com +Illinois,Christian County,Taylorville,http://taylorville.net/ +Illinois,Effingham County,Teutopolis,http://teutopolis.com +Illinois,Sangamon County,Thayer,http://villageofthayer.org/ +Illinois,Lake County,Third Lake,http://www.thirdlakevillage.com +Illinois,Champaign County,Thomasboro,http://thomasboro.us/ +Illinois,York Township,Thomson,http://www.thomsonil.com +Illinois,Thornton Township,Thornton,http://www.thornton60476.com +Illinois,Danville Township,Tilton,http://www.tiltonil.com/ +Illinois,Boone County,Timberlane,http://villageoftimberlane.org/ +Illinois,Cook County,Tinley Park,http://www.tinleypark.org +Illinois,Indiantown Township,Tiskilwa,https://villageoftiskilwa.org/ +Illinois,Tolono Township,Tolono,http://tolonoil.us/ +Illinois,Bennington Township,Toluca,http://www.cityoftoluca.org +Illinois,Eden Township,Tonica,http://www.tonicavillage.com +Illinois,Stark County,Toulon,http://www.cityoftoulon.com/ +Illinois,Towanda Township,Towanda,http://villageoftowanda.org +Illinois,Lake County,Tower Lakes,http://www.towerlakes-il.gov/ +Illinois,Tazewell County,Tremont,https://www.tremontil.com/ +Illinois,Clinton County,Trenton,http://trentonil.org/ +Illinois,Jarvis Township,Troy,http://www.troyil.us +Illinois,Tuscola Township,Tuscola,http://tuscola.org/home +Illinois,Monee Township,University Park,http://university-park-il.com +Illinois,Champaign County,Urbana,http://urbanaillinois.us/ +Illinois,Ursa Township,Ursa,http://ursavillage.org/ +Illinois,Monroe County,Valmeyer,http://www.valmeyerillinois.com +Illinois,Vandalia Township,Vandalia,http://vandaliaillinois.com/ +Illinois,Vermont Township,Vermont,http://villageofvermont.com/ +Illinois,Libertyville Township,Vernon Hills,https://www.vernonhills.org/ +Illinois,Brown County,Versailles,https://villageofversailles.org/ +Illinois,Johnson County,Vienna,http://www.cityofviennail.net/ +Illinois,Camargo Township,Villa Grove,https://villagrove.org/ +Illinois,York Township,Villa Park,http://www.invillapark.com +Illinois,Greene Township,Viola,http://villageofviola.org +Illinois,Virden Township,Virden,http://virden.municipalimpact.com +Illinois,Virgil Township,Virgil,http://villageofvirgil.net +Illinois,Virginia Township,Virginia,http://virginiaillinois.net/ +Illinois,Lake County,Volo,http://www.villageofvolo.com +Illinois,Lake County,Wadsworth,http://www.villageofwadsworth.org +Illinois,Walnut Township,Walnut,https://www.villageofwalnut.org/ +Illinois,Bald Hill Township,Waltonville,http://www.thevillageofwaltonville.com/ +Illinois,Irvington Township,Wamac,http://wamac.illinois.gov +Illinois,DeWitt County,Wapella,https://www.villageofwapella.org/ +Illinois,Warren Township,Warren,https://villageofwarren.com/ +Illinois,Illini Township,Warrensburg,http://warrensburgil.com +Illinois,Winfield Township,Warrenville,http://www.warrenville.il.us +Illinois,Hancock County,Warsaw,http://warsawillinois.org +Illinois,Cazenovia Township,Washburn,http://washburnil.com +Illinois,Washington Township,Washington,http://ci.washington.il.us/ +Illinois,St. Clair County,Washington Park,https://villageofwp.com/ +Illinois,Monroe County,Waterloo,http://www.waterloo.il.us +Illinois,DeKalb County,Waterman,https://villageofwaterman.com/ +Illinois,Belmont Township,Watseka,https://www.watsekacity.org/ +Illinois,Wauconda Township,Wauconda,http://wauconda-il.gov +Illinois,Lake County,Waukegan,http://www.waukeganil.gov +Illinois,Morgan County,Waverly,http://www.waverlyil.com +Illinois,St. Charles Township,Wayne,http://www.villageofwayne.org/ +Illinois,Wayne County,Wayne City,https://www.villageofwaynecity.com/ +Illinois,Evans Township,Wenona,http://www.cityofwenona.org +Illinois,Winfield Township,West Chicago,http://www.westchicago.org +Illinois,Browning Township,West City,http://www.villageofwestcity.com +Illinois,Dundee Township,West Dundee,http://www.wdundee.org/ +Illinois,Denning Township,West Frankfort,http://www.westfrankfort-il.com/ +Illinois,Peoria County,West Peoria,http://cityofwestpeoria.org/ +Illinois,Cook County,Westchester,http://www.westchester-il.org +Illinois,Lyons Township,Western Springs,http://www.wsprings.com +Illinois,Clark County,Westfield,http://westfieldillinois.com/ +Illinois,Downers Grove Township,Westmont,http://www.westmont.il.gov/ +Illinois,Georgetown Township,Westville,http://www.villageofwestville.com/ +Illinois,Milton Township,Wheaton,https://www.wheaton.il.us/ +Illinois,Cook County,Wheeling,http://www.wheelingil.gov +Illinois,Mount Olive Township,White City,http://thevillageofwhitecity.com +Illinois,Greene County,White Hall,http://www.whitehallcitygov.com/ +Illinois,Truro Township,Williamsfield,https://www.williamsfield.org/ +Illinois,Sangamon County,Williamsville,http://williamsville.illinois.gov/ +Illinois,Lyons Township,Willow Springs,http://www.willowsprings-il.gov +Illinois,Downers Grove Township,Willowbrook,http://www.willowbrookil.org +Illinois,New Trier Township,Wilmette,http://www.wilmette.com +Illinois,Will County,Wilmington,https://www.wilmington-il.com +Illinois,Scott County,Winchester,http://www.winchesteril.com/ +Illinois,Shelby County,Windsor,https://windsorillinois.net/ +Illinois,Milton Township,Winfield,https://www.villageofwinfield.com/ +Illinois,Winnebago Township,Winnebago,http://www.villageofwinnebago.com/ +Illinois,New Trier Township,Winnetka,http://www.villageofwinnetka.org +Illinois,Lake County,Winthrop Harbor,http://www.winthropharbor.com +Illinois,McHenry County,Wonder Lake,https://villageofwonderlake.org/ +Illinois,Addison Township,Wood Dale,http://www.wooddale.com +Illinois,Wood River Township,Wood River,http://www.woodriver.org +Illinois,Henry County,Woodhull,http://www.woodhullil.org/ +Illinois,Lisle Township,Woodridge,http://www.vil.woodridge.il.us +Illinois,Morgan County,Woodson,http://woodsonillinois.com +Illinois,Dorr Township,Woodstock,http://www.woodstockil.gov/ +Illinois,Worth Township,Worth,http://www.villageofworth.com +Illinois,Wyanet Township,Wyanet,https://www.wyanetil.com/ +Illinois,Stark County,Wyoming,http://wyomingil.com/ +Illinois,Bristol Township,Yorkville,http://www.yorkville.il.us +Illinois,Franklin County,Zeigler,http://cityofzeiglerillinois.com +Illinois,Lake County,Zion,http://www.cityofzion.com +Indiana,Jackson Township,Advance,http://townofadvance.com/ +Indiana,Henry Township,Akron,http://www.akronindiana.com/ +Indiana,Albion Township,Albion,http://www.albion-in.org +Indiana,Monroe Township,Alexandria,http://www.in.gov/cities/alexandria +Indiana,Anderson Township,Anderson,http://www.cityofanderson.com +Indiana,Pleasant Township,Angola,https://www.angolain.org +Indiana,Green Township,Argos,http://townofargos.com/ +Indiana,Smithfield Township,Ashley,http://www.ashley.in.gov +Indiana,Logan Township,Attica,http://www.atticaonline.com +Indiana,Grant Township,Auburn,http://www.ci.auburn.in.us +Indiana,Center Township,Aurora,http://www.aurora.in.us +Indiana,Jennings Township,Austin,http://cityofaustin.in.gov/ +Indiana,Allen Township,Avilla,http://avilla-in.org/ +Indiana,Washington Township,Avon,http://www.avongov.org +Indiana,Monroe Township,Bainbridge,http://www.townofbainbridge.com +Indiana,White River Township,Bargersville,http://www.townofbargersville.org +Indiana,Ripley County,Batesville,http://www.batesvilleindiana.us +Indiana,Tippecanoe Township,Battle Ground,http://www.battleground.in.gov/ +Indiana,Shawswick Township,Bedford,http://bedford.in.us +Indiana,Marion County,Beech Grove,http://www.beechgrove.com/ +Indiana,Monroe Township,Berne,http://www.cityofberne.com +Indiana,Pine Township,Beverly Shores,http://www.beverlyshoresindiana.org/ +Indiana,Monroe County Airport (Indiana),Bloomington,http://www.bloomington.in.gov +Indiana,Harrison Township,Bluffton,http://www.ci.bluffton.in.us +Indiana,Boon Township,Boonville,http://cityofboonvilleindiana.com +Indiana,Wood Township,Borden,http://www.bordenindiana.com +Indiana,Bourbon Township,Bourbon,https://www.bourbon-in.gov/ +Indiana,Clay County,Brazil,http://www.brazil.in.gov/ +Indiana,German Township,Bremen,http://www.townofbremen.com +Indiana,Washington Township,Bristol,http://www.bristolindiana.net +Indiana,Iroquois Township,Brook,http://www.brookindiana.com +Indiana,Brookville Township,Brookville,https://brookvilleindiana.org/ +Indiana,Hendricks County,Brownsburg,http://www.brownsburg.org +Indiana,Westchester Township,Burns Harbor,http://www.burnsharbor-in.gov +Indiana,DeKalb County,Butler,http://www.butler.in.us +Indiana,Jackson Township,Camden,http://www.townofcamden.org +Indiana,Troy Township,Cannelton,http://www.canneltonindiana.com/ +Indiana,Clay Township,Carmel,http://www.carmel.in.gov/ +Indiana,Hanover Township,Cedar Lake,http://www.cedarlakein.org/ +Indiana,Center Township,Centerville,http://www.town.centerville.in.us/ +Indiana,Big Creek Township,Chalmers,http://chalmers.in.gov/ +Indiana,Boon Township,Chandler,http://www.townofchandler.org/ +Indiana,Charlestown Township,Charlestown,http://www.cityofcharlestown.com +Indiana,Union Township,Chesterfield,http://chesterfield.in.gov +Indiana,Westchester Township,Chesterton,http://www.chestertonin.org/ +Indiana,Smith Township,Churubusco,http://www.townofchurubusco.com +Indiana,Jackson Township,Cicero,http://www.ciceroin.org +Indiana,Silver Creek Township,Clarksville,http://www.townofclarksville.com/ +Indiana,Harrison Township,Clay City,http://www.claycity.net/ +Indiana,Clay Township,Claypool,http://www.claypoolindiana.com +Indiana,Clear Lake Township,Clear Lake,http://www.townofclearlake.org +Indiana,Pike Township,Clermont,http://clermont.in.gov +Indiana,Cloverdale Township,Cloverdale,https://www.cloverdalein.com/home.html +Indiana,Clay Township,Coatesville,http://CoatesvilleIndiana.org +Indiana,Columbia Township,Columbia City,http://www.columbiacity.net +Indiana,Bartholomew County,Columbus,http://www.columbus.in.gov +Indiana,Fayette County,Connersville,http://www.connersvillein.gov +Indiana,Jackson Township,Converse,http://www.townofconverse.com +Indiana,Harrison Township,Corydon,http://www.thisisindiana.org/ +Indiana,Troy Township,Covington,http://covingtonin.net/ +Indiana,Union Township,Crawfordsville,http://www.crawfordsville.net/ +Indiana,Vernon Township,Crothersville,http://www.crothersville.net +Indiana,Center Township,Crown Point,http://www.crownpoint.in.gov +Indiana,Washington Township,Crows Nest,mw-data:TemplateStyles:r1066479718 +Indiana,Union Township,Culver,https://townofculver.org/ +Indiana,Marion County,Cumberland,http://www.town.cumberland.in.us +Indiana,Center Township,Danville,http://www.danvilleindiana.org +Indiana,Franklin Township,Darlington,http://www.darlingtonindiana.com +Indiana,Root Township,Decatur,http://www.decaturin.org/ +Indiana,Deer Creek Township,Delphi,http://www.cityofdelphi.org/ +Indiana,Keener Township,DeMotte,https://www.townofdemotte.com/ +Indiana,Richland Township,Dunkirk,http://www.cityofdunkirkin.com/ +Indiana,St. John Township,Dyer,http://www.townofdyer.com +Indiana,North Township,East Chicago,http://www.eastchicago.com +Indiana,Blue River Township,Edinburgh,http://www.edinburgh.in.us +Indiana,Elkhart County,Elkhart,http://www.elkhartindiana.org/ +Indiana,Richland Township,Elletsville,http://www.ellettsville.in.us +Indiana,Pipe Creek Township,Elwood,http://www.elwoodcity-in.org +Indiana,Vanderburgh County,Evansville,http://www.evansvillegov.org +Indiana,Fairmount Township,Fairmount,http://www.fairmount-in.com/ +Indiana,Ferdinand Township,Ferdinand,http://www.ferdinandindiana.org +Indiana,Fall Creek Township,Fishers,http://www.fishers.in.us +Indiana,Aboite Township,Fort Wayne,http://www.cityoffortwayne.org +Indiana,Vernon Township,Fortville,http://www.fortvilleindiana.org/ +Indiana,Center Township,Fowler,http://www.townoffowler.com/ +Indiana,Center Township,Frankfort,http://frankfort-in.gov/ +Indiana,Franklin Township,Franklin,http://www.franklin.in.gov/ +Indiana,Fremont Township,Fremont,http://www.townoffremont.org +Indiana,DeKalb County,Garrett,http://www.garrettindiana.us +Indiana,Calumet Township,Gary,https://gary.gov/ +Indiana,Grant County,Gas City,http://www.gascityindiana.com/ +Indiana,Elkhart County,Goshen,http://www.goshenindiana.org/ +Indiana,Greencastle Township,Greencastle,http://www.cityofgreencastle.com +Indiana,Dearborn County,Greendale,http://www.cityofgreendale.net/ +Indiana,Hancock County,Greenfield,http://www.greenfieldin.org +Indiana,Decatur County,Greensburg,https://www.cityofgreensburg.com/ +Indiana,Pleasant Township,Greenwood,http://www.greenwood.in.gov +Indiana,North Township,Griffith,http://griffith.in.gov +Indiana,North Township,Hammond,http://www.gohammond.com/ +Indiana,Hanover Township,Hanover,https://townofhanover.net/ +Indiana,Blackford County,Hartford City,http://www.hartfordcity.net +Indiana,Boone Township,Hebron,https://www.hebronindiana.org/ +Indiana,North Township,Highland,http://www.highland.in.gov/ +Indiana,Hobart Township,Hobart,http://www.cityofhobart.org/ +Indiana,Allen County,Huntertown,http://www.huntertown.org/ +Indiana,Patoka Township,Huntingburg,http://www.huntingburg-in.gov/ +Indiana,Huntington County,Huntington,http://www.huntington.in.us/city/ +Indiana,Green Township,Ingalls,http://townofingalls.us +Indiana,Bainbridge Township,Jasper,http://www.jasperindiana.gov +Indiana,Clark County,Jeffersonville,http://www.cityofjeff.net/ +Indiana,Grant County,Jonesboro,http://jonesboroindiana.net/ +Indiana,Wayne Township,Kendallville,http://www.kendallville-in.org +Indiana,Wayne Township,Knightstown,http://www.knightstownonline.com +Indiana,Center Township,Knox,http://www.cityofknox.net +Indiana,Howard County,Kokomo,https://www.cityofkokomo.org/ +Indiana,Center Township,La Porte,http://www.cityoflaporte.com +Indiana,Fairfield Township,Lafayette,http://www.lafayette.in.gov +Indiana,Lake County,Lake Station,http://www.lakestation-in.gov/ +Indiana,Marion County,Lawrence,http://www.cityoflawrence.org +Indiana,Dearborn County,Lawrenceburg,http://lawrenceburg-in.com/ +Indiana,Center Township,Lebanon,http://www.lebanon.in.gov/ +Indiana,Cedar Creek Township,Leo-Cedarville,http://www.leocedarville.com/ +Indiana,Center Township,Liberty,https://libertyin.gov/ +Indiana,Perry Township,Ligonier,http://ligonier-in.org/ +Indiana,Stockton Township,Linton,https://www.cityoflinton.com/ +Indiana,Cass County,Logansport,http://www.cityoflogansport.org/ +Indiana,Perry Township,Loogootee,http://loogootee.in.gov +Indiana,West Creek Township,Lowell,http://www.lowell.net/ +Indiana,Madison Township,Madison,http://madison-in.gov +Indiana,Grant County,Marion,http://www.cityofmarion.in.gov/ +Indiana,Washington Township,Martinsville,http://www.martinsville.in.gov/ +Indiana,Vernon Township,McCordsville,http://www.mccordsville.org/ +Indiana,Ross Township,Merrillville,http://www.merrillville.in.gov/ +Indiana,Michigan Township,Michigan City,http://emichigancity.com +Indiana,Middlebury Township,Middlebury,http://www.middleburyin.org/publishsite/index.cfm +Indiana,Fall Creek Township,Middletown,http://www.middletownin.com/ +Indiana,Penn Township,Mishawaka,http://www.mishawaka.in.gov/ +Indiana,Lawrence County,Mitchell,http://www.mitchell-in.gov/ +Indiana,Union Township,Monticello,http://www.monticelloin.gov +Indiana,Harrison Township,Montpelier,http://montpelier-indiana.com/ +Indiana,Brown Township,Mooresville,http://mooresville.in.gov +Indiana,Black Township,Mount Vernon,http://www.mountvernon.in.gov/ +Indiana,Delaware County Regional Airport,Muncie,http://www.cityofmuncie.com/ +Indiana,North Township,Munster,http://www.munster.org +Indiana,Elkhart County,Nappanee,http://www.nappanee.org/ +Indiana,Floyd County,New Albany,http://www.cityofnewalbany.com/ +Indiana,Henry County,New Castle,http://www.cityofnewcastle.net/ +Indiana,Adams Township,New Haven,http://www.newhavenin.org +Indiana,Pleasant Township,New Whiteland,http://newwhiteland.in.gov +Indiana,Ohio Township,Newburgh,http://www.newburgh-in.gov/ +Indiana,Hamilton County,Noblesville,http://www.cityofnoblesville.org +Indiana,Chester Township,North Manchester,http://www.nmanchester.org/ +Indiana,Center Township,North Vernon,http://northvernon-in.gov/ +Indiana,Columbia Township,Oakland City,http://www.ocindiana.com/ +Indiana,Orleans Township,Orleans,http://www.town.orleans.in.us/ +Indiana,Jefferson Township,Ossian,http://www.ossianin.com/ +Indiana,Fall Creek Township,Pendleton,http://town.pendleton.in.us +Indiana,Peru Township,Peru,http://www.cityofperu.org +Indiana,Washington Township,Petersburg,http://www.petersburg.in.gov/ +Indiana,Middle Township,Pittsboro,http://www.townofpittsboro.org +Indiana,Guilford Township,Plainfield,http://www.townofplainfield.com +Indiana,Marshall County,Plymouth,https://www.plymouthin.com/ +Indiana,Portage Township,Portage,http://www.ci.portage.in.us +Indiana,Westchester Township,Porter,http://www.townofporter.com/ +Indiana,Wayne Township,Portland,http://www.thecityofportland.net +Indiana,Patoka Township,Princeton,https://www.princeton.in.gov/ +Indiana,Marion Township,Rensselaer,http://cityofrensselaerin.com +Indiana,Boston Township,Richmond,http://richmondindiana.gov +Indiana,Randolph Township,Rising Sun,http://www.cityofrisingsun.com/ +Indiana,Fulton County,Rochester,http://www.rochester.in.us/ +Indiana,Ohio Township,Rockport,http://www.cityofrockport-in.gov/index.html +Indiana,Adams Township,Rockville,https://www.rockville-in.gov +Indiana,Rushville Township,Rushville,http://www.cityofrushville.in.gov/ +Indiana,Washington Township,Salem,http://www.cityofsalemin.com/ +Indiana,Carter Township,Santa Claus,http://www.townofsantaclaus.com/ +Indiana,St. John Township,Schererville,http://www.schererville.org +Indiana,Vienna Township,Scottsburg,http://www.cityofscottsburg.com/ +Indiana,Silver Creek Township,Sellersburg,https://www.sellersburg.org/ +Indiana,Jackson Township,Seymour,http://www.seymourin.org +Indiana,Addison Township,Shelbyville,http://www.cityofshelbyvillein.com/ +Indiana,Adams Township,Sheridan,http://www.sheridan.org/ +Indiana,St. Joseph County,South Bend,http://www.southbendin.gov +Indiana,Marion County,Southport,https://southport.in.gov +Indiana,Wayne Township,Speedway,http://www.speedwayin.gov +Indiana,Washington Township,Spencer,http://www.spencer.in.gov/ +Indiana,Center Township,St. John,https://www.stjohnin.com +Indiana,Hamilton Township,Sullivan,https://www.cityofsullivan.org/ +Indiana,Turkey Creek Township,Syracuse,http://www.syracusein.org +Indiana,Troy Township,Tell City,https://tellcity.in.gov/ +Indiana,Vigo County,Terre Haute,http://www.terrehaute.in.gov/ +Indiana,Tipton County,Tipton,https://www.tiptongov.com/ +Indiana,Wayne Township,Union City,http://www.unioncity-in.com/ +Indiana,Jefferson Township,Upland,https://uplandindiana.com/ +Indiana,Center Township,Valparaiso,http://www.ci.valparaiso.in.us/ +Indiana,Van Buren Township,Veedersburg,https://www.veedersburg.in.gov +Indiana,Johnson Township,Versailles,http://townofversailles.com/ +Indiana,Vincennes Township,Vincennes,http://www.vincennes.org +Indiana,Noble Township,Wabash,http://www.cityofwabash.com/ +Indiana,Lincoln Township,Walkerton,http://www.walkerton.org/ +Indiana,Plain Township,Warsaw,http://warsaw.in.gov/ +Indiana,Washington Township,Washington,http://www.washingtonin.us +Indiana,Wabash Township,West Lafayette,https://www.westlafayette.in.gov/ +Indiana,Hamilton County,Westfield,http://westfield.in.gov +Indiana,New Durham Township,Westville,http://www.westville.us +Indiana,Pleasant Township,Whiteland,http://www.townofwhiteland.com +Indiana,Worth Township,Whitestown,http://whitestown.in.gov/ +Indiana,North Township,Whiting,http://whitingindiana.com +Indiana,Monroe Township,Winamac,http://townofwinamac.com/ +Indiana,White River Township,Winchester,http://www.winchester-in.gov/ +Indiana,Wayne Township,Winona Lake,http://www.winonalake.net/ +Indiana,Maumee Township,Woodburn,https://www.cityofwoodburn.org/ +Indiana,Mount Pleasant Township,Yorktown,http://www.yorktownindiana.org/ +Indiana,Eagle Township,Zionsville,http://www.zionsville-in.gov/ +Iowa,Polk County,Altoona,http://www.altoona-iowa.com/ +Iowa,Story County,Ames,http://www.cityofames.org/ +Iowa,Polk County,Ankeny,http://www.ankenyiowa.gov/ +Iowa,Scott County,Bettendorf,http://www.bettendorf.org/ +Iowa,Des Moines County,Burlington,http://burlingtoniowa.org/ +Iowa,Black Hawk County,Cedar Falls,https://www.cedarfalls.com/ +Iowa,Linn County,Cedar Rapids,http://www.cedar-rapids.org/ +Iowa,Clinton County,Clinton,http://www.cityofclintoniowa.us/ +Iowa,Polk County,Clive,http://www.cityofclive.com +Iowa,Johnson County,Coralville,http://www.coralville.org/ +Iowa,Pottawattamie County,Council Bluffs,http://www.councilbluffs-ia.gov/ +Iowa,Scott County,Davenport,http://www.davenportiowa.com/ +Iowa,Polk County,Des Moines,http://www.dmgov.org/ +Iowa,Dubuque County,Dubuque,http://www.cityofdubuque.org +Iowa,Webster County,Fort Dodge,http://www.fortdodgeiowa.org/ +Iowa,Warren County,Indianola,http://www.indianolaiowa.gov/ +Iowa,Johnson County,Iowa City,https://www.icgov.org/ +Iowa,Polk County,Johnston,http://www.cityofjohnston.com/ +Iowa,Linn County,Marion,http://www.cityofmarion.org +Iowa,Marshall County,Marshalltown,http://www.marshalltown-ia.gov/ +Iowa,Cerro Gordo County,Mason City,http://www.masoncity.net/ +Iowa,Muscatine County,Muscatine,http://www.muscatineiowa.gov/ +Iowa,Jasper County,Newton,http://www.newtongov.org +Iowa,Johnson County,North Liberty,http://www.northlibertyiowa.org/ +Iowa,Douglas County,Omaha,http://www.cityofomaha.org +Iowa,Wapello County,Ottumwa,http://ottumwa.us +Iowa,Woodbury County,Sioux City,http://sioux-city.org +Iowa,Polk County,Urbandale,http://www.urbandale.org +Iowa,Black Hawk County,Waterloo,http://cityofwaterlooiowa.com/ +Iowa,Dallas County,Waukee,http://www.waukee.org +Iowa,Polk County,West Des Moines,http://www.wdm.iowa.gov/ +Kansa,Dickinson County,Abilene,https://www.abilenecityhall.com/ +Kansa,Butler County,Andover,https://www.andoverks.com/ +Kansa,Cowley County,Arkansas City,https://www.arkcity.org/ +Kansa,Shannon Township,Atchison,https://cityofatchison.com/ +Kansa,Butler County,Augusta,https://www.augustaks.org/ +Kansa,Leavenworth County,Basehor,https://www.cityofbasehor.org/ +Kansa,Sedgwick County,Bel Aire,https://www.belaireks.gov/ +Kansa,Wyandotte County,Bonner Springs,https://bonnersprings.org/ +Kansa,Neosho County,Chanute,https://www.chanute.org/ +Kansa,Montgomery County,Coffeyville,https://www.coffeyville.com/ +Kansa,Thomas County,Colby,https://www.cityofcolby.com/ +Kansa,Cloud County,Concordia,https://www.concordiaks.org/ +Kansa,Lexington Township,De Soto,http://www.desotoks.us/ +Kansa,Sedgwick County,Derby,http://www.derbyweb.com/ +Kansa,Ford County,Dodge City,https://www.dodgecity.org/ +Kansa,Butler County,El Dorado,https://eldoks.com/ +Kansa,Lyon County,Emporia,https://www.emporiaks.gov/ +Kansa,Douglas County,Eudora,https://www.cityofeudoraks.gov/ +Kansa,Bourbon County,Fort Scott,https://www.fscity.org/ +Kansa,Finney County,Garden City,https://www.garden-city.org/ +Kansa,Johnson County,Gardner,https://www.gardnerkansas.gov/ +Kansa,Sedgwick County,Goddard,https://www.goddardks.gov/ +Kansa,Barton County,Great Bend,https://www.greatbendks.net/ +Kansa,Ellis County,Hays,https://www.haysusa.com/ +Kansa,Sedgwick County,Haysville,https://www.haysville-ks.com/ +Kansa,Reno County,Hutchinson,https://www.hutchgov.com/ +Kansa,Montgomery County,Independence,https://www.independenceks.gov/ +Kansa,Allen County,Iola,https://www.cityofiola.com/ +Kansa,Geary County,Junction City,https://www.junctioncity-ks.gov/ +Kansa,Wyandotte County,Kansas City,https://www.wycokck.org/ +Kansa,Leavenworth County,Lansing,https://www.lansingks.org/ +Kansa,Douglas County,Lawrence,https://lawrenceks.org/ +Kansa,Leavenworth County,Leavenworth,https://www.leavenworthks.org/ +Kansa,Johnson County,Leawood,https://www.leawood.org/ +Kansa,Johnson County,Lenexa,https://www.lenexa.com/ +Kansa,Seward County,Liberal,https://www.cityofliberal.org/ +Kansa,Sedgwick County,Maize,https://cityofmaize.org/ +Kansa,Riley County,Manhattan,https://cityofmhk.com/ +Kansa,McPherson County,McPherson,https://www.mcphersonks.org/ +Kansa,Johnson County,Merriam,https://www.merriam.org/ +Kansa,Johnson County,Mission,https://www.missionks.org/ +Kansa,Sedgwick County,Mulvane,https://www.mulvanekansas.com/ +Kansa,Newton Township,Newton,https://www.newtonkansas.com/ +Kansa,Johnson County,Olathe,https://www.olatheks.org/ +Kansa,Franklin County,Ottawa,https://www.ottawaks.gov/ +Kansa,Johnson County,Overland Park,https://www.opkansas.org/ +Kansa,Miami County,Paola,https://cityofpaola.com/ +Kansa,Sedgwick County,Park City,https://www.parkcityks.com/ +Kansa,Labette County,Parsons,https://www.parsonsks.com/ +Kansa,Crawford County,Pittsburg,https://www.pittks.org/ +Kansa,Johnson County,Prairie Village,https://www.pvkansas.com/ +Kansa,Pratt County,Pratt,https://www.cityofprattks.com/ +Kansa,Johnson County,Roeland Park,https://www.roelandpark.net/ +Kansa,Saline County,Salina,https://salina-ks.gov/ +Kansa,Johnson County,Shawnee,https://www.cityofshawnee.org/ +Kansa,Johnson County,Spring Hill,https://www.springhillks.gov/ +Kansa,Leavenworth County,Tonganoxie,https://www.tonganoxie.org/ +Kansa,Shawnee County,Topeka,https://www.topeka.org/ +Kansa,Grant County,Ulysses,https://www.cityofulysses.com/ +Kansa,Sedgwick County,Valley Center,https://valleycenterks.org/ +Kansa,Sumner County,Wellington,https://www.cityofwellington.net/ +Kansa,Sedgwick County,Wichita,http://www.wichita.gov/ +Kansa,Walnut Township,Winfield,https://www.winfieldks.org/ +Kentucky,Logan County,Adairville,http://adairvilleky.us +Kentucky,Campbell County,Alexandria,http://alexandriaky.org/ +Kentucky,Jefferson County,Anchorage,http://www.cityofanchorage.org +Kentucky,Boyd County,Ashland,http://www.ashlandky.gov +Kentucky,Logan County,Auburn,http://auburnky.us +Kentucky,Jefferson County,Audubon Park,https://www.audubonparkky.org/ +Kentucky,Bracken County,Augusta,http://www.augustaky.com +Kentucky,Jefferson County,Bancroft,http://cityofbancroftky.org +Kentucky,Jefferson County,Barbourmeade,http://barbourmeade.org +Kentucky,Knox County,Barbourville,http://www.cityofbarbourville.com +Kentucky,Nelson County,Bardstown,http://www.cityofbardstown.org/ +Kentucky,Lee County,Beattyville,http://www.beattyville.org +Kentucky,Ohio County,Beaver Dam,https://beaverdam.ky.gov// +Kentucky,Jefferson County,Beechwood Village,http://www.beechwoodvillage.org +Kentucky,Greenup County,Bellefonte,http://bellefonte.ky.gov +Kentucky,Jefferson County,Bellemeade,http://www.cityofbellemeade.org +Kentucky,Campbell County,Bellevue,http://www.bellevueky.org +Kentucky,Harlan County,Benham,http://www.benhamky.org +Kentucky,Marshall County,Benton,http://www.cityofbenton.org +Kentucky,Madison County,Berea,http://bereaky.gov +Kentucky,Harrison County,Berry,http://cityofberry.com/ +Kentucky,Nelson County,Bloomfield,http://www.bloomfieldky.com +Kentucky,Jefferson County,Blue Ridge Manor,http://blueridgemanorky.org +Kentucky,Warren County,Bowling Green,http://www.bgky.org/ +Kentucky,Meade County,Brandenburg,http://www.brandenburgky.org +Kentucky,Jefferson County,Briarwood,http://www.briarwoodky.com +Kentucky,Kenton County,Bromley,http://www.cityofbromley.com +Kentucky,Jefferson County,Brownsboro Farm,http://brownsborofarm.org +Kentucky,Jefferson County,Brownsboro Village,http://www.brownsborovillage.org +Kentucky,Cumberland County,Burkesville,http://www.cityofburkesville.org/ +Kentucky,Trigg County,Cadiz,http://cadiz.ky.gov +Kentucky,Marshall County,Calvert City,http://www.calvertcity.com +Kentucky,Henry County,Campbellsburg,http://www.cityofcampbellsburg.org +Kentucky,Taylor County,Campbellsville,http://www.campbellsville.us +Kentucky,Grayson County,Caneyville,http://caneyville.ky.gov +Kentucky,Nicholas County,Carlisle,https://carlisle.ky.gov +Kentucky,Carroll County,Carrollton,http://carrolltonky.net +Kentucky,Barren County,Cave City,http://www.cityofcavecity.com +Kentucky,Muhlenberg County,Central City,http://cityofcentralcity.com/ +Kentucky,Grayson County,Clarkson,http://clarkson.ky.gov +Kentucky,Powell County,Clay City,https://claycity.ky.gov/ +Kentucky,Breckinridge County,Cloverport,http://www.cloverport.com +Kentucky,Pike County,Coal Run Village,http://www.coalrunky.gov/ +Kentucky,Campbell County,Cold Spring,http://www.coldspringky.com +Kentucky,Jefferson County,Coldstream,http://www.coldstreamky.org +Kentucky,Adair County,Columbia,http://www.cityofcolumbiaky.com +Kentucky,Whitley County,Corbin,http://www.corbin-ky.gov/ +Kentucky,Grant County,Corinth,http://corinth.ky.gov +Kentucky,Henderson County,Corydon,http://www.corydonkentucky.com/ +Kentucky,Kenton County,Covington,http://www.covingtonky.gov/ +Kentucky,Jefferson County,Creekside,http://www.creeksidecity.com +Kentucky,Kenton County,Crescent Springs,http://www.crescent-springs.ky.us +Kentucky,Kenton County,Crestview Hills,http://www.crestviewhills.com +Kentucky,Grant County,Crittenden,https://crittenden.ky.gov/ +Kentucky,Christian County,Crofton,http://www.croftonky.com +Kentucky,Jefferson County,Crossgate,http://crossgateky.org +Kentucky,Harrison County,Cynthiana,http://www.cynthianaky.com +Kentucky,Boyle County,Danville,http://www.danvilleky.gov +Kentucky,Caldwell County,Dawson Springs,http://dawsonspringsky.com +Kentucky,Campbell County,Dayton,http://www.daytonky.com +Kentucky,Webster County,Dixon,http://www.cityofdixon.net/ +Kentucky,Jefferson County,Douglass Hills,http://cityofdouglasshills.com +Kentucky,Jefferson County,Druid Hills,http://druidhillsky.gov +Kentucky,Grant County,Dry Ridge,http://cdrky.org +Kentucky,Hopkins County,Earlington,https://earlingtongovcity.com/ +Kentucky,Lyon County,Eddyville,http://eddyvilleky.org +Kentucky,Kenton County,Edgewood,http://www.edgewoodky.com +Kentucky,Metcalfe County,Edmonton,http://cityofedmontonky.com/ +Kentucky,Hardin County,Elizabethtown,http://www.elizabethtownky.org +Kentucky,Pike County,Elkhorn City,http://www.elkhorncity.org/ +Kentucky,Todd County,Elkton,http://www.elktonky.com +Kentucky,Kenton County,Elsmere,http://www.cityofelsmere.com +Kentucky,Henry County,Eminence,http://eminence.ky.gov +Kentucky,Kenton County,Erlanger,http://erlangerky.gov/ +Kentucky,Harlan County,Evarts,http://evartskentucky.com +Kentucky,Kenton County,Fairview,http://fairview.ky.gov +Kentucky,Pendleton County,Falmouth,http://cityoffalmouth.com/ +Kentucky,Jefferson County,Fincastle,http://www.cityoffincastle.com/ +Kentucky,Greenup County,Flatwoods,http://www.flatwoodsky.org +Kentucky,Fleming County,Flemingsburg,http://www.flemingsburgky.org +Kentucky,Boone County,Florence,https://www.florence-ky.gov/ +Kentucky,Ohio County,Fordsville,http://www.fordsvilleky.com/ +Kentucky,Jefferson County,Forest Hills,http://www.city-of-forest-hills.com/ +Kentucky,Kenton County,Fort Mitchell,http://fortmitchell.com/ +Kentucky,Campbell County,Fort Thomas,http://ftthomas.org +Kentucky,Kenton County,Fort Wright,http://www.fortwright.com +Kentucky,Monroe County,Fountain Run,https://www.fountainrunkentucky.com +Kentucky,Bullitt County,Fox Chase,http://www.cityoffoxchase.org +Kentucky,Franklin County,Frankfort,http://www.frankfort.ky.gov/ +Kentucky,Simpson County,Franklin,http://www.franklinky.org +Kentucky,Fulton County,Fulton,http://fulton-ky.com +Kentucky,Scott County,Georgetown,https://www.georgetownky.gov/ +Kentucky,Barren County,Glasgow,http://www.cityofglasgow.org +Kentucky,Jefferson County,Glenview,http://www.glenviewky.gov +Kentucky,Jefferson County,Glenview Hills,http://glenviewhillsky.blogspot.com +Kentucky,Oldham County,Goshen,http://cityofgoshen.com/ +Kentucky,Livingston County,Grand Rivers,http://www.grandrivers.org +Kentucky,Jefferson County,Graymoor-Devondale,http://www.graymoor-devondale.com +Kentucky,Carter County,Grayson,http://graysonky.net +Kentucky,Jefferson County,Green Spring,http://www.cityofgreenspring.com +Kentucky,Green County,Greensburg,http://www.greensburgonline.com +Kentucky,Greenup County,Greenup,http://www.greenupky.net +Kentucky,Muhlenberg County,Greenville,https://www.greenvilleky.org/ +Kentucky,Todd County,Guthrie,http://guthrieky.com/ +Kentucky,Hopkins County,Hanson,http://www.cityofhanson.com +Kentucky,Breckinridge County,Hardinsburg,http://hardinsburg.ky.gov +Kentucky,Mercer County,Harrodsburg,http://www.harrodsburgcity.org/ +Kentucky,Ohio County,Hartford,https://hartfordky.org/ +Kentucky,Hancock County,Hawesville,http://www.hawesville.us +Kentucky,Perry County,Hazard,http://hazardky.gov/ +Kentucky,Calloway County,Hazel,http://hazelky.com +Kentucky,Henderson County,Henderson,http://www.cityofhendersonky.org +Kentucky,Jefferson County,Heritage Creek,http://www.heritagecreek.ky.gov +Kentucky,Fulton County,Hickman,https://hickman.cityof.org/ +Kentucky,Campbell County,Highland Heights,http://hhky.com +Kentucky,Bullitt County,Hillview,http://www.hillviewky.org/ +Kentucky,LaRue County,Hodgenville,http://hodgenville.ky.gov +Kentucky,Jefferson County,Hollyvilla,http://hollyvilla.org/ +Kentucky,Christian County,Hopkinsville,http://www.hopkinsvilleky.us +Kentucky,Hart County,Horse Cave,http://www.horsecaveky.com +Kentucky,Jefferson County,Houston Acres,http://www.neighborhoodlink.com/Houston_Acres +Kentucky,Jefferson County,Hurstbourne,http://www.hurstbourne.org +Kentucky,Jefferson County,Hurstbourne Acres,http://hurstbourneacres.org +Kentucky,Lincoln County,Hustonville,http://www.hustonvilleky.com/index.html +Kentucky,Leslie County,Hyden,http://www.cityofhyden.com +Kentucky,Kenton County,Independence,http://www.cityofindependence.org +Kentucky,Jefferson County,Indian Hills,http://www.indianhillsky.org/ +Kentucky,Martin County,Inez,http://www.inez.ky.gov/ +Kentucky,Breckinridge County,Irvington,http://irvington.ky.gov +Kentucky,Jefferson County,Jeffersontown,http://www.jeffersontownky.com +Kentucky,Letcher County,Jenkins,http://www.cityofjenkins.org +Kentucky,Boyle County,Junction City,http://jcky.us/ +Kentucky,Jefferson County,Kingsley,http://www.cityofkingsley.org +Kentucky,Lyon County,Kuttawa,http://www.cityofkuttawa.com +Kentucky,Oldham County,La Grange,http://www.lagrangeky.net/ +Kentucky,Kenton County,Lakeside Park,http://www.cityoflakesidepark.com/ +Kentucky,Rowan County,Lakeview Heights,http://www.lakeviewheightsky.us +Kentucky,Garrard County,Lancaster,http://www.cityoflancasterky.com +Kentucky,Jefferson County,Langdon Place,http://www.langdonplace.com +Kentucky,Anderson County,Lawrenceburg,http://www.lawrenceburgky.org/ +Kentucky,Marion County,Lebanon,http://lebanon.ky.gov +Kentucky,Grayson County,Leitchfield,http://www.leitchfield.org +Kentucky,Logan County,Lewisburg,http://cityoflewisburgky.com +Kentucky,Hancock County,Lewisport,http://www.lewisport.cityof.org +Kentucky,Fayette County,Lexington,http://www.lexingtonky.gov +Kentucky,Casey County,Liberty,http://libertykentucky.org +Kentucky,Jefferson County,Lincolnshire,http://www.cityoflincolnshire.com +Kentucky,McLean County,Livermore,http://www.cityoflivermore.info +Kentucky,Rockcastle County,Livingston,http://www.livingstonky.com/ +Kentucky,Laurel County,London,http://www.londonky.gov +Kentucky,Lawrence County,Louisa,http://www.cityoflouisa.org +Kentucky,Jefferson County,Louisville,http://louisvilleky.gov/ +Kentucky,Kenton County,Ludlow,http://www.ludlow.org/ +Kentucky,Jefferson County,Lyndon,http://cityoflyndon.org +Kentucky,Jefferson County,Lynnview,http://cityoflynnview.com +Kentucky,Hopkins County,Madisonville,http://madisonvilleliving.com/ +Kentucky,Clay County,Manchester,https://welovemanchester.com/ +Kentucky,Crittenden County,Marion,http://www.marionky.gov +Kentucky,Graves County,Mayfield,http://mayfieldky.gov/ +Kentucky,Mason County,Maysville,http://www.cityofmaysville.com +Kentucky,Jefferson County,Meadow Vale,http://cityofmeadowvale.org +Kentucky,Bell County,Middlesboro,http://www.middlesborokentucky.net +Kentucky,Jefferson County,Middletown,http://www.cityofmiddletownky.org +Kentucky,Woodford County,Midway,https://www.meetmeinmidway.com/ +Kentucky,Bourbon County,Millersburg,http://www.millersburgky.com +Kentucky,Trimble County,Milton,http://milton.ky.gov/ +Kentucky,Wayne County,Monticello,https://www.monticelloky.gov/ +Kentucky,Rowan County,Morehead,http://morehead-ky.gov +Kentucky,Union County,Morganfield,https://morganfield.ky.gov/ +Kentucky,Butler County,Morgantown,http://www.morgantown-ky.com +Kentucky,Hopkins County,Mortons Gap,http://mortonsgap.ky.gov +Kentucky,Montgomery County,Mount Sterling,http://mtsterling.ky.gov/ +Kentucky,Rockcastle County,Mount Vernon,https://mtvernonky.org/ +Kentucky,Bullitt County,Mount Washington,https://mtwashingtonky.org/ +Kentucky,Meade County,Muldraugh,http://muldraugh.ky.gov +Kentucky,Hart County,Munfordville,http://cityofmunfordville.com +Kentucky,Calloway County,Murray,http://www.murrayky.gov +Kentucky,Jefferson County,Murray Hill,http://www.cityofmurrayhill.com +Kentucky,Henry County,New Castle,http://www.newcastleky.com +Kentucky,Campbell County,Newport,http://www.newportky.gov +Kentucky,Jessamine County,Nicholasville,http://www.nicholasville.org +Kentucky,Jefferson County,Norbourne Estates,http://www.norbourneestates.org +Kentucky,Jefferson County,Northfield,http://www.cityofnorthfield.com +Kentucky,Hopkins County,Nortonville,http://www.nortonvilleky.us/ +Kentucky,Jefferson County,Norwood,http://norwoodky.com +Kentucky,Christian County,Oak Grove,http://www.oakgroveky.org +Kentucky,Warren County,Oakland,https://oakland.ky.gov +Kentucky,Carter County,Olive Hill,http://olivehill.ky.gov +Kentucky,Daviess County,Owensboro,http://www.owensboro.org +Kentucky,McCracken County,Paducah,http://paducahky.gov +Kentucky,Johnson County,Paintsville,http://www.cityofpaintsville.net +Kentucky,Bourbon County,Paris,http://paris.ky.gov +Kentucky,Barren County,Park City,http://parkcity.ky.gov +Kentucky,Kenton County,Park Hills,http://www.parkhillsky.net +Kentucky,Jefferson County,Parkway Village,http://www.parkwayvillageky.com +Kentucky,Oldham County,Pewee Valley,http://www.peweevalleyky.org +Kentucky,Pike County,Pikeville,http://www.pikevilleky.gov +Kentucky,Bell County,Pineville,http://www.thecityofpineville.com +Kentucky,Bullitt County,Pioneer Village,http://www.cityofpioneervillage.org +Kentucky,Jefferson County,Plantation,http://www.plantationky.com +Kentucky,Henry County,Pleasureville,http://pleasurevilleky.com/ +Kentucky,Floyd County,Prestonsburg,http://prestonsburgcity.org/ +Kentucky,Caldwell County,Princeton,http://www.princeton.ky.gov +Kentucky,Jefferson County,Prospect,http://prospectky.us +Kentucky,Webster County,Providence,http://www.webstercountyky.com/providence.php +Kentucky,Greenup County,Raceland,https://www.racelandky.org +Kentucky,Hardin County,Radcliff,http://www.radcliff.org +Kentucky,Jefferson County,Richlawn,http://www.cityofrichlawn.com +Kentucky,Madison County,Richmond,http://www.richmond.ky.us +Kentucky,Oldham County,River Bluff,https://cityofriverbluff.com/ +Kentucky,Jefferson County,Riverwood,https://www.riverwoodky.org/ +Kentucky,Jefferson County,Rolling Fields,http://rollingfieldsky.org +Kentucky,Jefferson County,Rolling Hills,http://cityofrollinghillsky.com +Kentucky,Greenup County,Russell,http://www.russellky.net +Kentucky,Russell County,Russell Springs,https://russellsprings.net/ +Kentucky,Logan County,Russellville,http://www.russellvilleky.org +Kentucky,Scott County,Sadieville,http://www.cityofsadieville.com +Kentucky,Pulaski County,Science Hill,http://www.cityofsciencehill.com +Kentucky,Allen County,Scottsville,http://www.scottsvilleky.org +Kentucky,Jefferson County,Seneca Gardens,http://www.cityofsenecagardens.com +Kentucky,Shelby County,Shelbyville,http://shelbyvillekentucky.com +Kentucky,Bullitt County,Shepherdsville,http://shepherdsville.net +Kentucky,Jefferson County,Shively,http://www.shivelyky.gov +Kentucky,Campbell County,Silver Grove,http://cityofsilvergroveky.com +Kentucky,Shelby County,Simpsonville,http://www.cityofsimpsonvilleky.com +Kentucky,Warren County,Smiths Grove,http://www.smithsgrove.org/ +Kentucky,Pulaski County,Somerset,http://www.cityofsomerset.com/ +Kentucky,Campbell County,Southgate,http://southgateky.org/ +Kentucky,Jefferson County,Spring Mill,http://cityofspringmill.com +Kentucky,Washington County,Springfield,http://www.springfieldky.org/ +Kentucky,Jefferson County,St. Matthews,http://www.stmatthewsky.gov +Kentucky,Jefferson County,St. Regis Park,http://www.stregispark.net +Kentucky,Lincoln County,Stanford,http://www.stanford.ky.gov +Kentucky,Powell County,Stanton,https://www.stantonky.gov/ +Kentucky,Jefferson County,Strathmoor Manor,http://www.cityofstrathmoormanor.com/ +Kentucky,Jefferson County,Strathmoor Village,http://www.cityofstrathmoorvillage.com +Kentucky,Jefferson County,Sycamore,http://www.cityofsycamore.net +Kentucky,Kenton County,Taylor Mill,http://www.taylormillky.gov +Kentucky,Spencer County,Taylorsville,http://taylorsville.ky.gov/Pages/default.aspx +Kentucky,Jefferson County,Thornhill,http://cityofthornhill.org +Kentucky,Monroe County,Tompkinsville,http://tompkinsvilleky.gov/ +Kentucky,Todd County,Trenton,http://www.trentonky.org/ +Kentucky,Boone County,Union,http://www.cityofunionky.org/ +Kentucky,Lewis County,Vanceburg,http://www.cityofvanceburg.com +Kentucky,Woodford County,Versailles,https://versailles.ky.gov/ +Kentucky,Kenton County,Villa Hills,http://villahillsky.org/ +Kentucky,Hardin County,Vine Grove,http://www.vinegrove.org +Kentucky,Boone County,Walton,http://www.cityofwalton.org +Kentucky,Gallatin County,Warsaw,http://www.cityofwarsawky.org +Kentucky,Jefferson County,Watterson Park,http://wattersonparkky.com +Kentucky,Jefferson County,Wellington,http://cityofwellingtonky.com +Kentucky,Jefferson County,West Buechel,http://www.westbuechelky.gov +Kentucky,Morgan County,West Liberty,http://www.cityofwestliberty.com/ +Kentucky,Hardin County,West Point,http://westpoint.ky.gov +Kentucky,Jefferson County,Westwood,http://www.cityofwestwood.org +Kentucky,Letcher County,Whitesburg,http://www.cityofwhitesburg.com +Kentucky,Ballard County,Wickliffe,https://wickliffe.ky.gov +Kentucky,Campbell County,Wilder,https://WilderKY.gov/ +Kentucky,Whitley County,Williamsburg,http://www.williamsburgky.com/ +Kentucky,Grant County,Williamstown,http://wtownky.org +Kentucky,Jessamine County,Wilmore,http://www.wilmore.org/ +Kentucky,Clark County,Winchester,http://winchesterky.com +Kentucky,Jefferson County,Windy Hills,http://cityofwindyhills.com +Kentucky,Jefferson County,Woodlawn Park,http://www.woodlawnpark.com +Kentucky,Jefferson County,Worthington Hills,http://www.cityofworthingtonhillsky.gov/ +Lousiana,Greenup County,Abbeville,http://www.cityofabbeville.net +Lousiana,Greenup County,Abita Springs,https://www.townofabitasprings.com +Lousiana,Greenup County,Addis,http://www.addisla.org/ +Lousiana,Greenup County,Albany,http://townofalbanyla.com/ +Lousiana,Greenup County,Alexandria,http://www.cityofalexandriala.com +Lousiana,Greenup County,Amite City,http://www.townofamitecity.com/ +Lousiana,Greenup County,Arcadia,http://www.arcadialouisiana.org +Lousiana,Greenup County,Arnaudville,http://www.arnaudvillela.com +Lousiana,Greenup County,Athens,http://www.athensla.com +Lousiana,Greenup County,Baker,http://cityofbakerla.us +Lousiana,Greenup County,Ball,http://www.ball.govoffice2.com/ +Lousiana,Greenup County,Bastrop,https://www.cityofbastrop.com/ +Lousiana,Greenup County,Baton Rouge,https://www.brla.gov +Lousiana,Greenup County,Benton,http://www.bentonlouisiana.webs.com/ +Lousiana,Greenup County,Bernice,http://www.bernicela.org +Lousiana,Greenup County,Berwick,http://www.townofberwick.org +Lousiana,Greenup County,Blanchard,http://www.townofblanchard.us +Lousiana,Greenup County,Bogalusa,http://www.bogalusa.org +Lousiana,Greenup County,Bossier City,http://www.bossiercity.org +Lousiana,Greenup County,Breaux Bridge,http://www.breauxbridgelive.com +Lousiana,Greenup County,Broussard,http://www.broussardla.com +Lousiana,Greenup County,Brusly,https://www.bruslyla.com/ +Lousiana,Greenup County,Bunkie,http://bunkiecityhall.com +Lousiana,Greenup County,Carencro,http://www.carencro.org/ +Lousiana,Greenup County,Central,http://centralgov.com +Lousiana,Greenup County,Chatham,http://www.townofchatham.org +Lousiana,Greenup County,Choudrant,http://www.choudrant.org +Lousiana,Greenup County,Church Point,http://www.churchpoint.org +Lousiana,Greenup County,Clinton,http://www.townofclintonla.com/ +Lousiana,Greenup County,Cottonport,https://townofcottonport.com +Lousiana,Greenup County,Coushatta,https://townofcoushatta.com/ +Lousiana,Greenup County,Covington,http://www.covla.com +Lousiana,Greenup County,Crowley,http://www.crowley-la.com/ +Lousiana,Greenup County,Delcambre,http://www.townofdelcambre.net +Lousiana,Greenup County,Delhi,https://townofdelhi.municipalimpact.com/ +Lousiana,Greenup County,Denham Springs,https://www.cityofdenhamsprings.com +Lousiana,Greenup County,DeQuincy,http://www.dequincy.org/ +Lousiana,Greenup County,DeRidder,http://www.cityofderidder.org +Lousiana,Greenup County,Dixie Inn,http://villageofdixieinn.com/ +Lousiana,Greenup County,Donaldsonville,http://www.donaldsonville-la.gov/ +Lousiana,Greenup County,Dubach,http://www.dubachla.com +Lousiana,Greenup County,Duson,http://townofduson.com +Lousiana,Greenup County,Elizabeth,https://villageofelizabeth.com +Lousiana,Greenup County,Erath,http://townoferath.com/ +Lousiana,Greenup County,Eunice,http://www.eunice-la.com +Lousiana,Greenup County,Evergreen,http://www.evergreenla.org +Lousiana,Greenup County,Farmerville,http://www.farmerville.org +Lousiana,Greenup County,Fenton,http://www.villageoffenton.com +Lousiana,Greenup County,Fisher,http://www.toledobendlakecountry.com/ +Lousiana,Greenup County,Florien,http://villageofflorien.com/ +Lousiana,Greenup County,Folsom,http://www.villageoffolsom.com/ +Lousiana,Greenup County,Fordoche,https://www.fordoche.org/ +Lousiana,Greenup County,Forest Hill,https://foresthill-la.com/ +Lousiana,Greenup County,Franklin,http://www.franklin-la.com +Lousiana,Greenup County,Franklinton,http://www.townoffranklinton.com +Lousiana,Greenup County,French Settlement,https://www.livingstonparishla.gov/our-parish/page/french-settlement +Lousiana,Greenup County,Golden Meadow,https://www.townofgoldenmeadow-la.gov/ +Lousiana,Greenup County,Gonzales,http://www.gonzalesla.com +Lousiana,Greenup County,Grambling,http://cityofgrambling.org/ +Lousiana,Greenup County,Gramercy,http://www.townofgramercy.com/ +Lousiana,Greenup County,Grand Cane,http://www.villageofgrandcane.com +Lousiana,Greenup County,Grand Isle,https://www.townofgrandisle.com +Lousiana,Greenup County,Greenwood,http://greenwoodla.org +Lousiana,Greenup County,Gretna,http://www.gretnala.com +Lousiana,Greenup County,Gueydan,http://www.gueydan.org/ +Lousiana,Greenup County,Hammond,http://www.hammond.org/ +Lousiana,Greenup County,Harahan,http://www.cityofharahan.com +Lousiana,Greenup County,Haughton,http://www.townofhaughton.org +Lousiana,Greenup County,Haynesville,http://haynesvillela.org/ +Lousiana,Greenup County,Hessmer,http://www.hessmer.com +Lousiana,Greenup County,Homer,https://www.townofhomer.com/ +Lousiana,Greenup County,Hornbeck,http://townofhornbeck.com +Lousiana,Greenup County,Houma,http://www.tpcg.org/ +Lousiana,Greenup County,Iowa,http://iowala.org +Lousiana,Greenup County,Jackson,http://www.jacksonla.com +Lousiana,Greenup County,Jean Lafitte,http://www.townofjeanlafitte.com/ +Lousiana,Greenup County,Jeanerette,http://www.jeanerette.com +Lousiana,Greenup County,Jena,http://townofjena.com +Lousiana,Greenup County,Jennings,http://www.cityofjennings.com +Lousiana,Greenup County,Jonesboro,https://www.jonesborola.net +Lousiana,Greenup County,Kaplan,https://www.kaplanla.com/ +Lousiana,Greenup County,Kenner,http://www.kenner.la.us +Lousiana,Greenup County,Kinder,https://townofkinder.com/ +Lousiana,Greenup County,Krotz Springs,http://krotzsprings.net/ +Lousiana,Greenup County,Lafayette,https://www.lafayettela.gov/ +Lousiana,Greenup County,Lake Arthur,http://www.townoflakearthur.org +Lousiana,Greenup County,Lake Charles,http://www.cityoflakecharles.com +Lousiana,Greenup County,Lake Providence,http://www.lakeprovidencela.gov/ +Lousiana,Greenup County,Leesville,http://leesvillela.gov/ +Lousiana,Greenup County,Leonville,https://townofleonville.com/ +Lousiana,Greenup County,Lincoln Parish,http://www.lincolnparish.org/ +Lousiana,Greenup County,Livingston,http://www.townoflivingston.com/ +Lousiana,Greenup County,Livonia,http://www.livoniala.net/ +Lousiana,Greenup County,Lockport,http://www.townoflockport.com +Lousiana,Greenup County,Logansport,http://www.townoflogansport.com +Lousiana,Greenup County,Loreauville,http://www.loreauville.us/ +Lousiana,Greenup County,Madisonville,http://www.townofmadisonville.org +Lousiana,Greenup County,Mamou,https://mamou.municipalimpact.com/ +Lousiana,Greenup County,Mandeville,http://www.cityofmandeville.com/ +Lousiana,Greenup County,Mansfield,http://cityofmansfield.net/ +Lousiana,Greenup County,Maringouin,https://www.townofmaringouin.net/ +Lousiana,Greenup County,Marion,http://www.townofmarionla.com/ +Lousiana,Greenup County,Marksville,https://www.cityofmarksville.com/ +Lousiana,Greenup County,Melville,https://www.melvillela.com/ +Lousiana,Greenup County,Merryville,http://www.merryville.us +Lousiana,Greenup County,Minden,http://www.mindenusa.com +Lousiana,Greenup County,Monroe,https://monroela.us/ +Lousiana,Greenup County,Moreauville,https://www.moreauville.org/ +Lousiana,Greenup County,Morgan City,http://www.cityofmc.com +Lousiana,Greenup County,Natchitoches,http://www.natchitochesla.gov/ +Lousiana,Greenup County,New Iberia,http://www.cityofnewiberia.com/site.php +Lousiana,Greenup County,New Llano,http://www.townofnewllano.com +Lousiana,Greenup County,New Roads,https://newroads.net +Lousiana,Greenup County,Oak Grove,http://townofoakgrove.com +Lousiana,Greenup County,Oakdale,https://www.cityofoakdale.net/ +Lousiana,Greenup County,Oil City,http://www.townofoilcity.com +Lousiana,Greenup County,Olla,http://www.townofolla.com/ +Lousiana,Greenup County,Opelousas,http://www.cityofopelousas.com +Lousiana,Greenup County,Palmetto,https://palmetto-la.com/ +Lousiana,Greenup County,Parks,http://www.villageofparks.com/ +Lousiana,Greenup County,Patterson,http://cityofpattersonla.gov/ +Lousiana,Greenup County,Pearl River,http://pearlriverla.com/ +Lousiana,Greenup County,Pineville,https://www.pineville.net +Lousiana,Greenup County,Pioneer,http://www.villageofpioneer.org +Lousiana,Greenup County,Plaquemine,http://www.plaquemine.org +Lousiana,Greenup County,Pollock,http://www.pollockla.us +Lousiana,Greenup County,Ponchatoula,http://www.cityofponchatoula.com +Lousiana,Greenup County,Port Allen,http://www.portallen.org +Lousiana,Greenup County,Port Barre,https://www.townofportbarre.com +Lousiana,Greenup County,Port Vincent,https://portvincent-la.gov/ +Lousiana,Greenup County,Quitman,https://villageofquitman.com/ +Lousiana,Greenup County,Rayne,http://www.rayne.org +Lousiana,Greenup County,Rayville,http://www.townofrayville.com/ +Lousiana,Greenup County,Reeves,http://villageofreeves.com/ +Lousiana,Greenup County,Richwood,http://www.townofrichwood.com/ +Lousiana,Greenup County,Rosepine,http://townofrosepine.com/ +Lousiana,Greenup County,Ruston,http://ruston.org +Lousiana,Greenup County,Sarepta,https://sarepta.govoffice2.com/ +Lousiana,Greenup County,Scott,http://cityofscott.org +Lousiana,Greenup County,Shreveport,https://www.shreveportla.gov +Lousiana,Greenup County,Sibley,https://www.sibleyla.com/ +Lousiana,Greenup County,Simmesport,https://simmesportla.com/ +Lousiana,Greenup County,Simpson,http://www.villageofsimpson.com/ +Lousiana,Greenup County,Slaughter,http://www.townofslaughter.org/ +Lousiana,Greenup County,Slidell,http://myslidell.com/ +Lousiana,Greenup County,Sorrento,http://www.sorrentola.gov/ +Lousiana,Greenup County,Springfield,https://townofspringfield.org/ +Lousiana,Greenup County,Springhill,https://www.springhilllouisiana.gov/ +Lousiana,Greenup County,St. Francisville,http://stfrancisville.net +Lousiana,Greenup County,St. Gabriel,http://www.cityofstgabriel.us +Lousiana,Greenup County,St. James Parish,http://www.stjamesla.com +Lousiana,Greenup County,St. Martinville,http://www.stmartinville.org/ +Lousiana,Greenup County,St. Mary Parish,http://www.stmaryparishla.gov/ +Lousiana,Greenup County,Sterlington,http://www.townofsterlington.com +Lousiana,Greenup County,Stonewall,http://www.thetownofstonewall.com +Lousiana,Greenup County,Sulphur,http://www.sulphur.org +Lousiana,Greenup County,Sunset,http://www.sunset.govoffice2.com/ +Lousiana,Greenup County,Tallulah,http://cityoftallulah.org/ +Lousiana,Greenup County,Terrebonne Parish,http://www.tpcg.org +Lousiana,Greenup County,Thibodaux,http://ci.thibodaux.la.us +Lousiana,Greenup County,Urania,https://www.facebook.com/pages/Town-of-Urania-Louisiana/494502287258175 +Lousiana,Greenup County,Vidalia,http://cityofvidaliala.com +Lousiana,Greenup County,Ville Platte,http://www.cityofvilleplatte.com +Lousiana,Greenup County,Vinton,http://www.cityofvinton.com +Lousiana,Greenup County,Vivian,http://www.vivian.la.us +Lousiana,Greenup County,Walker,http://www.walker.la.us +Lousiana,Greenup County,Welsh,http://www.townofwelsh.com/ +Lousiana,Greenup County,West Monroe,https://www.cityofwestmonroe.com/ +Lousiana,Greenup County,Westlake,http://www.cityofwestlake.com +Lousiana,Greenup County,Westwego,http://www.cityofwestwego.com +Lousiana,Greenup County,White Castle,http://towcla.com +Lousiana,Greenup County,Winnfield,http://www.cityofwinnfield.com +Lousiana,Greenup County,Woodworth,http://www.townofwoodworth.com +Lousiana,Greenup County,Youngsville,http://www.youngsville.us +Lousiana,Greenup County,Zachary,http://www.cityofzachary.org +Maine,York County,Acton,http://www.actonmaine.org/ +Maine,Kennebec County,Albion,http://www.albionme.com/ +Maine,York County,Alfred,http://www.alfredme.us/ +Maine,Aroostook County,Allagash,http://www.allagash.info +Maine,Lincoln County,Alna,http://alna.maine.gov +Maine,York County,Arundel,http://www.arundelmaine.org/ +Maine,Androscoggin County,Auburn,http://www.auburnmaine.gov +Maine,Kennebec County,Augusta,http://www.augustamaine.gov/ +Maine,Washington County,Baileyville,http://www.baileyville.org/ +Maine,Penobscot County,Bangor,http://www.bangormaine.gov +Maine,Hancock County,Bar Harbor,http://www.barharbormaine.gov/ +Maine,Sagadahoc County,Bath,http://www.cityofbath.com/ +Maine,Waldo County,Belfast,http://www.cityofbelfast.org/ +Maine,Kennebec County,Belgrade,http://www.townofbelgrade.com/ +Maine,Waldo County,Belmont,http://belmontme.org/ +Maine,York County,Berwick,http://www.berwickmaine.org +Maine,Oxford County,Bethel,http://www.bethelmaine.org +Maine,York County,Biddeford,http://www.Biddefordmaine.org +Maine,Lincoln County,Boothbay,http://www.townofboothbay.org +Maine,Lincoln County,Boothbay Harbor,http://boothbayharbor.org +Maine,Sagadahoc County,Bowdoinham,http://www.bowdoinham.com/ +Maine,Penobscot County,Brewer,http://www.brewermaine.gov/ +Maine,Cumberland County,Bridgton,http://www.bridgtonmaine.org +Maine,Lincoln County,Bristol,http://www.bristolmaine.org/ +Maine,Waldo County,Brooks,http://www.brooks.govoffice2.com/ +Maine,Cumberland County,Brunswick,http://www.brunswickme.org +Maine,Oxford County,Buckfield,http://www.townofbuckfield.com/ +Maine,Hancock County,Bucksport,https://www.bucksportmaine.gov/ +Maine,York County,Buxton,http://www.buxton.me.us/ +Maine,Washington County,Calais,http://www.calaismaine.org/ +Maine,Somerset County,Cambridge,http://cambridgemaine.com +Maine,Knox County,Camden,http://www.camdenmaine.gov/ +Maine,Oxford County,Canton,http://www.cantonmaine.org/ +Maine,Cumberland County,Cape Elizabeth,http://www.capeelizabeth.com +Maine,Aroostook County,Caribou,http://www.cariboumaine.org/ +Maine,Penobscot County,Carmel,http://www.townofcarmel.org +Maine,Cumberland County,Casco,http://www.cascomaine.org +Maine,Cumberland County,Chebeague Island,http://www.townofchebeagueisland.org +Maine,Kennebec County,Chelsea,http://www.chelseamaine.org/ +Maine,Kennebec County,China,http://www.china.govoffice.com +Maine,Kennebec County,Clinton,http://www.clinton-me.us +Maine,Penobscot County,Corinna,http://www.corinna.govoffice.com +Maine,Penobscot County,Corinth,http://www.townofcorinth.com +Maine,York County,Cornish,http://www.cornishme.com +Maine,Hancock County,Cranberry Isles,http://cranberryisles-me.gov/ +Maine,Cumberland County,Cumberland,http://www.cumberlandmaine.com/ +Maine,Washington County,Cutler,http://cutlermaine.net/ +Maine,Lincoln County,Damariscotta,http://www.townofdamariscotta.com +Maine,York County,Dayton,http://www.dayton-me.gov/ +Maine,Penobscot County,Dexter,http://www.dextermaine.org +Maine,Oxford County,Dixfield,https://dixfield.org/ +Maine,Penobscot County,Dixmont,http://www.townofdixmont.org +Maine,Piscataquis County,Dover-Foxcroft,http://www.dover-foxcroft.org/ +Maine,Lincoln County,Dresden,http://www.townofdresden.com +Maine,Penobscot County,East Millinocket,http://www.eastmillinocket.org +Maine,Washington County,Eastport,http://www.eastport-me.gov/Public_Documents/index +Maine,Penobscot County,Eddington,http://www.eddingtonmaine.gov +Maine,Lincoln County,Edgecomb,http://edgecomb.org +Maine,York County,Eliot,http://www.eliotmaine.org/ +Maine,Hancock County,Ellsworth,http://ellsworthmaine.gov/ +Maine,Penobscot County,Exeter,http://www.townofexetermaine.com/ +Maine,Somerset County,Fairfield,http://www.fairfieldme.com/town/ +Maine,Cumberland County,Falmouth,http://www.falmouthme.org +Maine,Kennebec County,Farmingdale,http://farmingdalemaine.org +Maine,Franklin County,Farmington,http://www.farmington-maine.org +Maine,Kennebec County,Fayette,http://www.fayettemaine.org/ +Maine,Aroostook County,Fort Kent,http://www.fortkent.org +Maine,Waldo County,Frankfort,http://www.frankfortme.com/ +Maine,Waldo County,Freedom,http://www.freedomme.org/ +Maine,Cumberland County,Freeport,http://www.freeportmaine.com +Maine,Hancock County,Frenchboro,http://frenchboro.maine.gov/ +Maine,Cumberland County,Frye Island,http://www.fryeisland.com +Maine,Oxford County,Fryeburg,http://www.fryeburgmaine.org/ +Maine,Kennebec County,Gardiner,http://www.gardinermaine.com/ +Maine,Penobscot County,Glenburn,http://www.glenburn.org +Maine,Cumberland County,Gorham,http://www.gorham-me.org +Maine,Cumberland County,Gray,http://www.graymaine.org +Maine,Penobscot County,Greenbush,http://www.townofgreenbushmaine.org/ +Maine,Piscataquis County,Greenville,http://www.greenvilleme.com +Maine,Piscataquis County,Guilford,http://www.townofguilford.com/ +Maine,Kennebec County,Hallowell,http://www.hallowell.govoffice.com/ +Maine,Penobscot County,Hampden,https://www.hampdenmaine.gov/ +Maine,Hancock County,Hancock,http://www.hancockmaine.org/ +Maine,Cumberland County,Harpswell,http://www.harpswell.maine.gov/ +Maine,Cumberland County,Harrison,http://www.harrisonmaine.org +Maine,Penobscot County,Hermon,http://www.hermon.net +Maine,Penobscot County,Holden,http://www.holdenmaine.com +Maine,York County,Hollis,http://www.hollismaine.org +Maine,Knox County,Hope,http://www.hopemaine.org +Maine,Aroostook County,Houlton,http://www.houlton-maine.com/ +Maine,Penobscot County,Howland,http://www.howlandmaine.com +Maine,Penobscot County,Hudson,http://hudsonmaine.wordpress.com +Maine,Waldo County,Islesboro,http://www.townofislesboro.com/ +Maine,Somerset County,Jackman,http://jackmanmaine.org +Maine,Waldo County,Jackson,https://sites.google.com/site/jacksonmaine +Maine,Franklin County,Jay,http://www.jay-maine.org +Maine,Penobscot County,Kenduskeag,https://kenduskeag.org/ +Maine,York County,Kennebunk,http://www.kennebunkmaine.us +Maine,York County,Kennebunkport,http://kennebunkport.org +Maine,Franklin County,Kingfield,http://www.kingfield.me +Maine,York County,Kittery,http://www.kitteryme.gov/ +Maine,Waldo County,Knox,http://knoxmaine.com +Maine,Penobscot County,Lagrange,http://lagrange.trcmaine.org +Maine,York County,Lebanon,http://www.lebanon-me.org +Maine,Penobscot County,Levant,http://townoflevant.net +Maine,Androscoggin County,Lewiston,http://www.lewistonmaine.gov +Maine,Waldo County,Liberty,http://www.libertymaine.us +Maine,Aroostook County,Limestone,http://www.limestonemaine.org +Maine,York County,Limington,http://www.limington.net +Maine,Penobscot County,Lincoln,http://lincolnmaine.org/ +Maine,Waldo County,Lincolnville,http://www.town.lincolnville.me.us +Maine,Androscoggin County,Lisbon,http://www.lisbonme.org +Maine,Kennebec County,Litchfield,http://www.litchfieldmaine.com +Maine,Androscoggin County,Livermore Falls,http://www.lfme.org +Maine,Cumberland County,Long Island,http://www.townoflongisland.us +Maine,Washington County,Lubec,http://townoflubec.com +Maine,York County,Lyman,http://www.lyman-me.gov/ +Maine,Washington County,Machias,http://www.machiasme.org +Maine,Aroostook County,Madawaska,http://www.townofmadawaska.com/ +Maine,Somerset County,Madison,http://www.madisonmaine.com +Maine,Kennebec County,Manchester,http://www.manchester.govoffice2.com +Maine,Aroostook County,Mars Hill,http://www.marshillmaine.com +Maine,Androscoggin County,Mechanic Falls,http://www.mechanicfalls.govoffice.com/ +Maine,Penobscot County,Medway,http://www.medwaymaine.org +Maine,Oxford County,Mexico,http://www.mexicomaine.net +Maine,Washington County,Milbridge,https://townofmilbridge.webs.com/ +Maine,Penobscot County,Milford,http://www.milfordmaine.org +Maine,Penobscot County,Millinocket,http://www.millinocket.org +Maine,Piscataquis County,Milo,https://www.trcmaine.org/community/milo +Maine,Androscoggin County,Minot,http://www.minotme.org +Maine,Kennebec County,Monmouth,http://www.monmouthme.govoffice2.com/ +Maine,Piscataquis County,Monson,https://monsonmaine.org/ +Maine,Waldo County,Montville,http://www.montvillemaine.org +Maine,Waldo County,Morrill,http://www.morrillme.org +Maine,Hancock County,Mount Desert,http://www.mtdesert.org +Maine,Kennebec County,Mount Vernon,http://www.mtvernonme.org +Maine,Cumberland County,Naples,http://www.townofnaples.org/ +Maine,Cumberland County,New Gloucester,http://www.newgloucester.com +Maine,Lincoln County,Newcastle,http://www.newcastlemaine.us +Maine,York County,Newfield,http://newfieldme.org +Maine,Penobscot County,Newport,http://www.newportmaine.net +Maine,Lincoln County,Nobleboro,http://www.nobleboro.maine.gov +Maine,York County,North Berwick,http://www.townofnorthberwick.org/ +Maine,Cumberland County,North Yarmouth,http://www.northyarmouth.org +Maine,Kennebec County,Oakland,https://www.oaklandmaine.us/ +Maine,York County,Ogunquit,http://townofogunquit.org +Maine,York County,Old Orchard Beach,http://www.oobmaine.com/ +Maine,Penobscot County,Old Town,http://www.old-town.org/ +Maine,Penobscot County,Orono,http://www.orono.org +Maine,Penobscot County,Orrington,http://www.orrington.govoffice.com +Maine,Oxford County,Oxford,http://www.oxfordmaine.org/ +Maine,Waldo County,Palermo,http://www.townofpalermo.org +Maine,Washington County,Pembroke,http://www.pembrokemaine.org +Maine,Washington County,Perry,http://www.perrymaine.org/ +Maine,Somerset County,Pittsfield,https://www.pittsfield.org/ +Maine,Cumberland County,Portland,https://www.portlandmaine.gov +Maine,Cumberland County,Pownal,http://www.pownalmaine.org +Maine,Aroostook County,Presque Isle,http://presqueislemaine.gov/ +Maine,Waldo County,Prospect,http://www.prospectmaine.org/ +Maine,Kennebec County,Randolph,https://www.randolphmaine.org/ +Maine,Franklin County,Rangeley,http://www.rangeleymaine.com +Maine,Cumberland County,Raymond,http://www.raymondmaine.org +Maine,Kennebec County,Readfield,https://www.readfieldmaine.org/ +Maine,Knox County,Rockland,https://rocklandmaine.gov/ +Maine,Knox County,Rockport,http://town.rockport.me.us +Maine,Kennebec County,Rome,https://www.romemaine.com/ +Maine,Androscoggin County,Sabattus,http://sabattus.org/ +Maine,York County,Saco,http://www.sacomaine.org/ +Maine,York County,Sanford,http://www.sanfordmaine.org/ +Maine,Piscataquis County,Sangerville,https://sangervilleme.com/ +Maine,Cumberland County,Scarborough,http://www.scarboroughmaine.org/ +Maine,Waldo County,Searsmont,http://searsmont.com/ +Maine,Waldo County,Searsport,http://www.searsport.maine.gov/ +Maine,Cumberland County,Sebago,http://www.townofsebago.org +Maine,York County,Shapleigh,http://www.shapleigh.net/ +Maine,Somerset County,Skowhegan,https://www.skowhegan.org/ +Maine,York County,South Berwick,http://www.southberwickmaine.org +Maine,Lincoln County,South Bristol,http://www.townofsouthbristol.com +Maine,Cumberland County,South Portland,http://www.southportland.org/ +Maine,Lincoln County,Southport,http://www.townofsouthport.org +Maine,Cumberland County,Standish,http://www.standish.org +Maine,Somerset County,Starks,http://www.starksme.com +Maine,Penobscot County,Stetson,http://www.stetsonmaine.net +Maine,Hancock County,Swan's Island,http://www.swansisland.org +Maine,Knox County,Thomaston,https://www.thomastonmaine.us +Maine,Waldo County,Thorndike,http://thorndikeme.com/ +Maine,Sagadahoc County,Topsham,https://www.topshammaine.com/ +Maine,Hancock County,Tremont,http://tremont.maine.gov/ +Maine,Androscoggin County,Turner,http://www.turnermaine.com/ +Maine,Knox County,Union,http://www.union.govoffice2.com/ +Maine,Kennebec County,Vassalboro,http://www.vassalboro.net/ +Maine,Penobscot County,Veazie,http://www.veazie.net +Maine,Kennebec County,Vienna,http://www.viennamaine.org/ +Maine,Waldo County,Waldo,http://www.townofwaldo.com/ +Maine,Lincoln County,Waldoboro,http://www.waldoboromaine.org +Maine,Knox County,Warren,http://town.warren.me.us/ +Maine,Knox County,Washington,http://www.washington.maine.gov/ +Maine,York County,Waterboro,http://www.waterboro-me.gov +Maine,Kennebec County,Waterville,http://www.waterville-me.gov +Maine,York County,Wells,http://www.wellstown.org/ +Maine,Oxford County,West Paris,https://www.westparisme.com/ +Maine,Cumberland County,Westbrook,http://www.westbrookmaine.com/ +Maine,Lincoln County,Westport Island,http://westportisland.us +Maine,Lincoln County,Whitefield,http://www.townofwhitefield.com +Maine,Franklin County,Wilton,http://www.wiltonmaine.org/ +Maine,Cumberland County,Windham,http://www.WindhamMaine.us +Maine,Kennebec County,Winslow,http://www.winslowmaine.org +Maine,Waldo County,Winterport,http://www.winterportmaine.gov/ +Maine,Kennebec County,Winthrop,http://www.winthropmaine.org +Maine,Lincoln County,Wiscasset,http://www.wiscasset.org/ +Maine,Cumberland County,Yarmouth,http://www.yarmouth.me.us/ +Maine,York County,York,http://www.yorkmaine.org/ +Maryland,Harford County,Aberdeen,https://www.aberdeenmd.gov/ +Maryland,Harford County,Accident,http://www.accidentmd.org +Maryland,Anne Arundel County,Annapolis,http://www.annapolis.gov/ +Maryland,Anne Arundel County,Baltimore,http://www.baltimorecity.gov/ +Maryland,Queen Anne's County,Barclay,https://www.barclaymaryland.com/ +Maryland,Montgomery County,Barnesville,http://www.barnesvillemd.org/ +Maryland,Montgomery County,Barton,http://msa.maryland.gov/msa/mdmanual/37mun/barton/html/b.html +Maryland,Montgomery County,Bel Air,http://www.belairmd.org/ +Maryland,Montgomery County,Berlin,http://berlinmd.gov +Maryland,Montgomery County,Berwyn Heights,https://www.berwynheightsmd.gov/ +Maryland,Montgomery County,Betterton,http://www.townofbetterton.com +Maryland,Prince George's County,Bladensburg,https://www.bladensburgmd.gov/ +Maryland,Washington County,Boonsboro,http://www.town.boonsboro.md.us +Maryland,Washington County,Bowie,http://www.cityofbowie.org/ +Maryland,Washington County,Brentwood,http://brentwoodmd.gov/ +Maryland,Montgomery County,Brookeville,http://townofbrookevillemd.org/ +Maryland,Montgomery County,Brookview,http://www.mdmunicipal.org/DocumentCenter/Home/View/63 +Maryland,Montgomery County,Brunswick,https://brunswickmd.gov/ +Maryland,Montgomery County,Burkittsville,http://www.burkittsville-md.gov/ +Maryland,Montgomery County,Cambridge,http://www.choosecambridge.com +Maryland,Montgomery County,Capitol Heights,http://www.capitolheightsmd.com/ +Maryland,Montgomery County,Cecilton,http://www.ceciltonmd.gov/ +Maryland,Queen Anne's County,Centreville,http://www.townofcentreville.org/ +Maryland,Queen Anne's County,Charlestown,http://www.charlestownmd.org/ +Maryland,Queen Anne's County,Chesapeake Beach,https://www.chesapeakebeachmd.gov/ +Maryland,Queen Anne's County,Chesapeake City,http://www.chesapeakecity-md.gov/ +Maryland,Queen Anne's County,Chestertown,http://www.chestertown.com/ +Maryland,Queen Anne's County,Cheverly,https://www.cheverly-md.gov/ +Maryland,Montgomery County,Chevy Chase Section Five,http://www.chevychasesection5.org/ +Maryland,Montgomery County,Chevy Chase Section Three,http://www.chevychasesection3.org/ +Maryland,Montgomery County,Chevy Chase View,http://www.chevychaseview.org/ +Maryland,Montgomery County,Chevy Chase Village,http://www.chevychasevillagemd.gov/ +Maryland,Montgomery County,Church Creek,http://msa.maryland.gov/msa/mdmanual/37mun/churchcreek/html/c.html +Maryland,Queen Anne's County,Church Hill,http://churchhillmd.com/ +Maryland,Washington County,Clear Spring,https://www.clearspringmd.gov/ +Maryland,Prince George's County,College Park,http://www.collegeparkmd.gov +Maryland,Prince George's County,Colmar Manor,http://colmarmanor.org +Maryland,Prince George's County,Cottage City,http://www.cottagecitymd.gov/ +Maryland,Prince George's County,Crisfield,http://www.cityofcrisfield-md.gov/ +Maryland,Prince George's County,Cumberland,https://www.cumberlandmd.gov/ +Maryland,Wicomico County,Delmar,http://www.townofdelmar.us/index.cfm +Maryland,Wicomico County,Denton,http://www.dentonmaryland.com/ +Maryland,Wicomico County,District Heights,http://www.districtheights.org/ +Maryland,Wicomico County,Eagle Harbor,https://www.townofeagleharborincmd.org/ +Maryland,Wicomico County,East New Market,http://www.eastnewmarketmd.org +Maryland,Wicomico County,Easton,http://www.town-eastonmd.com +Maryland,Wicomico County,Edmonston,http://www.edmonstonmd.gov +Maryland,Wicomico County,Elkton,http://www.elkton.org +Maryland,Wicomico County,Emmitsburg,http://www.emmitsburgmd.gov/ +Maryland,Wicomico County,Fairmount Heights,https://www.fairmountheightsmd.gov/ +Maryland,Wicomico County,Federalsburg,https://www.townoffederalsburg.org/ +Maryland,Wicomico County,Forest Heights,http://forestheightsmd.gov/ +Maryland,Frederick County,Frederick,https://www.cityoffrederickmd.gov/ +Maryland,Garrett County,Friendsville,https://www.friendsville.org/ +Maryland,Garrett County,Frostburg,http://www.frostburgcity.com/ +Maryland,Wicomico County,Fruitland,http://www.cityoffruitland.com +Maryland,Washington County,Funkstown,http://www.funkstown.com +Maryland,Washington County,Gaithersburg,http://www.gaithersburgmd.gov/ +Maryland,Washington County,Galena,https://www.townofgalena.com/ +Maryland,Montgomery County,Garrett Park,http://www.garrettparkmd.gov/ +Maryland,Montgomery County,Glen Echo,http://www.glenecho.org/ +Maryland,Montgomery County,Glenarden,http://www.cityofglenarden.org/ +Maryland,Garrett County,Grantsville,https://www.visitgrantsville.com/ +Maryland,Prince George's County,Greenbelt,https://www.greenbeltmd.gov/ +Maryland,Prince George's County,Greensboro,http://www.greensboromd.com/ +Maryland,Washington County,Hagerstown,http://www.Hagerstownmd.org +Maryland,Carroll County,Hampstead,http://www.hampsteadmd.gov +Maryland,Washington County,Havre de Grace,http://www.havredegracemd.com/ +Maryland,Wicomico County,Hebron,http://www.hebronmd.com +Maryland,Anne Arundel County,Highland Beach,http://www.highlandbeachmd.org +Maryland,Anne Arundel County,Hurlock,http://www.hurlock-md.gov/ +Maryland,Anne Arundel County,Hyattsville,http://www.hyattsville.org/ +Maryland,Charles County,Indian Head,http://www.townofindianhead.org +Maryland,Washington County,Keedysville,http://www.keedysvillemd.com/ +Maryland,Montgomery County,Kensington,http://tok.md.gov/ +Maryland,Garrett County,Kitzmiller,https://www.kitzmillermd.org +Maryland,Charles County,La Plata,http://www.townoflaplata.org +Maryland,Garrett County,Landover Hills,http://www.lhills.sailorsite.net/ +Maryland,Charles County,Laurel,http://www.cityoflaurel.org/ +Maryland,Montgomery County,Laytonsville,http://www.laytonsville.md.us/ +Maryland,St. Mary's County,Leonardtown,http://leonardtown.somd.com +Maryland,Carroll County,Manchester,https://manchestermd.gov/ +Maryland,Wicomico County,Mardela Springs,http://mardelasprings.org/ +Maryland,Montgomery County,Martin's Additions,https://martinsadditions.org/ +Maryland,Frederick County,Middletown,http://www.middletown.md.us/ +Maryland,Kent County,Millington,http://millingtonmd.us/ +Maryland,Kent County,Morningside,http://www.morningsidemd.gov +Maryland,Frederick County,Mount Airy,http://www.mountairymd.org +Maryland,Frederick County,Mount Rainier,http://www.mountrainiermd.org +Maryland,Kent County,Mountain Lake Park,http://mtnlakepark.org/ +Maryland,Frederick County,Myersville,https://myersville.org/ +Maryland,Frederick County,New Carrollton,https://www.newcarrolltonmd.gov/ +Maryland,Frederick County,New Market,http://www.townofnewmarket.org/ +Maryland,Carroll County,New Windsor,http://www.newwindsormd.org +Maryland,Carroll County,North Beach,https://www.northbeachmd.org/ +Maryland,Carroll County,North Brentwood,http://northbrentwood.com/ +Maryland,Montgomery County,North Chevy Chase,https://northchevychase.org/ +Maryland,Montgomery County,North East,http://www.northeastmd.org/ +Maryland,Montgomery County,Oakland,http://www.oaklandmd.com/ +Maryland,Worcester County,Ocean City,https://www.oceancitymd.gov +Maryland,Talbot County,Oxford,http://www.oxfordmd.net/ +Maryland,Cecil County,Perryville,http://www.perryvillemd.org/ +Maryland,Wicomico County,Pittsville,https://pittsvillemd.gov/ +Maryland,Worcester County,Pocomoke City,http://www.cityofpocomoke.com +Maryland,Worcester County,Poolesville,http://www.poolesvillemd.gov +Maryland,Worcester County,Port Deposit,http://www.portdeposit.org/ +Maryland,Charles County,Preston,http://www.prestonmaryland.us/ +Maryland,Charles County,Princess Anne,http://www.townofprincessanne.org/ +Maryland,Queen Anne's County,Queenstown,http://www.queenstown-md.com/ +Maryland,Queen Anne's County,Ridgely,http://ridgelymd.org/ +Maryland,Queen Anne's County,Rising Sun,http://www.risingsunmd.org/ +Maryland,Queen Anne's County,Riverdale Park,http://www.riverdaleparkmd.info +Maryland,Queen Anne's County,Rock Hall,http://www.rockhallmd.com/ +Maryland,Montgomery County,Rockville,http://www.rockvillemd.gov/ +Maryland,Montgomery County,Rosemont,https://sites.google.com/site/rosemontmd/ +Maryland,Wicomico County,Salisbury,http://salisbury.md +Maryland,Wicomico County,Seat Pleasant,http://www.seatpleasantmd.gov/ +Maryland,Washington County,Sharpsburg,http://sharpsburgmd.com/ +Maryland,Wicomico County,Sharptown,http://www.townofsharptown.org +Maryland,Washington County,Smithsburg,http://www.townofsmithsburg.org +Maryland,Worcester County,Snow Hill,http://www.snowhillmd.gov/ +Maryland,Montgomery County,Somerset,https://townofsomerset.com/ +Maryland,Montgomery County,St. Michaels,http://stmichaelsmd.org/ +Maryland,Queen Anne's County,Sudlersville,http://www.townofsudlersville.org/ +Maryland,Carroll County,Sykesville,http://www.sykesville.net +Maryland,Montgomery County,Takoma Park,http://www.takomaparkmd.gov/ +Maryland,Carroll County,Taneytown,http://www.taneytown.org +Maryland,Queen Anne's County,Thurmont,http://www.thurmont.com/ +Maryland,Queen Anne's County,Trappe,http://trappemd.net/ +Maryland,Carroll County,Union Bridge,http://townofub.org +Maryland,Carroll County,University Park,http://www.upmd.org/ +Maryland,Carroll County,Upper Marlboro,http://www.uppermarlboromd.gov/ +Maryland,Dorchester County,Vienna,http://www.viennamd.org +Maryland,Dorchester County,Walkersville,https://walkersvillemd.gov/ +Maryland,Montgomery County,Washington Grove,http://www.washingtongrovemd.org/ +Maryland,Montgomery County,Westernport,https://townofwesternport.com/?fs=e&s=cl +Maryland,Carroll County,Westminster,http://www.westminstermd.gov +Maryland,Washington County,Williamsport,http://williamsportmd.gov/ +Maryland,Washington County,Woodsboro,http://www.woodsboro.org/ +Massachusetts,Plymouth County,Abington,http://www.abingtonma.gov/ +Massachusetts,Middlesex County,Acton,http://www.acton-ma.gov/ +Massachusetts,Bristol County,Acushnet,http://www.acushnet.ma.us +Massachusetts,Berkshire County,Adams,http://town.adams.ma.us +Massachusetts,Hampden County,Agawam,http://www.agawam.ma.us/ +Massachusetts,Berkshire County,Alford,http://www.townofalford.org +Massachusetts,Essex County,Amesbury,http://www.amesburyma.gov +Massachusetts,Hampshire County,Amherst,http://www.amherstma.gov +Massachusetts,Essex County,Andover,http://www.andoverma.gov/ +Massachusetts,Dukes County,Aquinnah,http://aquinnah-ma.gov +Massachusetts,Middlesex County,Arlington,http://www.arlingtonma.gov/ +Massachusetts,Worcester County,Ashburnham,http://www.ashburnham-ma.gov/ +Massachusetts,Middlesex County,Ashby,https://www.ashbyma.gov/ +Massachusetts,Franklin County,Ashfield,http://www.ashfield.org +Massachusetts,Middlesex County,Ashland,http://www.ashlandmass.com/ +Massachusetts,Worcester County,Athol,http://www.athol-ma.gov/ +Massachusetts,Bristol County,Attleboro,http://www.cityofattleboro.us +Massachusetts,Worcester County,Auburn,http://www.auburnguide.com +Massachusetts,Worcester County,Avon,http://www.avon-ma.gov/ +Massachusetts,Middlesex County,Ayer,http://www.ayer.ma.us/ +Massachusetts,Barnstable County,Barnstable,http://town.barnstable.ma.us +Massachusetts,Worcester County,Barre,http://www.townofbarre.com/ +Massachusetts,Berkshire County,Becket,http://www.townofbecket.org +Massachusetts,Middlesex County,Bedford,http://www.bedfordma.gov/ +Massachusetts,Hampshire County,Belchertown,http://www.belchertown.org/ +Massachusetts,Hampshire County,Bellingham,https://www.bellinghamma.org/ +Massachusetts,Middlesex County,Belmont,http://www.belmont-ma.gov/ +Massachusetts,Bristol County,Berkley,http://www.townofberkleyma.com +Massachusetts,Worcester County,Berlin,http://www.townofberlin.com/ +Massachusetts,Franklin County,Bernardston,http://townofbernardston.org +Massachusetts,Essex County,Beverly,http://www.beverlyma.gov +Massachusetts,Middlesex County,Billerica,http://www.town.billerica.ma.us/ +Massachusetts,Worcester County,Blackstone,https://www.townofblackstone.org/ +Massachusetts,Hampden County,Blandford,https://townofblandford.com/ +Massachusetts,Worcester County,Bolton,http://www.townofbolton.com/ +Massachusetts,Barnstable County,Bourne,http://www.townofbourne.com +Massachusetts,Middlesex County,Boxborough,http://boxborough-ma.gov +Massachusetts,Essex County,Boxford,http://www.town.boxford.ma.us +Massachusetts,Worcester County,Boylston,http://www.boylston-ma.gov/ +Massachusetts,Norfolk County,Braintree,http://www.braintreema.gov +Massachusetts,Barnstable County,Brewster,http://www.brewster-ma.gov +Massachusetts,Plymouth County,Bridgewater,http://www.bridgewaterma.org/ +Massachusetts,Plymouth County,Brockton,http://www.brockton.ma.us/ +Massachusetts,Worcester County,Brookfield,http://www.brookfieldma.us/ +Massachusetts,Norfolk County,Brookline,http://www.brooklinema.gov +Massachusetts,Franklin County,Buckland,http://town.buckland.ma.us +Massachusetts,Middlesex County,Burlington,http://www.burlington.org/ +Massachusetts,Middlesex County,Cambridge,http://cambridgema.gov +Massachusetts,Norfolk County,Canton,http://www.town.canton.ma.us/ +Massachusetts,Middlesex County,Carlisle,http://www.carlislema.gov/ +Massachusetts,Plymouth County,Carver,http://www.carverma.org/ +Massachusetts,Franklin County,Charlemont,http://www.charlemont-ma.us +Massachusetts,Worcester County,Charlton,http://www.townofcharlton.net/ +Massachusetts,Barnstable County,Chatham,http://www.chatham-ma.gov +Massachusetts,Middlesex County,Chelmsford,http://www.townofchelmsford.us/ +Massachusetts,Suffolk County,Chelsea,http://www.chelseama.gov +Massachusetts,Berkshire County,Cheshire,http://www.cheshire-ma.com +Massachusetts,Hampden County,Chester,http://townofchester.net +Massachusetts,Hampshire County,Chesterfield,http://www.townofchesterfieldma.com +Massachusetts,File:Seal of Hampden County,Chicopee,http://www.chicopeema.gov/ +Massachusetts,Dukes County,Chilmark,http://www.chilmarkma.gov +Massachusetts,Berkshire County,Clarksburg,http://clarksburgma.us +Massachusetts,Worcester County,Clinton,http://www.clintonma.gov/ +Massachusetts,Worcester County,Cohasset,http://www.townofcohasset.org/ +Massachusetts,Franklin County,Colrain,http://www.colrain-ma.gov +Massachusetts,Middlesex County,Concord,http://www.concordma.gov/ +Massachusetts,Franklin County,Conway,http://www.townofconway.com +Massachusetts,Hampshire County,Cummington,http://www.cummington-ma.gov +Massachusetts,Berkshire County,Dalton,http://dalton-ma.gov +Massachusetts,Essex County,Danvers,https://www.danversma.gov/ +Massachusetts,Bristol County,Dartmouth,http://www.town.dartmouth.ma.us +Massachusetts,Norfolk County,Dedham,http://www.dedham-ma.gov +Massachusetts,Franklin County,Deerfield,http://www.deerfieldma.us +Massachusetts,Barnstable County,Dennis,http://www.town.dennis.ma.us +Massachusetts,Bristol County,Dighton,http://www.dighton-ma.gov +Massachusetts,Worcester County,Douglas,https://www.douglas-ma.gov/ +Massachusetts,Worcester County,Dover,https://www.doverma.gov/ +Massachusetts,Middlesex County,Dracut,http://www.dracutma.gov/ +Massachusetts,Worcester County,Dudley,http://www.dudleyma.gov/ +Massachusetts,Middlesex County,Dunstable,http://www.dunstable-ma.gov/ +Massachusetts,Plymouth County,Duxbury,http://www.town.duxbury.ma.us/ +Massachusetts,Plymouth County,East Bridgewater,http://www.eastbridgewaterma.org/ +Massachusetts,Worcester County,East Brookfield,http://www.eastbrookfieldma.us/ +Massachusetts,Hampden County,East Longmeadow,http://www.eastlongmeadowma.gov/ +Massachusetts,Barnstable County,Eastham,http://www.eastham-ma.gov +Massachusetts,Hampshire County,Easthampton,https://easthamptonma.gov/ +Massachusetts,Bristol County,Easton,http://www.easton.ma.us/ +Massachusetts,Dukes County,Edgartown,http://www.edgartown-ma.us/ +Massachusetts,Berkshire County,Egremont,http://www.egremont-ma.gov +Massachusetts,Franklin County,Erving,http://www.erving-ma.org +Massachusetts,Essex County,Essex,http://www.essexma.org +Massachusetts,Middlesex County,Everett,http://cityofeverett.com +Massachusetts,Bristol County,Fairhaven,http://www.fairhaven-ma.gov/ +Massachusetts,Bristol County,Fall River,http://www.fallriverma.org +Massachusetts,Barnstable County,Falmouth,http://www.falmouthma.gov +Massachusetts,Worcester County,Fitchburg,http://www.fitchburgma.gov/ +Massachusetts,Berkshire County,Florida,http://townofflorida.org/ +Massachusetts,Norfolk County,Foxborough,http://www.foxboroughma.gov +Massachusetts,Middlesex County,Framingham,http://www.framinghamma.gov +Massachusetts,Norfolk County,Franklin,http://www.franklinma.gov +Massachusetts,Bristol County,Freetown,http://www.freetownma.gov/ +Massachusetts,Worcester County,Gardner,http://www.gardner-ma.gov/ +Massachusetts,Essex County,Georgetown,http://www.georgetownma.gov +Massachusetts,Franklin County,Gill,http://www.gillmass.org +Massachusetts,Essex County,Gloucester,http://gloucester-ma.gov +Massachusetts,Hampshire County,Goshen,http://www.goshen-ma.us +Massachusetts,Dukes County,Gosnold,https://www.townofgosnold.org/ +Massachusetts,Worcester County,Grafton,http://www.grafton-ma.gov/ +Massachusetts,Hampshire County,Granby,http://www.granby-ma.gov +Massachusetts,Hampden County,Granville,http://www.townofgranville.net +Massachusetts,Berkshire County,Great Barrington,http://www.townofgb.org +Massachusetts,Franklin County,Greenfield,http://Greenfield-MA.gov +Massachusetts,Middlesex County,Groton,http://www.townofgroton.org/ +Massachusetts,Essex County,Groveland,http://www.grovelandma.com +Massachusetts,Hampshire County,Hadley,http://www.hadleyma.org +Massachusetts,Plymouth County,Halifax,http://www.halifax-ma.org/ +Massachusetts,Essex County,Hamilton,http://www.hamiltonma.gov +Massachusetts,Hampden County,Hampden,http://www.hampdenma.gov/ +Massachusetts,Berkshire County,Hancock,http://town.hancock.ma.us/ +Massachusetts,Plymouth County,Hanover,http://www.hanover-ma.gov/ +Massachusetts,Plymouth County,Hanson,http://www.hanson-ma.gov/ +Massachusetts,Worcester County,Hardwick,http://www.townofhardwick.com/ +Massachusetts,Worcester County,Harvard,http://www.harvard.ma.us/ +Massachusetts,Barnstable County,Harwich,http://www.town.harwich.ma.us +Massachusetts,Hampshire County,Hatfield,http://www.townofhatfield.org +Massachusetts,Essex County,Haverhill,http://www.haverhillma.gov +Massachusetts,Franklin County,Hawley,http://www.townofhawley.com/ +Massachusetts,Franklin County,Heath,http://www.townofheath.org +Massachusetts,Plymouth County,Hingham,http://www.hingham-ma.gov/ +Massachusetts,Berkshire County,Hinsdale,http://www.hinsdalemass.com +Massachusetts,Norfolk County,Holbrook,http://holbrookma.gov/ +Massachusetts,Worcester County,Holden,http://www.holdenma.gov// +Massachusetts,Hampden County,Holland,http://town.holland.ma.us +Massachusetts,Middlesex County,Holliston,http://www.townofholliston.us/ +Massachusetts,File:Seal of Hampden County,Holyoke,http://www.holyoke.org +Massachusetts,Worcester County,Hopedale,http://www.hopedale-ma.gov/ +Massachusetts,Middlesex County,Hopkinton,http://www.hopkintonma.gov/ +Massachusetts,Worcester County,Hubbardston,http://www.hubbardstonma.us/ +Massachusetts,Middlesex County,Hudson,http://www.townofhudson.org +Massachusetts,Plymouth County,Hull,http://www.town.hull.ma.us/ +Massachusetts,Hampshire County,Huntington,http://www.huntingtonma.us +Massachusetts,Essex County,Ipswich,http://www.ipswichma.gov +Massachusetts,Plymouth County,Kingston,https://www.kingstonma.gov/ +Massachusetts,Plymouth County,Lakeville,http://www.lakevillema.org/ +Massachusetts,Worcester County,Lancaster,http://www.ci.lancaster.ma.us/ +Massachusetts,Berkshire County,Lanesborough,http://www.lanesborough-ma.gov +Massachusetts,Essex County,Lawrence,http://www.cityoflawrence.com +Massachusetts,Berkshire County,Lee,http://www.lee.ma.us +Massachusetts,Worcester County,Leicester,http://www.leicesterma.org/ +Massachusetts,Berkshire County,Lenox,http://www.townoflenox.com +Massachusetts,Worcester County,Leominster,http://www.leominster-ma.gov +Massachusetts,Franklin County,Leverett,http://www.leverett.ma.us +Massachusetts,Middlesex County,Lexington,http://www.lexingtonma.gov/ +Massachusetts,Franklin County,Leyden,http://www.townofleyden.com +Massachusetts,Middlesex County,Lincoln,http://www.lincolntown.org/ +Massachusetts,Middlesex County,Littleton,http://www.littletonma.org/ +Massachusetts,Hampden County,Longmeadow,http://www.longmeadow.org +Massachusetts,Middlesex County,Lowell,http://www.lowellma.gov/ +Massachusetts,Hampden County,Ludlow,http://www.ludlow.ma.us/ +Massachusetts,Worcester County,Lunenburg,http://www.lunenburgma.gov/ +Massachusetts,Essex County,Lynn,http://www.lynnma.gov +Massachusetts,Essex County,Lynnfield,http://www.town.lynnfield.ma.us +Massachusetts,Middlesex County,Malden,http://cityofmalden.org +Massachusetts,Essex County,Manchester-by-the-Sea,http://www.manchester.ma.us +Massachusetts,Bristol County,Mansfield,http://www.mansfieldma.com/ +Massachusetts,Essex County,Marblehead,http://www.marblehead.org +Massachusetts,Plymouth County,Marion,http://www.marionma.gov/ +Massachusetts,Middlesex County,Marlborough,http://www.marlborough-ma.gov/gen/index +Massachusetts,Plymouth County,Marshfield,http://www.townofmarshfield.org +Massachusetts,Barnstable County,Mashpee,http://www.mashpeema.gov +Massachusetts,Plymouth County,Mattapoisett,http://www.mattapoisett.net/ +Massachusetts,Middlesex County,Maynard,https://www.townofmaynard-ma.gov/ +Massachusetts,Middlesex County,Medfield,http://www.town.medfield.net/ +Massachusetts,Middlesex County,Medford,https://www.medfordma.org/ +Massachusetts,Middlesex County,Medway,http://www.townofmedway.org/ +Massachusetts,Middlesex County,Melrose,http://www.cityofmelrose.org +Massachusetts,Worcester County,Mendon,http://mendonma.gov/ +Massachusetts,Essex County,Merrimac,http://www.merrimac01860.info +Massachusetts,Essex County,Methuen,http://www.cityofmethuen.net +Massachusetts,Plymouth County,Middleborough,http://www.middleborough.com +Massachusetts,Hampshire County,Middlefield,http://middlefieldma.net/ +Massachusetts,Essex County,Middleton,http://www.middletonma.gov/ +Massachusetts,Worcester County,Milford,https://www.milfordma.gov/ +Massachusetts,Worcester County,Millbury,http://www.millbury-ma.org/ +Massachusetts,Worcester County,Millis,https://www.millisma.gov/ +Massachusetts,Worcester County,Millville,http://www.millvillema.org/ +Massachusetts,Worcester County,Milton,http://www.townofmilton.org/ +Massachusetts,Hampden County,Monson,http://www.monson-ma.gov +Massachusetts,Franklin County,Montague,http://www.montague-ma.gov +Massachusetts,Berkshire County,Monterey,http://www.montereyma.gov +Massachusetts,Hampden County,Montgomery,http://www.montgomeryma.gov/ +Massachusetts,Berkshire County,Mount Washington,https://mountwashington-ma.gov +Massachusetts,Essex County,Nahant,http://www.nahant.org +Massachusetts,Middlesex County,Natick,http://www.natickma.gov/ +Massachusetts,Middlesex County,Needham,http://www.needhamma.gov/ +Massachusetts,Berkshire County,New Ashford,http://newashford-ma.us/ +Massachusetts,Bristol County,New Bedford,http://www.newbedford-ma.gov +Massachusetts,Worcester County,New Braintree,https://www.newbraintreema.us +Massachusetts,Berkshire County,New Marlborough,http://www.newmarlboroughma.gov +Massachusetts,Franklin County,New Salem,http://www.newsalem-massachusetts.org +Massachusetts,Essex County,Newbury,http://www.townofnewbury.org +Massachusetts,Essex County,Newburyport,http://www.cityofnewburyport.com +Massachusetts,Middlesex County,Newton,http://www.newtonma.gov/ +Massachusetts,Middlesex County,Norfolk,http://norfolk.ma.us/ +Massachusetts,Berkshire County,North Adams,http://www.northadams-ma.gov +Massachusetts,Essex County,North Andover,http://www.northandoverma.gov +Massachusetts,Bristol County,North Attleborough,http://www.north-attleboro.ma.us/ +Massachusetts,Worcester County,North Brookfield,http://northbrookfield.net +Massachusetts,Middlesex County,North Reading,http://www.northreadingma.gov +Massachusetts,Hampshire County,Northampton,http://www.northamptonma.gov/ +Massachusetts,Worcester County,Northborough,http://www.town.northborough.ma.us/ +Massachusetts,Worcester County,Northbridge,http://www.northbridgemass.org/ +Massachusetts,Franklin County,Northfield,https://www.northfieldma.gov/ +Massachusetts,Bristol County,Norton,http://www.nortonma.org/ +Massachusetts,Plymouth County,Norwell,http://www.townofnorwell.net +Massachusetts,Norfolk County,Norwood,http://www.norwoodma.gov/ +Massachusetts,Dukes County,Oak Bluffs,http://www.oakbluffsma.gov/ +Massachusetts,Worcester County,Oakham,http://www.oakham-ma.gov/ +Massachusetts,Franklin County,Orange,http://www.townoforange.org +Massachusetts,Barnstable County,Orleans,http://www.town.orleans.ma.us +Massachusetts,Berkshire County,Otis,http://www.townofotisma.com +Massachusetts,Worcester County,Oxford,http://www.town.oxford.ma.us/ +Massachusetts,Hampden County,Palmer,http://www.townofpalmer.com/ +Massachusetts,Worcester County,Paxton,http://www.townofpaxton.net/ +Massachusetts,Essex County,Peabody,http://www.peabody-ma.gov +Massachusetts,Hampshire County,Pelham,http://www.townofpelham.org +Massachusetts,Plymouth County,Pembroke,http://www.townofpembrokemass.org/ +Massachusetts,Middlesex County,Pepperell,http://town.pepperell.ma.us/ +Massachusetts,Berkshire County,Peru,https://www.townofperuma.com/ +Massachusetts,Worcester County,Petersham,http://townofpetersham.org/ +Massachusetts,Worcester County,Phillipston,http://www.phillipston-ma.gov +Massachusetts,Berkshire County,Pittsfield,http://cityofpittsfield.org +Massachusetts,Hampshire County,Plainfield,https://plainfield-ma.us/ +Massachusetts,Norfolk County,Plainville,http://www.plainville.ma.us +Massachusetts,Plymouth County,Plymouth,http://www.plymouth-ma.gov/ +Massachusetts,Plymouth County,Plympton,http://www.town.plympton.ma.us/ +Massachusetts,Worcester County,Princeton,http://town.princeton.ma.us/ +Massachusetts,Barnstable County,Provincetown,http://www.provincetown-ma.gov/ +Massachusetts,Norfolk County,Quincy,http://www.quincyma.gov/ +Massachusetts,Norfolk County,Randolph,https://www.randolph-ma.gov/ +Massachusetts,Bristol County,Raynham,http://www.town.raynham.ma.us/ +Massachusetts,Middlesex County,Reading,http://www.ci.reading.ma.us/ +Massachusetts,Bristol County,Rehoboth,http://www.town.rehoboth.ma.us/ +Massachusetts,Suffolk County,Revere,http://www.revere.org +Massachusetts,Berkshire County,Richmond,http://www.richmondma.org +Massachusetts,Plymouth County,Rochester,http://www.townofrochestermass.com +Massachusetts,Plymouth County,Rockland,http://www.rockland-ma.gov/ +Massachusetts,Essex County,Rockport,https://www.rockportma.gov/ +Massachusetts,Franklin County,Rowe,http://www.rowe-ma.gov +Massachusetts,Essex County,Rowley,http://www.townofrowley.net/ +Massachusetts,Worcester County,Royalston,http://www.royalston-ma.gov/ +Massachusetts,Hampden County,Russell,http://www.townofrussell.us +Massachusetts,Worcester County,Rutland,http://www.townofrutland.org/pages/index +Massachusetts,Essex County,Salem,http://www.salem.com +Massachusetts,Essex County,Salisbury,http://www.salisburyma.gov +Massachusetts,Berkshire County,Sandisfield,http://www.sandisfieldma.gov/ +Massachusetts,Barnstable County,Sandwich,http://www.sandwichmass.org +Massachusetts,Essex County,Saugus,http://www.saugus-ma.gov +Massachusetts,Plymouth County,Scituate,https://www.scituatema.gov/ +Massachusetts,Bristol County,Seekonk,http://www.seekonk-ma.gov +Massachusetts,Bristol County,Sharon,https://www.townofsharon.net/ +Massachusetts,Berkshire County,Sheffield,http://www.sheffieldma.gov +Massachusetts,Franklin County,Shelburne,http://www.townofshelburne.com +Massachusetts,Middlesex County,Sherborn,http://www.sherbornma.org/ +Massachusetts,Middlesex County,Shirley,http://www.shirley-ma.gov/ +Massachusetts,Worcester County,Shrewsbury,https://www.shrewsburyma.gov +Massachusetts,Franklin County,Shutesbury,http://www.shutesbury.org +Massachusetts,Bristol County,Somerset,http://www.townofsomerset.org/ +Massachusetts,Middlesex County,Somerville,http://somervillema.gov +Massachusetts,Hampshire County,South Hadley,http://www.southhadley.org/ +Massachusetts,Hampshire County,Southampton,http://www.townofsouthampton.org +Massachusetts,Worcester County,Southborough,http://www.southboroughtown.com/ +Massachusetts,Worcester County,Southbridge,http://ci.southbridge.ma.us/ +Massachusetts,Hampden County,Southwick,http://www.southwickma.org +Massachusetts,Worcester County,Spencer,http://www.spencerma.gov/ +Massachusetts,Hampden County,Springfield,http://www.springfield-ma.gov +Massachusetts,Worcester County,Sterling,http://www.sterling-ma.gov/ +Massachusetts,Berkshire County,Stockbridge,http://www.townofstockbridge.com +Massachusetts,Middlesex County,Stoneham,https://www.stoneham-ma.gov +Massachusetts,Middlesex County,Stoughton,http://www.stoughton-ma.gov/ +Massachusetts,Middlesex County,Stow,http://www.stow-ma.gov/ +Massachusetts,Middlesex County,Sudbury,http://sudbury.ma.us/ +Massachusetts,Franklin County,Sunderland,http://www.townofsunderland.us +Massachusetts,Worcester County,Sutton,http://www.suttonma.org +Massachusetts,Essex County,Swampscott,http://www.town.swampscott.ma.us +Massachusetts,Bristol County,Swansea,http://www.346swa.wycliffe.hostingrails.com/ +Massachusetts,Bristol County,Taunton,http://www.taunton-ma.gov +Massachusetts,Worcester County,Templeton,http://www.TempletonMA.gov/ +Massachusetts,Middlesex County,Tewksbury,http://www.tewksbury-ma.gov/ +Massachusetts,Dukes County,Tisbury,http://www.tisburyma.gov +Massachusetts,Hampden County,Tolland,http://www.tolland-ma.gov +Massachusetts,Essex County,Topsfield,http://www.topsfield-ma.gov +Massachusetts,Middlesex County,Townsend,http://www.townsend.ma.us +Massachusetts,Barnstable County,Truro,http://www.truro-ma.gov/ +Massachusetts,Middlesex County,Tyngsborough,http://www.tyngsboroughma.gov/ +Massachusetts,Berkshire County,Tyringham,https://www.tyringham-ma.gov/ +Massachusetts,Worcester County,Upton,http://www.uptonma.gov/ +Massachusetts,Worcester County,Uxbridge,http://www.uxbridge-ma.gov/ +Massachusetts,Middlesex County,Wakefield,http://www.wakefield.ma.us/ +Massachusetts,Hampden County,Wales,http://www.townofwales.net +Massachusetts,Norfolk County,Walpole,http://www.walpole-ma.gov/ +Massachusetts,Middlesex County,Waltham,http://www.city.waltham.ma.us/ +Massachusetts,Hampshire County,Ware,http://www.townofware.com +Massachusetts,Plymouth County,Wareham,http://www.wareham.ma.us/ +Massachusetts,Worcester County,Warren,http://www.warren-ma.gov/pages/index +Massachusetts,Franklin County,Warwick,http://www.warwickma.org +Massachusetts,Berkshire County,Washington,https://www.washington-ma.gov +Massachusetts,Middlesex County,Watertown,https://www.watertown-ma.gov/ +Massachusetts,Middlesex County,Wayland,http://www.wayland.ma.us/ +Massachusetts,Worcester County,Webster,http://www.webster-ma.gov/ +Massachusetts,Worcester County,Wellesley,http://www.wellesleyma.gov/ +Massachusetts,Barnstable County,Wellfleet,http://www.wellfleetma.org +Massachusetts,Franklin County,Wendell,http://www.wendellmass.us +Massachusetts,Essex County,Wenham,http://www.wenhamma.gov +Massachusetts,Worcester County,West Boylston,https://www.westboylston-ma.gov/ +Massachusetts,Plymouth County,West Bridgewater,https://www.westbridgewaterma.org/ +Massachusetts,Worcester County,West Brookfield,http://www.wbrookfield.com/ +Massachusetts,Essex County,West Newbury,http://www.wnewbury.org/pages/index +Massachusetts,Hampden County,West Springfield,http://www.townofwestspringfield.org/ +Massachusetts,Berkshire County,West Stockbridge,http://www.weststockbridge-ma.gov +Massachusetts,Dukes County,West Tisbury,http://www.westtisbury-ma.gov +Massachusetts,Worcester County,Westborough,http://town.westborough.ma.us +Massachusetts,Hampden County,Westfield,http://www.cityofwestfield.org +Massachusetts,Middlesex County,Westford,http://www.westfordma.gov/ +Massachusetts,Hampshire County,Westhampton,http://www.westhampton-ma.com +Massachusetts,Worcester County,Westminster,http://www.westminster-ma.gov/ +Massachusetts,Middlesex County,Weston,http://www.weston.org +Massachusetts,Bristol County,Westport,http://www.westport-ma.com +Massachusetts,Bristol County,Westwood,http://www.townhall.westwood.ma.us/ +Massachusetts,Bristol County,Weymouth,http://www.weymouth.ma.us/ +Massachusetts,Franklin County,Whately,http://www.whately.org +Massachusetts,Plymouth County,Whitman,http://www.whitman-ma.gov/ +Massachusetts,Hampden County,Wilbraham,http://www.wilbraham-ma.gov/ +Massachusetts,Hampshire County,Williamsburg,http://www.burgy.org +Massachusetts,Berkshire County,Williamstown,http://williamstownma.gov/ +Massachusetts,Middlesex County,Wilmington,https://www.wilmingtonma.gov/ +Massachusetts,Worcester County,Winchendon,http://www.townofwinchendon.com/ +Massachusetts,Middlesex County,Winchester,http://www.winchester.us/ +Massachusetts,Berkshire County,Windsor,http://windsormass.com +Massachusetts,Suffolk County,Winthrop,http://www.town.winthrop.ma.us/ +Massachusetts,Middlesex County,Woburn,http://www.woburnma.gov/ +Massachusetts,Worcester County,Worcester,http://www.worcesterma.gov +Massachusetts,Hampshire County,Worthington,http://www.worthington-ma.us +Massachusetts,Hampshire County,Wrentham,http://wrentham.ma.us/ +Massachusetts,Barnstable County,Yarmouth,http://www.yarmouth.ma.us +Michigan,Kent County,Ada Township,http://adamichigan.org/township +Michigan,Houghton County,Adams Township,https://adamstownship.webs.com/ +Michigan,Lenawee County,Addison,http://addisonmi.us +Michigan,Oakland County,Addison Township,http://www.twp.addison.mi.us/ +Michigan,Lenawee County,Adrian,http://adriancity.com +Michigan,Lenawee County,Adrian Charter Township,http://www.adrianchartertownship.com +Michigan,Tuscola County,Akron,https://www.villageofakron.org/ +Michigan,Ingham County,Alaiedon Township,https://www.alaiedontwp.com/ +Michigan,Kalamazoo County,Alamo Township,http://www.alamotownship.org +Michigan,Emmet County,Alanson,https://www.villageofalanson.com/ +Michigan,Calhoun County,Alcona Township,http://alconatownship.com/ +Michigan,Branch County,Algansee Township,http://alganseetownship.com +Michigan,Kent County,Algoma Township,https://www.algomatwp.org/ +Michigan,St. Clair County,Algonac,http://www.cityofalgonac.org/ +Michigan,Allegan County,Allegan,http://www.cityofallegan.org/ +Michigan,Allegan County,Allegan Township,http://www.allegantownship.org +Michigan,Ottawa County,Allen Park,http://www.cityofallenpark.org/ +Michigan,Ottawa County,Allendale Charter Township,http://www.allendale-twp.org/ +Michigan,Keweenaw County,Allouez Township,https://alloueztwp.com/ +Michigan,Gratiot County,Alma,http://www.ci.alma.mi.us/1/307/index.asp +Michigan,Benzie County,Almira Township,http://www.almiratownship.org +Michigan,Lapeer County,Almont Township,http://almonttownship.org +Michigan,Cheboygan County,Aloha Township,http://www.alohatownship.com +Michigan,Alpena County,Alpena,http://www.alpena.mi.us/ +Michigan,Alpena County,Alpena Township,http://www.alpenatownship.com +Michigan,Kent County,Alpine Township,http://www.alpinetwp.org/ +Michigan,Washtenaw County,Ann Arbor,http://www.a2gov.org/ +Michigan,Washtenaw County,Ann Arbor Charter Township,http://aatwp.org/ +Michigan,Manistee County,Arcadia Township,http://www.townshipofarcadia.org/ +Michigan,Genesee County,Argentine Township,http://www.argentinetownship.com +Michigan,Van Buren County,Arlington Township,https://www.arlingtontownship.com/ +Michigan,Macomb County,Armada,http://www.villageofarmada.org/ +Michigan,Clare County,Arthur Township,https://arthurtownshipmi.com/ +Michigan,County Clare,Arvon Township,http://arvontownship.org/ +Michigan,Monroe County,Ash Township,http://ashtownship.org/ +Michigan,Barry County,Assyria Township,http://www.assyriatownship.com +Michigan,Genesee County,Atlas Township,http://atlastownship.org +Michigan,Lapeer County,Attica Township,http://atticatownship.org +Michigan,Arenac County,Au Gres,http://www.cityofau-gres-mi.org +Michigan,Iosco County,Au Sable Township,http://www.ausabletownship.net/ +Michigan,Roscommon County,Au Sable Township,http://ausabletownshipmi.com/ +Michigan,Alger County,Au Train Township,http://www.autraintownship.org/ +Michigan,Bay County,Auburn,http://www.auburnmi.org/ +Michigan,Oakland County,Auburn Hills,http://www.auburnhills.org/ +Michigan,Washtenaw County,Augusta Charter Township,https://augustatownship.org/ +Michigan,Ingham County,Aurelius Township,http://www.aureliustwp.org/ +Michigan,Huron County,Bad Axe,http://www.cityofbadaxe.com/ +Michigan,Berrien County,Bainbridge Township,http://www.bainbridgetownship.org/ +Michigan,Barry County,Baltimore Township,http://baltimoretwp.com +Michigan,Shiawassee County,Bancroft,http://www.villageofbancroftmi.org/ +Michigan,Bay County,Bangor Charter Township,https://bangortownship.org/ +Michigan,Antrim County,Banks Township,https://www.bankstownship.net/ +Michigan,County Antrim,Baraga,http://www.villageofbaraga.com/ +Michigan,County Antrim,Baraga Township,http://www.baragatownship.org +Michigan,Berrien County,Baroda,https://barodavillage.org/ +Michigan,Berrien County,Baroda Township,https://barodatownship.org/ +Michigan,Barry County,Barry Township,http://www.barrytownship.com +Michigan,Washtenaw County,Barton Hills,https://bartonhillsvillage.org/ +Michigan,Clinton County,Bath Charter Township,https://bathtownship.us/ +Michigan,Calhoun County,Battle Creek,http://www.battlecreekmi.gov/ +Michigan,Bay County,Bay City,http://www.baycitymi.org +Michigan,Charlevoix County,Bay Township,http://baytownshipmi.org/ +Michigan,Emmet County,Bear Creek Township,https://bearcreektownship.com/ +Michigan,Manistee County,Bear Lake,http://www.bearlakemichigan.org/ +Michigan,Kalkaska County,Bear Lake Township,https://www.bearlaketownship.org/ +Michigan,Cheboygan County,Beaugrand Township,http://www.beaugrandtwp.org +Michigan,Crawford County,Beaver Creek Township,http://beavercreektownship.com +Michigan,Bay County,Beaver Township,https://beavertwp.com/ +Michigan,Gladwin County,Beaverton,http://www.beavertonmi.org/ +Michigan,Calhoun County,Bedford Charter Township,http://bedfordchartertownship.com +Michigan,Monroe County,Bedford Township,http://www.bedfordmi.org/ +Michigan,Ionia County,Belding,http://www.ci.belding.mi.us/ +Michigan,Antrim County,Bellaire,https://www.bellairemichigan.com/ +Michigan,County Antrim,Belleville,https://belleville.mi.us/ +Michigan,Eaton County,Bellevue,http://www.bellevuemi.net/ +Michigan,Clinton County,Bengal Township,http://www.bengaltownship.com/ +Michigan,Shiawassee County,Bennington Township,http://www.bennington-township.org/ +Michigan,Berrien County,Benton Charter Township,https://bentonchartertwp.org/ +Michigan,Berrien County,Benton Harbor,https://bhcity.us/ +Michigan,Cheboygan County,Benton Township,http://www.bentontwp.org +Michigan,Benzie County,Benzonia,https://www.villagebenzonia.com/ +Michigan,Benzie County,Benzonia Township,http://www.benzoniatownship.org +Michigan,Ontonagon County,Bergland Township,http://berglandmi.org/ +Michigan,Oakland County,Berkley,http://www.berkleymich.org/ +Michigan,Monroe County,Berlin Charter Township,http://www.berlinchartertwp.com/ +Michigan,St. Clair County,Berlin Township,https://www.berlintwpstclair.org/ +Michigan,Berrien County,Berrien Springs,https://www.villageofberriensprings.com/ +Michigan,Berrien County,Berrien Township,https://www.berrientownship.org/ +Michigan,Berrien County,Bertrand Township,https://bertrandtownship.com/ +Michigan,Gogebic County,Bessemer,https://www.cityofbessemer.org/ +Michigan,Gogebic County,Bessemer Township,http://bessemertownship.com/ +Michigan,Oakland County,Beverly Hills,http://www.villagebeverlyhills.com +Michigan,Oscoda County,Big Creek Township,http://www.bigcreektownship.com/ +Michigan,Mecosta County,Big Rapids,http://cityofbr.org/ +Michigan,Gladwin County,Billings Township,http://billingstownship.org +Michigan,Oakland County,Bingham Farms,http://www.binghamfarms.org/ +Michigan,Clinton County,Bingham Township,http://www.binghamtownship.org/ +Michigan,Saginaw County,Birch Run,http://www.villageofbirchrun.com +Michigan,Saginaw County,Birch Run Township,http://www.birchruntwp.com/ +Michigan,Oakland County,Birmingham,http://bhamgov.org/ +Michigan,Jackson County,Blackman Charter Township,http://www.blackmantwp.com +Michigan,Ottawa County,Blendon Township,http://www.blendontownship-mi.gov +Michigan,Lenawee County,Blissfield,http://www.blissfieldmichigan.gov +Michigan,Lenawee County,Blissfield Township,http://www.blissfieldtownship.com +Michigan,Oakland County,Bloomfield Hills,http://www.bloomfieldhillsmi.net +Michigan,Oakland County,Bloomfield Township,https://www.bloomfieldtwp.org/Home.aspx +Michigan,Kalkaska County,Blue Lake Township,http://bluelaketwpkalkaska.org/ +Michigan,Saginaw County,Blumfield Township,http://www.blumfieldtwp.org/ +Michigan,Kalkaska County,Boardman Township,https://boardmantownshipmi.net/ +Michigan,Mackinac County,Bois Blanc Township,http://www.boisblanctownship.org/ +Michigan,Gladwin County,Bourret Township,https://www.bourrettownship.com/ +Michigan,Kent County,Bowne Township,http://www.bownetwp.org/ +Michigan,Charlevoix County,Boyne City,http://www.cityofboynecity.com/ +Michigan,Charlevoix County,Boyne Valley Township,http://boynevalleytwp.org/ +Michigan,Kalamazoo County,Brady Township,http://www.bradytwp.org +Michigan,Saginaw County,Brady Township,https://bradytownship.org/ +Michigan,Oakland County,Brandon Charter Township,http://brandontownship.us/ +Michigan,Gratiot County,Breckenridge,http://www.breckenridgemi.com/ +Michigan,Dickinson County,Breitung Charter Township,http://www.breitungtwp.org/ +Michigan,Mackinac County,Brevort Township,https://www.brevorttownship.com/ +Michigan,Sanilac County,Bridgehampton Township,http://bridgehamptontwp.com +Michigan,Saginaw County,Bridgeport Charter Township,https://www.bridgeportmi.org/ +Michigan,Newaygo County,Bridgeton Township,https://bridgetontownship.org/ +Michigan,Washtenaw County,Bridgewater Township,http://twp-bridgewater.org/ +Michigan,Berrien County,Bridgman,https://www.bridgman.org/ +Michigan,Livingston County,Brighton,http://www.brightoncity.org +Michigan,Livingston County,Brighton Township,http://www.brightontwp.com +Michigan,Lenawee County,Britton,http://www.villageofbritton.org +Michigan,St. Clair County,Brockway Township,http://www.stclaircounty.org/townships/brockway/ +Michigan,Branch County,Bronson,http://www.bronson-mi.com/ +Michigan,Branch County,Bronson Township,https://www.michigantownships.org/twp_details.asp?fips=10880 +Michigan,Columbia Township,Brooklyn,https://www.villageofbrooklyn.com/ +Michigan,Lapeer County,Brown City,http://www.ci.brown-city.mi.us +Michigan,Lapeer County,Brownstown Charter Township,http://brownstown-mi.org/ +Michigan,Chippewa County,Bruce Township,http://www.brucetownship.net +Michigan,Berrien County,Buchanan,https://www.cityofbuchanan.com/ +Michigan,Berrien County,Buchanan Township,https://www.buchanantownship.net/ +Michigan,Saginaw County,Buena Vista Charter Township,http://www.bvct.org/ +Michigan,Ingham County,Bunker Hill Township,http://www.bunkerhilltownship.org/ +Michigan,Calhoun County,Burlington Township,https://burlingtontownshipcalhouncountymi.com/ +Michigan,Shiawassee County,Burns Township,http://burnstownship.org/ +Michigan,St. Joseph County,Burr Oak Township,http://www.burroaktownship.org/ +Michigan,Alger County,Burt Township,http://www.burttownship.com/ +Michigan,Cheboygan County,Burt Township,http://www.burttownship.org +Michigan,St. Clair County,Burtchville Township,https://burtchville.org/wp/ +Michigan,Genesee County,Burton,http://www.burtonmi.gov +Michigan,Branch County,Butler Township,http://www.butlertownshipmi.com +Michigan,Gladwin County,Butman Township,http://butmantwp.com/index.php +Michigan,Shiawassee County,Byron,http://www.byronmi.org/Home.aspx +Michigan,Kent County,Byron Township,https://www.byrontownship.org/ +Michigan,Wexford County,Cadillac,http://www.cadillac-mi.net/ +Michigan,Caledonia Township,Caledonia,http://www.villageofcaledonia.org/ +Michigan,Missaukee County,Caledonia Township,http://caledoniatwp.net/ +Michigan,Kent County,Caledonia Township,https://www.caledoniatownship.org/ +Michigan,Shiawassee County,Caledonia Township,http://www.caledoniatwp.com/ +Michigan,Houghton County,Calumet Charter Township,http://calumettownship.org +Michigan,Cass County,Calvin Township,https://www.calvintownship.org/ +Michigan,Lenawee County,Cambridge Township,http://www.cambridgetownship.net +Michigan,Hillsdale County,Camden Township,https://camdentownship.info/ +Michigan,Ionia County,Campbell Township,https://www.campbelltownship.org/ +Michigan,Kent County,Cannon Township,https://www.cannontwp.org/ +Michigan,Kent County,Canton Charter Township,http://www.canton-mi.org +Michigan,St. Clair County,Capac,https://www.villageofcapac.com/ +Michigan,Monroe County,Carleton,http://www.carletonmi.us/ +Michigan,Tuscola County,Caro,http://www.carocity.net/ +Michigan,Saginaw County,Carrollton Township,http://www.carrolltontwp.com/ +Michigan,Montcalm County,Carson City,http://www.carsoncitymi.com/ +Michigan,Kent County,Cascade Charter Township,https://www.cascadetwp.com/ +Michigan,Allegan County,Casco Township,http://www.cascotownship.org +Michigan,St. Clair County,Casco Township,http://www.cascostclair.com/ +Michigan,Huron County,Caseville,https://www.cityofcaseville.com/ +Michigan,Huron County,Caseville Township,https://www.casevilletownship.com/ +Michigan,Tuscola County,Cass City,http://casscity.org/ +Michigan,Cass County,Cassopolis,http://cassopolis-mi.us/ +Michigan,Muskegon County,Cedar Creek Township,https://cedarcreektownship.org/ +Michigan,Kent County,Cedar Springs,http://www.cityofcedarsprings.org/ +Michigan,Columbia Township,Cement City,http://www.villageofcementcity.com +Michigan,Emmet County,Center Line,http://www.centerline.gov/ +Michigan,Antrim County,Central Lake,https://www.centrallakemi.org/ +Michigan,Antrim County,Central Lake Township,https://www.centrallaketownship.org/ +Michigan,St. Joseph County,Centreville,https://centrevillemi.com/ +Michigan,Charlevoix County,Chandler Township,http://www.chandlertownship.org/ +Michigan,Kalamazoo County,Charleston Township,http://www.charlestontownship.org +Michigan,Charlevoix County,Charlevoix,http://www.cityofcharlevoix.org/ +Michigan,Charlevoix County,Charlevoix Township,http://www.charlevoixtownship.com +Michigan,Eaton County,Charlotte,http://www.charlottemi.org/ +Michigan,Otsego County,Charlton Township,http://www.charltontownship.com/ +Michigan,Houghton County,Chassell Township,http://chassell.net/ +Michigan,Cheboygan County,Cheboygan,http://www.cheboygan.org/ +Michigan,Washtenaw County,Chelsea,https://www.city-chelsea.org/home +Michigan,Wexford County,Cherry Grove Township,http://www.cherrygrovetwp.org/ +Michigan,Saginaw County,Chesaning,http://www.villageofchesaning.org/ +Michigan,Saginaw County,Chesaning Township,http://www.chesaningtwp.org/ +Michigan,Allegan County,Cheshire Township,https://www.cheshiretownship.org/ +Michigan,Ottawa County,Chester Township,http://www.chester-twp.org +Michigan,Ottawa County,Chesterfield Township,http://chesterfieldtwp.org/ +Michigan,Berrien County,Chikaming Township,https://www.chikamingtownship.org/ +Michigan,St. Clair County,China Township,http://chinatwp.net/ +Michigan,Marquette County,Chocolay Charter Township,http://www.chocolay.org/ +Michigan,Wexford County,Clam Lake Township,http://www.clamlaketownship.org/ +Michigan,Clare County,Clare,https://cityofclare.org/ +Michigan,Calhoun County,Clarence Township,http://www.clarencetwp.org +Michigan,Mackinac County,Clark Township,http://www.clarktwp.org/ +Michigan,Ionia County,Clarksville,http://www.clarksvillemi.org +Michigan,Oakland County,Clawson,http://www.cityofclawson.com/ +Michigan,St. Clair County,Clay Township,http://www.claytownship.org/ +Michigan,Dover Township,Clayton,https://villageofclaytonmi.gov/ +Michigan,Genesee County,Clayton Charter Township,http://www.claytontownship.org +Michigan,Arenac County,Clayton Township,http://www.claytontownship.com/ +Michigan,Kalkaska County,Clearwater Township,https://www.clearwatertwp.com/ +Michigan,Gladwin County,Clement Township,https://clementtwp.org/ +Michigan,Clinton Township,Clinton,http://www.villageofclinton.org +Michigan,Lenawee County,Clinton Charter Township,https://clintontownship.com/ +Michigan,Lenawee County,Clinton Township,http://www.twpofclinton.com +Michigan,Genesee County,Clio,http://www.clio.govoffice.com +Michigan,Allegan County,Clyde Township,http://www.michigantownshipservices.org/Clyde_Township.htm +Michigan,St. Clair County,Clyde Township,http://www.clydetownshipscc.org/ +Michigan,Livingston County,Cohoctah Township,http://cohoctahtownship.org +Michigan,Kalkaska County,Coldsprings Township,http://www.coldspringsexcelsior.org/ +Michigan,Branch County,Coldwater,http://www.coldwater.org/ +Michigan,Branch County,Coldwater Township,http://coldwatertownship.com +Michigan,Midland County,Coleman,https://www.cityofcoleman.org/ +Michigan,Benzie County,Colfax Township,http://www.colfaxtwp.org +Michigan,Huron County,Colfax Township,http://colfaxtwp-huron.com/ +Michigan,Wexford County,Colfax Township,https://colfaxtownshipwexfordcountymichigan.org/ +Michigan,Berrien County,Coloma,https://www.cityofcoloma.org/ +Michigan,Berrien County,Coloma Charter Township,https://www.colomatownship.org/ +Michigan,St. Joseph County,Colon,https://www.colonmi.net/ +Michigan,Jackson County,Columbia Township,http://www.twp.columbia.mi.us/ +Michigan,Van Buren County,Columbia Township,https://www.columbiatwp.com/ +Michigan,St. Clair County,Columbus Township,http://www.columbustwp.org/ +Michigan,Oscoda County,Comins Township,http://cominstwp.com/ +Michigan,Oakland County,Commerce Township,http://www.commercetwp.com/ +Michigan,Kalamazoo County,Comstock Township,http://www.comstockmi.gov +Michigan,Jackson County,Concord,http://villageofconcord.com/ +Michigan,Jackson County,Concord Township,https://concordtownshipmi.org/ +Michigan,St. Joseph County,Constantine,https://constantinemi.com/ +Michigan,St. Joseph County,Constantine Township,https://constantinetwp.com/ +Michigan,Calhoun County,Convis Township,http://convistownship.org +Michigan,Livingston County,Conway Township,http://www.conwaytownship.com +Michigan,Kalamazoo County,Cooper Charter Township,http://www.coopertwp.org +Michigan,Ottawa County,Coopersville,http://www.cityofcoopersville.com/ +Michigan,Shiawassee County,Corunna,http://www.corunna-mi.gov/ +Michigan,St. Clair County,Cottrellville Township,http://www.cott-township.org/ +Michigan,Kent County,Courtland Township,https://www.courtlandtwp.org/ +Michigan,Van Buren County,Covert Township,http://www.coverttwp.com/ +Michigan,Van Buren County,Covington Township,http://www.covingtonmichigan.org/index.html +Michigan,Newaygo County,Croton Township,https://www.crotontownship.org/ +Michigan,Benzie County,Crystal Lake Township,http://www.crystallaketwp.org +Michigan,Ogemaw County,Curtis Township,http://www.curtistownship.com +Michigan,Custer Township,Custer,http://www.villageofcuster.org/ +Michigan,Antrim County,Custer Township,https://www.custertownshipantrim.org/ +Michigan,Chippewa County,Dafter Township,https://www.daftertownship.org/ +Michigan,Clinton County,Dallas Township,http://dallastwp.com/ +Michigan,Muskegon County,Dalton Township,http://daltontownship.org/ +Michigan,Ingham County,Dansville,http://www.inghamtownship.com/VillageofDansville.aspx +Michigan,Genesee County,Davison,http://cityofdavison.org +Michigan,Genesee County,Davison Township,http://davisontwp-mi.org +Michigan,Tuscola County,Dearborn,http://www.cityofdearborn.org +Michigan,Tuscola County,Dearborn Heights,http://www.ci.dearborn-heights.mi.us/ +Michigan,Van Buren County,Decatur,http://www.decaturmi.org/ +Michigan,Van Buren County,Decatur Township,http://www.decaturmi.org/ +Michigan,Sanilac County,Deckerville,http://www.deckerville.us/ +Michigan,Deerfield Township,Deerfield,http://www.deerfieldmichigan.gov +Michigan,Lapeer County,Deerfield Township,http://www.deerfieldtownship.com +Michigan,Livingston County,Deerfield Township,http://www.deerfieldtwp.org +Michigan,Ingham County,Delhi Charter Township,https://www.delhitownship.com/ +Michigan,Eaton County,Delta Charter Township,http://www.deltami.gov/ +Michigan,Roscommon County,Denton Township,http://www.dentontownship-mi.org/ +Michigan,Chippewa County,Detour Township,http://www.detourvillage.org/ +Michigan,Chippewa County,DeTour Village,http://www.detourvillage.org/ +Michigan,Wayne County,Detroit,http://www.detroitmi.gov/ +Michigan,Wayne County,DeWitt,http://www.dewittmi.org/ +Michigan,Clinton County,DeWitt Charter Township,https://www.dewitttownship.org/ +Michigan,Washtenaw County,Dexter,http://www.DexterMI.gov +Michigan,Washtenaw County,Dexter Township,http://www.dextertownship.org/ +Michigan,Eaton County,Dimondale,http://www.villageofdimondale.org +Michigan,Allegan County,Dorr Township,http://www.dorrtownship.org +Michigan,Allegan County,Douglas,http://www.ci.douglas.mi.us/ +Michigan,Cass County,Dowagiac,http://www.cityofdowagiac.com/ +Michigan,Schoolcraft County,Doyle Township,https://www.doyletownship.com/ +Michigan,Monroe County,Dundee,http://www.dundeevillage.net/ +Michigan,Monroe County,Dundee Township,http://www.dundeetownship.info/ +Michigan,Clinton County,Duplain Township,http://www.duplaintwp.com/ +Michigan,Shiawassee County,Durand,http://www.durandmi.com/ +Michigan,Keweenaw County,Eagle Harbor Township,https://www.eagleharbortwp.org/ +Michigan,Clinton County,Eagle Township,http://eagletownship.org +Michigan,Keweenaw County,East Bay Township,http://www.eastbaytwp.org/ +Michigan,St. Clair County,East China Township,http://www.eastchinatownship.org/ +Michigan,Kent County,East Grand Rapids,http://www.eastgr.org +Michigan,Charlevoix County,East Jordan,http://eastjordancity.org/ +Michigan,Clinton County,East Lansing,http://www.cityofeastlansing.com +Michigan,Iosco County,East Tawas,http://www.easttawas.com/ +Michigan,Ionia County,Eastpointe,http://www.cityofeastpointe.net +Michigan,Eaton County,Eaton Rapids,http://www.cityofeatonrapids.com/ +Michigan,Calhoun County,Eckford Township,http://www.eckfordtownship.com +Michigan,Calhoun County,Ecorse,http://www.ecorsemi.gov/ +Michigan,Midland County,Edenville Township,https://www.edenvilletwp.org/ +Michigan,Montcalm County,Edmore,http://www.edmore.org/ +Michigan,Muskegon County,Egelston Township,http://www.egelstontwp.org +Michigan,Antrim County,Elk Rapids,http://www.elkrapids.org/ +Michigan,Antrim County,Elk Rapids Township,http://www.elkrapids.com/ +Michigan,Oliver Township,Elkton,http://villageofelkton.com/ +Michigan,Antrim County,Ellsworth,http://villageofellsworthmi.com/ +Michigan,Houghton County,Elm River Township,http://www.elmrivertownship.com/ +Michigan,Otsego County,Elmira Township,http://www.elmiratownship.com/ +Michigan,Tuscola County,Elsie,http://elsie.org/ +Michigan,Marquette County,Ely Township,https://elytownship.com/ +Michigan,Calhoun County,Emmett Charter Township,http://www.emmett.org +Michigan,St. Clair County,Empire,https://www.leelanau.cc/empirevillage.asp +Michigan,St. Clair County,Empire Township,https://www.leelanau.cc/ +Michigan,Monroe County,Erie Township,http://erietownship.com/ +Michigan,Gogebic County,Erwin Township,https://erwintownship.org/ +Michigan,Delta County,Escanaba,http://www.escanaba.org/ +Michigan,Delta County,Escanaba Township,https://www.escanabatownship.org/ +Michigan,Clinton County,Essex Township,http://www.essextownship.org/ +Michigan,Bay County,Essexville,https://essexville.org/ +Michigan,Monroe County,Estral Beach,http://www.estralbeachvillage.org/index.html +Michigan,Charlevoix County,Evangeline Township,http://evangelinetwp.org/ +Michigan,Osceola County,Evart,http://evart.org +Michigan,Charlevoix County,Eveline Township,https://www.evelinetownship.org/ +Michigan,Kalkaska County,Excelsior Township,http://www.excelsiortownship.org/ +Michigan,Monroe County,Exeter Township,https://www.exetertwp.com/ +Michigan,St. Joseph County,Fabius Township,https://www.fabiustownship.org/ +Michigan,Lenawee County,Fairfield Township,http://www.fairfieldtownship.net +Michigan,Shiawassee County,Fairfield Township,http://fairfieldtwp.us/ +Michigan,Tuscola County,Fairgrove Township,https://fairgrovetwp.org/ +Michigan,Oakland County,Farmington,http://www.farmgov.com/ +Michigan,Oakland County,Farmington Hills,http://www.fhgov.com +Michigan,Clare County,Farwell,https://villageoffarwell.net/ +Michigan,Allegan County,Fennville,http://fennville.com/ +Michigan,Genesee County,Fenton,http://www.cityoffenton.org +Michigan,Genesee County,Fenton Township,http://www.fentontownship.org +Michigan,Oakland County,Ferndale,http://ferndalemi.gov/ +Michigan,Ottawa County,Ferrysburg,http://www.ferrysburg.org/ +Michigan,Ottawa County,Fife Lake,http://www.fifelake.com/ +Michigan,Ottawa County,Fife Lake Township,http://fifelaketwp.com/ +Michigan,Allegan County,Fillmore Township,http://www.fillmoretownship.com +Michigan,Monroe County,Flat Rock,http://www.flatrockmi.org/index.asp +Michigan,Genesee County,Flint,http://www.cityofflint.com +Michigan,Genesee County,Flint Charter Township,http://www.flinttownship.org +Michigan,Genesee County,Flushing,http://www.flushingcity.com +Michigan,Genesee County,Flushing Charter Township,http://www.flushingtownship.com +Michigan,Sanilac County,Flynn Township,http://flynntownship.org/ +Michigan,Delta County,Ford River Township,https://fordriver.org/ +Michigan,Antrim County,Forest Home Township,http://www.foresthometwp.com/ +Michigan,Genesee County,Forest Township,http://www.foresttwp.com +Michigan,Marquette County,Forsyth Township,https://www.forsythtwpmi.org/ +Michigan,St. Clair County,Fort Gratiot Charter Township,https://fortgratiot.us/ +Michigan,Sherman Township,Fowler,https://fowlermi.com/ +Michigan,Livingston County,Fowlerville,http://www.fowlerville.org +Michigan,Bay County,Frankenlust Township,http://www.frankenlust.com +Michigan,Saginaw County,Frankenmuth,http://www.frankenmuth.org +Michigan,Saginaw County,Frankenmuth Township,http://www.frankenmuthtwp.com/ +Michigan,Benzie County,Frankfort,http://www.frankfortmich.com +Michigan,Oakland County,Franklin,https://www.franklin.mi.us/ +Michigan,Clare County,Franklin Township,http://www.franklin-twp.com/ +Michigan,Lenawee County,Franklin Township,http://www.franklintownship.net +Michigan,Bay County,Fraser,http://www.ci.fraser.mi.us/ +Michigan,Bay County,Fraser Township,http://frasertownship.org/ +Michigan,Crawford County,Frederic Township,http://frederictownship.org +Michigan,Calhoun County,Fredonia Township,http://www.fredoniatownship.com +Michigan,Washtenaw County,Freedom Township,http://www.twp-freedom.org/ +Michigan,Clare County,Freeman Township,http://freemantwp.com/ +Michigan,Newaygo County,Fremont,http://www.cityoffremont.net/ +Michigan,Saginaw County,Fremont Township,http://www.fremonttownship.org/ +Michigan,Monroe County,Frenchtown Township,http://www.frenchtowntownship.org/ +Michigan,Clare County,Frost Township,http://www.frosttownship.com/ +Michigan,Muskegon County,Fruitland Township,http://www.fruitlandtwp.org/ +Michigan,Muskegon County,Fruitport,http://www.villageoffruitport.com/ +Michigan,Muskegon County,Fruitport Charter Township,http://www.fruitporttownship-mi.gov +Michigan,Genesee County,Gaines Township,http://www.gainestownship.net +Michigan,Kent County,Gaines Township,https://www.gainestownship.org/ +Michigan,Kalamazoo County,Galesburg,http://www.galesburgcity.org +Michigan,Berrien County,Galien Township,https://www.galientownship.org/ +Michigan,Allegan County,Ganges Township,http://www.gangestownship.org +Michigan,Delta County,Garden City,http://www.gardencitymi.org/ +Michigan,Bay County,Garfield Township,https://www.garfieldtownship-bc.com/ +Michigan,Clare County,Garfield Township,https://www.garfieldtownship.net/ +Michigan,Otsego County,Gaylord,https://cityofgaylord.com/ +Michigan,Genesee County,Genesee Township,http://geneseetwp.com +Michigan,Midland County,Geneva Township,http://genevatwpmidlandcounty.com/ +Michigan,Livingston County,Genoa Township,http://www.genoa.org +Michigan,Ottawa County,Georgetown Township,http://www.georgetown-mi.gov +Michigan,Roscommon County,Gerrish Township,http://www.gerrishtownship.org/ +Michigan,Roscommon County,Gibraltar,http://cityofgibraltar.net/ +Michigan,Branch County,Girard Township,http://girardtownship.net +Michigan,Delta County,Gladstone,http://www.gladstonemi.org/ +Michigan,Gladwin County,Gladwin,http://www.gladwin.org/ +Michigan,Ogemaw County,Goodar Township,http://goodartwp.com/ +Michigan,Lapeer County,Goodland Township,http://www.goodlandtownship.org/ +Michigan,Genesee County,Goodrich,http://www.villageofgoodrich.com +Michigan,Berrien County,Grand Beach,https://www.grandbeach.org/ +Michigan,Genesee County,Grand Blanc,http://cityofgrandblanc.com +Michigan,Genesee County,Grand Blanc Charter Township,http://www.twp.grand-blanc.mi.us +Michigan,Ottawa County,Grand Haven,http://www.grandhaven.org +Michigan,Ottawa County,Grand Haven Charter Township,http://www.ght.org/ +Michigan,Eaton County,Grand Ledge,https://www.cityofgrandledge.com/ +Michigan,Eaton County,Grand Rapids,https://www.grandrapidsmi.gov/Home +Michigan,Kent County,Grand Rapids Charter Township,http://www.grandrapidstwp.org +Michigan,Kent County,Grandville,http://www.cityofgrandville.com +Michigan,Newaygo County,Grant,http://www.cityofgrantmi.com +Michigan,Cheboygan County,Grant Township,http://granttwp.com +Michigan,Clare County,Grant Township,https://grant-township.org/ +Michigan,Keweenaw County,Grant Township,https://granttownshipmi.org/ +Michigan,Mason County,Grant Township,https://granttwpmi.org/ +Michigan,Oceana County,Grant Township,http://www.granttownshipoceana.com/ +Michigan,St. Clair County,Grant Township,https://granttownship.com/ +Michigan,Jackson County,Grass Lake,https://www.villageofgrasslake.com/ +Michigan,Jackson County,Grass Lake Charter Township,http://www.grasslakect.com/ +Michigan,Kent County,Grattan Township,https://www.grattantownship.org/ +Michigan,Crawford County,Grayling,https://www.cityofgrayling.org/default.asp +Michigan,Crawford County,Grayling Charter Township,http://twp.grayling.mi.us +Michigan,Livingston County,Green Oak Township,http://www.greenoaktwp.com +Michigan,Alpena County,Green Township,http://www.greentownshipmi.org +Michigan,Mecosta County,Greenbush Township,http://www.greenbushtownship.com/ +Michigan,Clinton County,Greenbush Township,https://www.greenbushtwp.org/ +Michigan,Midland County,Greendale Township,https://greendaletwpmidcomi.org/ +Michigan,Montcalm County,Greenville,http://www.greenvillemi.org +Michigan,Clare County,Greenwood Township,https://www.greenwoodtownship.org/ +Michigan,Oscoda County,Greenwood Township,http://www.greenwoodtwp.com/ +Michigan,St. Clair County,Greenwood Township,https://www.greenwoodtownship.com/ +Michigan,Gladwin County,Grosse Ile Township,http://grosseile.com/ +Michigan,Gladwin County,Grosse Pointe,http://www.grossepointecity.org/ +Michigan,Gladwin County,Grosse Pointe Farms,https://www.grossepointefarms.org/ +Michigan,Gladwin County,Grosse Pointe Park,http://www.grossepointepark.org/ +Michigan,Gladwin County,Grosse Pointe Woods,http://www.gpwmi.us/ +Michigan,Oakland County,Groveland Township,http://www.grovelandtownship.net/ +Michigan,Allegan County,Gun Plain Township,http://www.gunplain.org +Michigan,Allegan County,Gustin Township,http://gustintwp.com/ +Michigan,Berrien County,Hagar Township,http://www.hagartownship.org/ +Michigan,Livingston County,Hamburg Township,http://www.hamburg.mi.us +Michigan,Clare County,Hamilton Township,https://www.hamiltontwp.us/ +Michigan,Mason County,Hamlin Township,http://www.hamlintownship.org/ +Michigan,Bay County,Hampton Township,https://hamptontownship.org/ +Michigan,Bay County,Hamtramck,http://www.hamtramck.us/ +Michigan,Houghton County,Hancock,http://www.cityofhancock.com +Michigan,Livingston County,Handy Township,http://www.handytownship.org +Michigan,Jackson County,Hanover Township,https://hanover-twp.org/ +Michigan,Wexford County,Hanover Township,https://hanovertsp.com/ +Michigan,Huron County,Harbor Beach,http://harborbeach.com/ +Michigan,Emmet County,Harbor Springs,http://www.cityofharborsprings.com/ +Michigan,Wexford County,Haring Charter Township,http://www.twpofharing.org/ +Michigan,County Wexford,Harper Woods,http://www.harperwoodscity.org/ +Michigan,Menominee County,Harris Township,http://harristownship.com/ +Michigan,Clare County,Harrison,https://cityofharrisonmi.org/ +Michigan,Macomb County,Harrison Township,http://www.harrison-township.org/ +Michigan,Macomb County,Harrisville Township,https://harrisvilletownship.com/ +Michigan,Oceana County,Hart,https://cityofhart.org/ +Michigan,Van Buren County,Hartford,http://www.cityofhartfordmi.org/ +Michigan,Livingston County,Hartland Township,http://www.hartlandtwp.com +Michigan,Barry County,Hastings,http://www.hastingsmi.org/ +Michigan,Barry County,Hastings Charter Township,http://www.hastingstownship.com +Michigan,Clare County,Hatton Township,http://www.hattontownship.com/ +Michigan,Clare County,Hawes Township,http://www.hawestownship.com +Michigan,Gladwin County,Hay Township,https://haytownship.org/ +Michigan,Charlevoix County,Hayes Township,https://www.hayestownshipmi.gov/ +Michigan,Clare County,Hayes Township,http://www.hayestownship.com/ +Michigan,Oakland County,Hazel Park,http://www.hazelpark.org +Michigan,Shiawassee County,Hazelton Township,http://hazeltontownship.com/ +Michigan,Allegan County,Heath Township,http://www.heathtownship.net +Michigan,Antrim County,Helena Township,http://www.helenatownship.com/ +Michigan,Jackson County,Henrietta Township,http://www.henriettatownship.org/ +Michigan,Oceana County,Hesperia,https://www.michigan.org/city/hesperia#?c=44.4299:-85.1166:6&tid=712&page=0&pagesize=20&pagetitle=Hesperia +Michigan,Roscommon County,Higgins Township,http://www.higginstownship.com/ +Michigan,Wayne County,Highland Park,https://www.highlandparkmi.gov/ +Michigan,Oakland County,Highland Township,https://www.highlandtwp.net/ +Michigan,Hillsdale County,Hillsdale,https://www.cityofhillsdale.org/ +Michigan,Hillsdale County,Hillsdale Township,https://www.hillsdaletownship.org/ +Michigan,Ottawa County,Holland,http://www.cityofholland.com/ +Michigan,Ottawa County,Holland Charter Township,http://www.hct.holland.mi.us/ +Michigan,Oakland County,Holly,http://www.hollyvillage.org/ +Michigan,Oakland County,Holly Township,http://hollytownship.org/ +Michigan,Calhoun County,Homer,https://homermichigan.org/ +Michigan,Midland County,Homer Township,http://www.homertownship.org/ +Michigan,Benzie County,Homestead Township,http://www.homesteadtwp.org +Michigan,Barry County,Hope Township,http://www.hopetwp.com +Michigan,Midland County,Hope Township,http://hopetwp.org/ +Michigan,Allegan County,Hopkins,https://www.villageofhopkins.org/ +Michigan,Allegan County,Hopkins Township,http://hopkinstownship.org +Michigan,Houghton County,Houghton,http://cityofhoughton.com +Michigan,Keweenaw County,Houghton Township,https://www.houghtontwp.org/ +Michigan,Montcalm County,Howard City,https://www.howardcity.org/ +Michigan,Cass County,Howard Township,http://www.howardtwp.org/ +Michigan,Livingston County,Howell,http://www.cityofhowell.org +Michigan,Livingston County,Howell Township,http://howelltownshipmi.org +Michigan,Lenawee County,Hudson,http://www.ci.hudson.mi.us +Michigan,Charlevoix County,Hudson Township,https://hudsontownship.org/ +Michigan,Lenawee County,Hudson Township,http://www.hudsontownshipmi.com +Michigan,Ottawa County,Hudsonville,http://www.hudsonville.org/ +Michigan,Marquette County,Humboldt Township,http://www.humboldt.town/ +Michigan,Huron County,Hume Township,http://www.humetownship.com/ +Michigan,Oakland County,Huntington Woods,http://ci.huntington-woods.mi.us/ +Michigan,Huron County,Huron Charter Township,http://www.hurontownship-mi.gov/ +Michigan,Huron County,Huron Township,https://hurontownship-thumbofmi.com/ +Michigan,Monroe County,Ida Township,https://www.idatownship.org/ +Michigan,Lapeer County,Imlay City,https://www.imlaycity.org/ +Michigan,Lapeer County,Imlay Township,http://www.imlaytownship.com +Michigan,Oakland County,Independence Charter Township,https://www.indtwp.com/ +Michigan,Midland County,Ingersoll Township,http://www.ingersolltownship.com/ +Michigan,Ingham County,Ingham Township,http://www.inghamtownship.com/ +Michigan,Ingham County,Inkster,http://www.cityofinkster.com/ +Michigan,Benzie County,Inland Township,http://inlandtownship.org +Michigan,Cheboygan County,Inverness Township,http://www.invernesstownship.com +Michigan,Schoolcraft County,Inwood Township,http://www.inwoodtownship.org/ +Michigan,Ionia County,Ionia,http://www.ci.ionia.mi.us/ +Michigan,Livingston County,Iosco Township,http://ioscotwp.com +Michigan,St. Clair County,Ira,https://www.iratownship.org/ +Michigan,Dickinson County,Iron Mountain,http://www.cityofironmountain.com +Michigan,Iron County,Iron River,http://www.ironriver.org/ +Michigan,Gogebic County,Ironwood,https://cityofironwood.org/ +Michigan,Gogebic County,Ironwood Charter Township,http://www.ironwoodtownship.com/ +Michigan,Barry County,Irving Township,http://www.irvingtownship.org +Michigan,Marquette County,Ishpeming,https://ishpemingcity.org/ +Michigan,Marquette County,Ishpeming Township,http://www.ishpemingtownship.com/ +Michigan,Gratiot County,Ithaca,http://www.ithacami.com/1/260/index.asp +Michigan,Jackson County,Jackson,http://www.cityofjackson.org/ +Michigan,Saginaw County,James Township,http://www.jamestownship.org/ +Michigan,Ottawa County,Jamestown Charter Township,http://www.twp.jamestown.mi.us/ +Michigan,Cass County,Jefferson Township,https://www.jeffersontownshiponline.org/ +Michigan,Midland County,Jerome Township,http://www.jerometownship.org/ +Michigan,Saginaw County,Jonesfield Township,http://www.jonesfield.com/ +Michigan,Hillsdale County,Jonesville,http://jonesville.org/ +Michigan,Antrim County,Jordan Township,http://www.jordantwp.org/ +Michigan,Kalamazoo County,Kalamazoo,https://www.kalamazoocity.org/ +Michigan,Kalamazoo County,Kalamazoo Township,http://kalamazootownship.org +Michigan,Maple Grove Township,Kaleva,http://villageofkaleva.com +Michigan,Kalkaska County,Kalkaska,https://kalkaskavillage.com +Michigan,Bay County,Kawkawlin Township,http://kawkawlintwp.org/ +Michigan,Antrim County,Kearney Township,http://www.kearneytownship.org/ +Michigan,Oakland County,Keego Harbor,http://www.keegoharbor.org +Michigan,Tyrone Township,Kent City,https://www.kentcitymi.org/ +Michigan,Kent County,Kentwood,https://www.kentwood.us/ +Michigan,St. Clair County,Kimball Township,http://www.kimballtownship.org/ +Michigan,Branch County,Kinderhook Township,http://kinderhooktownship.com +Michigan,Dickinson County,Kingsford,http://www.cityofkingsford.com/ +Michigan,Dickinson County,Kingsley,http://www.villageofkingsley.com/ +Michigan,Chippewa County,Kinross Charter Township,http://www.kinrosstownship-mi.gov +Michigan,Saginaw County,Kochville Township,https://www.kochvilletwp.com/ +Michigan,Tuscola County,Koylton Township,http://www.koyltontownshipmi.org/ +Michigan,Presque Isle County,Krakow Township,http://www.krakowtownship.org/ +Michigan,Monroe County,La Salle Township,http://lasalletwpmi.com/ +Michigan,Gratiot County,Lafayette Township,https://www.lafayettetwp.com +Michigan,Cass County,LaGrange Township,http://www.lagrangetownshipmi.com/ +Michigan,Shiawassee County,Laingsburg,http://laingsburg.us/ +Michigan,Oakland County,Lake Angelus,http://www.lakeangelus.org/ +Michigan,Benzie County,Lake Ann,https://lakeann-mi.com/ +Michigan,Berrien County,Lake Charter Township,http://www.lake-township.org/ +Michigan,Missaukee County,Lake City,http://cityoflakecity.com/ +Michigan,Schoolcraft Township,Lake Linden,http://www.lakelinden.net/ +Michigan,Ionia County,Lake Odessa,http://www.lakeodessa.org/ +Michigan,Oakland County,Lake Orion,http://www.lakeorion.org/ +Michigan,Benzie County,Lake Township,http://www.laketwp.org +Michigan,Huron County,Lake Township,http://www.laketownship.net/ +Michigan,Missaukee County,Lake Township,http://laketownshipmissaukee.com/ +Michigan,Roscommon County,Lake Township,https://www.lake-township.com/ +Michigan,Saginaw County,Lakefield Township,http://www.lakefieldtownship.com/home.html +Michigan,Allegan County,Laketown Township,http://www.laketowntwp.org +Michigan,Muskegon County,Lakewood Club,http://villageoflakewoodclub.org/ +Michigan,Sanilac County,L'Anse,http://villageoflanse.org/ +Michigan,Sanilac County,L'Anse Township,http://www.lansetownship.org +Michigan,Clinton County,Lansing,https://www.lansingmi.gov/ +Michigan,Ingham County,Lansing Charter Township,http://www.lansingtownship.org/ +Michigan,Lapeer County,Lapeer,https://www.ci.lapeer.mi.us +Michigan,Midland County,Larkin Charter Township,http://www.larkintownship.org/default.asp +Michigan,Oakland County,Lathrup Village,http://www.lathrupvillage.org/ +Michigan,Houghton County,Laurium,http://www.laurium.net +Michigan,Van Buren County,Lawrence,http://www.lawrencemi.com/ +Michigan,Van Buren County,Lawrence Township,http://www.lawrence-township.com/ +Michigan,Allegan County,Lee Township,http://www.leetwp.org +Michigan,Midland County,Lee Township,http://www.leetownship.org/ +Michigan,Allegan County,Leighton Township,http://www.leightontownship.org +Michigan,Clayton Township,Lennon,http://www.villageoflennon.org +Michigan,Oakland County,Leonard,http://www.villageofleonard.org +Michigan,Jackson County,Leoni,http://www.leonitownship.com/ +Michigan,Osceola County,LeRoy,http://www.leroymichigan.org/ +Michigan,Calhoun County,Leroy Township,http://leroytownship.org +Michigan,Ingham County,Leroy Township,http://www.leroytwp.com/ +Michigan,Ingham County,Leslie,https://www.cityofleslie.org/ +Michigan,Ingham County,Leslie Township,https://www.leslietownship.org/ +Michigan,Sanilac County,Lexington,https://www.villageoflexington.com/ +Michigan,Jackson County,Liberty Township,https://www.libertytwp.us/ +Michigan,Washtenaw County,Lima Township,https://www.twp-lima.org/ +Michigan,Alger County,Lincoln,http://www.lincolnmi.com/ +Michigan,Berrien County,Lincoln Charter Township,http://www.lctberrien.org/ +Michigan,Osceola County,Lincoln Park,http://www.citylp.com/ +Michigan,Clare County,Lincoln Township,http://www.lincolntwp.com/ +Michigan,Midland County,Lincoln Township,https://www.lincoln-twp.org/ +Michigan,Genesee County,Linden,http://www.lindenmi.us +Michigan,Hillsdale County,Litchfield,https://cityoflitchfield.org/ +Michigan,Otsego County,Livonia,http://www.ci.livonia.mi.us/ +Michigan,Ingham County,Locke Township,http://www.locketownship.com/ +Michigan,Washtenaw County,Lodi Township,http://twp-lodi.org/ +Michigan,Monroe County,London Township,http://londontwp.org/ +Michigan,Alpena County,Long Rapids Township,http://www.longrapidstownship.org +Michigan,Crawford County,Lovells Township,http://www.lovellstownship.com +Michigan,Kent County,Lowell,http://www.lowellmi.gov/ +Michigan,Kent County,Lowell Charter Township,http://www.twp.lowell.mi.us/ +Michigan,Mason County,Ludington,http://www.ludington.mi.us/ +Michigan,Monroe County,Luna Pier,http://www.cityoflunapier.com +Michigan,Washtenaw County,Lyndon Township,https://lyndontownshipmi.gov/ +Michigan,St. Clair County,Lynn Township,https://www.lynntownshipmi.org/ +Michigan,Oakland County,Lyon Township,https://www.lyontwp.org/ +Michigan,Roscommon County,Lyon Township,http://www.lyontownship.org/ +Michigan,Mackinac County,Mackinac Island,http://www.cityofmi.org +Michigan,Cheboygan County,Mackinaw City,http://www.mackinawcity.org/ +Michigan,Cheboygan County,Mackinaw Township,http://www.mackinawtownship.com +Michigan,Ontonagon County,Macomb Township,http://www.macomb-mi.gov +Michigan,Lenawee County,Macon Township,http://www.macontwp.com +Michigan,Lenawee County,Madison Charter Township,http://www.madisontwp.com +Michigan,Oakland County,Madison Heights,http://www.madison-heights.org +Michigan,Antrim County,Mancelona,https://www.villageofmancelona.org/ +Michigan,Antrim County,Mancelona Township,https://www.mancelonatownship.com/ +Michigan,Washtenaw County,Manchester,https://vil-manchester.org/ +Michigan,Washtenaw County,Manchester Township,http://www.twp-manchester.org/ +Michigan,Schoolcraft County,Manistique,https://cityofmanistique.org/ +Michigan,Allegan County,Manlius Township,http://www.manliustownship.com +Michigan,Wexford County,Manton,https://www.mantonmi.org/ +Michigan,Crawford County,Maple Forest Township,http://mapleforest.org +Michigan,Saginaw County,Maple Grove Township,https://www.maplegrovetownship.org/ +Michigan,Saginaw County,Maple Rapids,https://www.maplerapids.org/ +Michigan,Cass County,Marcellus,https://villageofmarcellus.org/ +Michigan,Gogebic County,Marenisco Township,http://marenisco.org/ +Michigan,St. Clair County,Marine City,https://cityofmarinecity.org/ +Michigan,Livingston County,Marion Township,http://www.mariontownship.com +Michigan,Saginaw County,Marion Township,https://www.mariontownship.org/1/389/index.asp +Michigan,Roscommon County,Markey Township,http://www.markeytownship.org/ +Michigan,Sanilac County,Marlette,http://cityofmarlette.com/ +Michigan,Marquette County,Marquette,http://www.marquettemi.gov +Michigan,Marquette County,Marquette Township,https://marquettetownship.org/ +Michigan,Calhoun County,Marshall,http://www.cityofmarshall.com/ +Michigan,Calhoun County,Marshall Township,http://www.marshalltownship.org +Michigan,Martin Township,Martin,http://www.martinmi.org/ +Michigan,Allegan County,Martin Township,http://www.martintownship.org +Michigan,St. Clair County,Marysville,http://www.cityofmarysvillemi.com/ +Michigan,Ingham County,Mason,http://www.mason.mi.us +Michigan,Cass County,Mason Township,https://www.masontownship.org/ +Michigan,Alger County,Mathias Township,http://www.mathiastownship.org +Michigan,Van Buren County,Mattawan,http://www.mattawanmi.com/ +Michigan,Monroe County,Maybee,http://maybeevillage.com/ +Michigan,Lapeer County,Mayfield Township,http://www.mayfieldtownship.com +Michigan,Tuscola County,Mayville,http://www.villageofmayville.net/ +Michigan,Missaukee County,McBain,http://www.cityofmcbainmichigan.com/ +Michigan,Luce County,McMillan Township,https://www.mcmillantownship.com/ +Michigan,Lenawee County,Medina Township,https://www.medinatwp.com/ +Michigan,Charlevoix County,Melrose Township,http://www.melrosetwp.org/ +Michigan,Sanilac County,Melvindale,http://www.melvindale.org/ +Michigan,Macomb County,Memphis,http://memphismi.com/ +Michigan,St. Joseph County,Mendon,http://mendonmi.us/ +Michigan,Menominee County,Menominee,http://www.menominee.us +Michigan,Menominee County,Menominee Township,http://www.menomineetownship.com/ +Michigan,Oscoda County,Mentor Township,http://www.mentortownship.com/ +Michigan,Ingham County,Meridian Charter Township,http://www.meridian.mi.us/ +Michigan,Saginaw County,Merrill,https://www.merrillvillage.com/ +Michigan,Wexford County,Mesick,https://villageofmesick.com/ +Michigan,Lapeer County,Metamora Township,http://metamoratownship.com +Michigan,Menominee County,Meyer Township,http://www.hermansville.com/ +Michigan,Berrien County,Michiana,http://michianavillage.org/ +Michigan,Marquette County,Michigamme Township,http://www.michigammetownship.com/ +Michigan,Shiawassee County,Middlebury Township,http://www.middleburytownship.com/ +Michigan,Barry County,Middleville,https://www.villageofmiddleville.org/ +Michigan,Bay County,Midland,http://www.midland-mi.org/ +Michigan,Midland County,Midland Charter Township,https://www.midlandtownship.net/ +Michigan,Midland County,Mikado Township,https://mikadotownship.org/ +Michigan,Monroe County,Milan,http://milanmich.org +Michigan,Monroe County,Milan Township,https://www.milantownship.org/ +Michigan,Oakland County,Milford,http://www.villageofmilford.org +Michigan,Oakland County,Milford Charter Township,http://www.milfordtownship.com/ +Michigan,Mecosta County,Millen Township,http://millentownship.com/ +Michigan,Tuscola County,Millington,http://www.millingtonvillage.org/ +Michigan,Midland County,Mills Township,https://millstownship.org/ +Michigan,Antrim County,Milton Township,https://miltontownship.org/ +Michigan,Cass County,Milton Township,http://www.miltontwp.org/ +Michigan,Sanilac County,Mitchell Township,http://www.mitchelltownship.org +Michigan,Arenac County,Moffatt Township,http://www.moffatttownship.org/ +Michigan,Bay County,Monitor Charter Township,http://www.monitortwp.org/ +Michigan,Monroe County,Monroe,http://monroemi.gov/ +Michigan,Monroe County,Monroe Charter Township,http://monroechartertownship.org/ +Michigan,Muskegon County,Montague,http://cityofmontague.org/ +Michigan,Muskegon County,Montague Township,http://www.montaguetownship.org +Michigan,Genesee County,Montrose,http://www.cityofmontrose.us +Michigan,Genesee County,Montrose Charter Township,http://montrosetownship.org +Michigan,Mackinac County,Moran Township,https://www.morantownship.com/ +Michigan,Lenawee County,Morenci,http://www.cityofmorenci.org +Michigan,Shiawassee County,Morrice,http://www.morrice.mi.us/ +Michigan,St. Joseph County,Mount Clemens,http://cityofmountclemens.com/ +Michigan,Midland County,Mount Haley Township,https://www.mthaleytwp.org/ +Michigan,Genesee County,Mount Morris,http://www.cityofmtmorris.org +Michigan,Genesee County,Mount Morris Township,http://www.mtmorristwp.org +Michigan,Isabella County,Mount Pleasant,http://www.mt-pleasant.org +Michigan,Cheboygan County,Mullett Township,http://www.mullettgov-clerk.org +Michigan,Genesee County,Mundy Township,http://www.mundytwp-mi.gov +Michigan,Alger County,Munising,https://cityofmunising.org/ +Michigan,Alger County,Munising Township,http://www.munisingtownship.org +Michigan,Cheboygan County,Munro Township,http://www.munrotownship.com +Michigan,Muskegon County,Muskegon,http://www.muskegon-mi.gov/ +Michigan,Muskegon County,Muskegon Heights,http://www.cityofmuskegonheights.org +Michigan,St. Clair County,Mussey Township,https://www.musseytownship.org/ +Michigan,Jackson County,Napoleon Township,http://www.napoleontownship.us/ +Michigan,Barry County,Nashville,http://www.nashvillemi.us/ +Michigan,Marquette County,Negaunee,http://cityofnegaunee.com/ +Michigan,Marquette County,Negaunee Township,http://www.negauneetownship.org/ +Michigan,Kent County,Nelson Township,http://www.nelsontownship.org/ +Michigan,Roscommon County,Nester Township,https://www.roscommoncounty.net/212/Nester-Township +Michigan,Newaygo County,New Baltimore,http://www.cityofnewbaltimore.com +Michigan,Berrien County,New Buffalo,http://www.cityofnewbuffalo.org/ +Michigan,Berrien County,New Buffalo Township,https://newbuffalotownship.org/ +Michigan,Oceana County,New Era,http://www.newerachamber.com +Michigan,Macomb County,New Haven,http://www.newhavenmi.org/ +Michigan,Shiawassee County,New Haven Township,http://www.nhtownship.com/ +Michigan,Shiawassee County,New Lothrop,http://www.newlothrop.org +Michigan,Newaygo County,Newaygo,http://www.newaygocity.org +Michigan,Cass County,Newberg Township,https://newbergtwp.com/ +Michigan,McMillan Township,Newberry,http://www.villageofnewberry.com/ +Michigan,Calhoun County,Newton Township,http://newtontwp.org +Michigan,Mackinac County,Newton Township,https://newtontownshipgouldcity.com/ +Michigan,Berrien County,Niles,http://www.nilesmi.org/ +Michigan,Berrien County,Niles Township,http://www.nilestwpmi.gov/ +Michigan,Manistee County,Norman Township,http://www.normantownship.org/ +Michigan,Lapeer County,North Branch,http://northbranchvillage.org/ +Michigan,Muskegon County,North Muskegon,http://www.northmuskegon.org/ +Michigan,Gratiot County,North Star Township,https://www.northstartwp.com/ +Michigan,Washtenaw County,Northfield Township,http://twp-northfield.org/ +Michigan,Oakland County,Northville,http://www.ci.northville.mi.us/ +Michigan,Oakland County,Northville Township,http://www.twp.northville.mi.us/ +Michigan,Muskegon County,Norton Shores,http://www.nortonshores.org +Michigan,Jackson County,Norvell Township,https://www.norvelltownship.com/ +Michigan,Dickinson County,Norway,http://www.norwaymi.com/ +Michigan,Charlevoix County,Norwood Township,http://www.norwoodtwp.org/ +Michigan,St. Joseph County,Nottawa Township,http://www.nottawatownship.org/ +Michigan,Oakland County,Novi,http://www.cityofnovi.org/ +Michigan,Oakland County,Oak Park,http://www.ci.oak-park.mi.us/ +Michigan,Kent County,Oakfield Township,https://www.oakfieldtwp.org/ +Michigan,Oakland County,Oakland Charter Township,http://www.oaklandtownship.org/ +Michigan,Livingston County,Oceola Township,http://www.oceolatwp.org +Michigan,Ionia County,Odessa Township,http://www.odessatownship.org/ +Michigan,Clinton County,Olive Township,http://www.olivetwp.org/ +Michigan,Huron County,Oliver Township,http://www.olivertwp.net/ +Michigan,Eaton County,Olivet,http://www.cityofolivet.org/ +Michigan,Presque Isle County,Onaway,http://www.onawaymi.com +Michigan,Eaton County,Oneida Charter Township,http://www.oneidatownship.org +Michigan,Alger County,Onota Township,https://www.onotatownship.org/ +Michigan,Lenawee County,Onsted,http://www.villageofonsted.org +Michigan,Ontonagon County,Ontonagon,http://www.villageofontonagon.org +Michigan,Cass County,Ontwa Township,https://www.ontwatwp.org/ +Michigan,Ionia County,Orange Township,http://www.orange-ionia.mi-twp.org/ +Michigan,Barry County,Orangeville Township,http://www.orangevilletownship.org +Michigan,Oakland County,Orchard Lake Village,http://www.cityoforchardlake.com/ +Michigan,Oakland County,Orion Charter Township,http://www.oriontownship.org +Michigan,Berrien County,Oronoko Charter Township,http://www.oronokotownship.org/ +Michigan,Oakland County,Ortonville,http://www.ortonvillevillage.com/ +Michigan,Houghton County,Osceola Township,http://www.osceolatownship.org/ +Michigan,Iosco County,Oscoda Charter Township,https://www.oscodatownshipmi.gov/ +Michigan,Kalamazoo County,Oshtemo Charter Township,http://www.oshtemo.org +Michigan,Alpena County,Ossineke Township,https://ossineketownship.com/ +Michigan,Ionia County,Otisco Township,http://www.icea-mi.org/Otisco%20Township.htm +Michigan,Forest Township,Otisville,http://www.otisvillemi.com +Michigan,Allegan County,Otsego,https://www.cityofotsego.org/ +Michigan,Otsego County,Otsego Lake Township,http://www.otsegolaketownship.org/ +Michigan,Allegan County,Otsego Township,http://www.otsegotownship.org +Michigan,Lapeer County,Otter Lake,http://villageofotterlake.com +Michigan,Allegan County,Overisel Township,http://www.overiseltownship.org +Michigan,Clinton County,Ovid,http://www.ovidmi.org/ +Michigan,Branch County,Ovid Township,http://ovidtownship.org +Michigan,Shiawassee County,Owosso,http://ci.owosso.mi.us +Michigan,Shiawassee County,Owosso Charter Township,http://www.owossochartertownship.org +Michigan,Oakland County,Oxford,https://www.thevillageofoxford.org/ +Michigan,Oakland County,Oxford Charter Township,http://oxfordtownship.net/ +Michigan,Lenawee County,Palmyra Township,http://www.palmyratownship.net +Michigan,Kalamazoo County,Parchment,http://www.parchment.org +Michigan,Ottawa County,Park Township,http://www.parktownship.org/ +Michigan,St. Joseph County,Park Township,https://park-township.org/ +Michigan,Jackson County,Parma,http://villageofparma.org/ +Michigan,Jackson County,Parma Township,http://parmatownship.godaddysites.com/ +Michigan,Kalamazoo County,Pavilion Township,http://www.paviliontownship.com +Michigan,Van Buren County,Paw Paw,https://www.pawpaw.net/ +Michigan,Van Buren County,Paw Paw Township,http://www.pawpawtownship.org/ +Michigan,Charlevoix County,Peaine Township,http://www.peainetwp.org/ +Michigan,Emmet County,Pellston,https://www.pellstonmi.com/ +Michigan,Emmet County,Peninsula Township,https://www.peninsulatownship.com/ +Michigan,Calhoun County,Pennfield Charter Township,https://pennfieldmi.gov/ +Michigan,Luce County,Pentland Township,https://pentlandtownship.org/ +Michigan,Mason County,Pere Marquette Charter Township,http://www.pmtwp.org/ +Michigan,Shiawassee County,Perry,http://www.perry.mi.us/ +Michigan,Shiawassee County,Perry Township,http://perrytownship-mi.us/ +Michigan,Monroe County,Petersburg,http://www.petersburg-mi.com/ +Michigan,Emmet County,Petoskey,http://www.petoskey.us/ +Michigan,Ionia County,Pewamo,http://www.Pewamo.org +Michigan,Chippewa County,Pickford Township,http://www.pickfordtwp.org/home.html +Michigan,Huron County,Pigeon,https://pigeonmichigan.com/ +Michigan,Livingston County,Pinckney,http://villageofpinckney.org +Michigan,Bay County,Pinconning,https://cityofpinconning.org/ +Michigan,Bay County,Pinconning Township,http://pinconningtownship.com/ +Michigan,Van Buren County,Pine Grove Township,http://pinegrovetwp.org/ +Michigan,Gratiot County,Pine River Township,http://www.pinerivertwp.org/ +Michigan,Berrien County,Pipestone Township,http://pipestonetownship.org/ +Michigan,Washtenaw County,Pittsfield Charter Township,http://www.pittsfield-mi.gov +Michigan,Kent County,Plainfield Charter Township,https://plainfieldmi.org/ +Michigan,Allegan County,Plainwell,http://www.plainwell.org/ +Michigan,Benzie County,Platte Township,http://www.plattetownship.org/pages/index.php +Michigan,Oakland County,Pleasant Ridge,http://www.cityofpleasantridge.org/ +Michigan,Emmet County,Plymouth,https://www.plymouthmi.gov/ +Michigan,Emmet County,Plymouth Charter Township,http://www.plymouthtwp.org/ +Michigan,Huron County,Pointe Aux Barques Township,http://www.pointeauxbarques.com/ +Michigan,Cass County,Pokagon Township,http://www.pokagontownship.org/ +Michigan,Ottawa County,Pontiac,http://www.pontiac.mi.us +Michigan,Huron County,Port Austin,https://portaustinarea.com/ +Michigan,Huron County,Port Austin Township,https://www.portaustintownship.com/ +Michigan,Huron County,Port Hope,http://porthopemich.com/ +Michigan,St. Clair County,Port Huron,http://www.porthuron.org/ +Michigan,St. Clair County,Port Huron Charter Township,http://www.porthurontownship.org/ +Michigan,Sanilac County,Port Sanilac,http://www.portsanilac.net/ +Michigan,Ottawa County,Port Sheldon Township,http://www.portsheldontwp.org/ +Michigan,Kalamazoo County,Portage,http://www.portagemi.gov/ +Michigan,Houghton County,Portage Charter Township,http://www.portagetownship.info/ +Michigan,Cass County,Porter Township,http://www.portertownship.org/ +Michigan,Ionia County,Portland,http://www.portland-michigan.org/ +Michigan,Bay County,Portsmouth Township,https://www.portsmouthtownship.com/ +Michigan,Presque Isle County,Posen,http://www.posenmi.org/ +Michigan,Eaton County,Potterville,http://www.pottervillemi.org/ +Michigan,Marquette County,Powell Township,http://www.powelltownship.org/ +Michigan,Menominee County,Powers,https://www.powers-spalding.org/ +Michigan,Kalamazoo County,Prairie Ronde Township,http://prairierondetwp.net +Michigan,Barry County,Prairieville Township,http://www.prairievilletwp-mi.org +Michigan,Presque Isle County,Presque Isle Township,http://presqueisletwp.org/ +Michigan,Jackson County,Pulaski Township,https://pulaskitownship.org/ +Michigan,Livingston County,Putnam Township,http://www.putnamtwp.us +Michigan,Chippewa County,Raber Township,http://www.rabertownship.org +Michigan,Lenawee County,Raisin Charter Township,https://raisinchartertownship.com/ +Michigan,Monroe County,Raisinville,http://www.raisinville.org/ +Michigan,Muskegon County,Ravenna,http://www.ravennami.com +Michigan,Muskegon County,Ravenna Township,https://www.ravennatwp.com/ +Michigan,Muskegon County,Ray Township,http://www.raytwp.org/ +Michigan,Hillsdale County,Reading,https://reading.mi.us/ +Michigan,Hillsdale County,Reading Township,https://readingtownship.org/ +Michigan,Clare County,Redford Charter Township,http://www.redfordtwp.com/ +Michigan,Marquette County,Republic Township,https://republicmichigan.com/ +Michigan,Montcalm County,Reynolds Township,https://www.reynoldstwp.com/ +Michigan,Lapeer County,Rich Township,https://www.richtownshipmi.com/ +Michigan,Genesee County,Richfield Township,http://www.richfieldtwp.org +Michigan,Roscommon County,Richfield Township,https://www.richfieldtownship.org/ +Michigan,Richland Township,Richland,http://villageofrichland.org +Michigan,Kalamazoo County,Richland Township,http://www.richlandtwp.net +Michigan,Saginaw County,Richland Township,http://www.richlandtownship.com/ +Michigan,Marquette County,Richmond Township,https://richmondtownship.us/ +Michigan,Lenawee County,Riga,http://www.rigatownship.com +Michigan,Clinton County,Riley Township,http://www.rileytownshipclintoncountymichigan.com/ +Michigan,St. Clair County,Riley Township,https://rileytownship.com/ +Michigan,St. Clair County,River Rouge,http://www.cityofriverrouge.com +Michigan,Mason County,Riverview,http://www.cityofriverview.com/ +Michigan,Jackson County,Rives Township,http://www.rivestownshipmi.com/ +Michigan,Ottawa County,Robinson Township,http://www.robinson-twp.org/ +Michigan,Oakland County,Rochester,http://www.rochestermi.org +Michigan,Oakland County,Rochester Hills,http://www.rochesterhills.org/ +Michigan,Kent County,Rockford,http://www.rockford.mi.us/ +Michigan,Alger County,Rockwood,http://www.rockwoodmi.org/ +Michigan,Presque Isle County,Rogers City,http://rogerscity.com/ +Michigan,Lenawee County,Rollin Township,http://www.rollintownship.org +Michigan,Lenawee County,Rome Township,http://www.rometownship.org +Michigan,Bruce Township,Romulus,http://www.romulusgov.com +Michigan,Roscommon County,Roscommon,https://www.roscommonvillage.com/ +Michigan,Roscommon County,Roscommon Township,http://www.roscommontownship.com/ +Michigan,Ogemaw County,Rose City,http://rosecitymi.org/ +Michigan,Oakland County,Rose Township,https://www.rosetownship.com/ +Michigan,Ogemaw County,Rose Township,http://www.rosetownship-mi.com/ +Michigan,Osceola County,Roseville,http://www.roseville-mi.gov +Michigan,Kalamazoo County,Ross Township,http://www.ross-township.us +Michigan,Oakland County,Royal Oak,http://www.ci.royal-oak.mi.us +Michigan,Oakland County,Royal Oak Charter Township,http://www.royaloaktwp.com +Michigan,Berrien County,Royalton Township,https://www.royaltontownship.org/ +Michigan,Chippewa County,Rudyard Township,http://www.rudyardtownship.org/ +Michigan,Barry County,Rutland Charter Township,http://www.rutlandtownship.org +Michigan,Gladwin County,Saginaw,http://www.saginaw-mi.com +Michigan,Saginaw County,Saginaw Charter Township,https://www.saginawtownship.org/ +Michigan,Allegan County,Salem Township,http://www.salemtownship.org +Michigan,Washtenaw County,Salem Township,http://www.salem-mi.org/ +Michigan,Washtenaw County,Saline,http://cityofsaline.org/ +Michigan,Washtenaw County,Saline Township,https://salinetownship.org/ +Michigan,Kent County,Sand Lake,http://villageofsandlake.org/ +Michigan,Marquette County,Sands Township,https://www.sandstownship.org/ +Michigan,Jackson County,Sandstone Charter Township,https://sandstonetownship.org/ +Michigan,Midland County,Sanford,http://villageofsanford.com/ +Michigan,Ionia County,Saranac,http://villageofsaranacmi.org +Michigan,Allegan County,Saugatuck,https://www.saugatuckcity.com/ +Michigan,Allegan County,Saugatuck Township,http://www.saugatucktownship.org +Michigan,Chippewa County,Sault Ste. Marie,https://www.saultcity.com/ +Michigan,Houghton County,Schoolcraft Township,https://www.schoolcrafttownship.net/ +Michigan,Kalamazoo County,Schoolcraft Township,http://www.schoolcrafttownship.org +Michigan,Washtenaw County,Scio Township,http://sciotownship.org/ +Michigan,Shiawassee County,Sciota Township,http://www.sciotatownship.net/ +Michigan,Hillsdale County,Scipio Township,https://www.scipiotownshipmi.org/ +Michigan,Mason County,Scottville,http://www.cityofscottville.com/ +Michigan,Huron County,Sebewaing,https://sebewaingmi.gov +Michigan,Gladwin County,Secord Township,https://www.secordtownship.org/ +Michigan,Wexford County,Selma Township,http://selmatownship-mi.org/ +Michigan,Lenawee County,Seneca Township,http://townshipofseneca.com +Michigan,Washtenaw County,Sharon Township,https://sharontownship.org/ +Michigan,Oceana County,Shelby,https://shelbyvillage.com/ +Michigan,Washtenaw County,Shelby Charter Township,http://shelbytwp.org +Michigan,Isabella County,Shepherd,https://www.villageofshepherd.org/ +Michigan,Montcalm County,Sheridan,http://villageofsheridan.com/ +Michigan,Calhoun County,Sheridan Township,http://sheridantwp.com +Michigan,Clare County,Sheridan Township,https://www.sheridantwpclareco.com/ +Michigan,Gladwin County,Sherman Township,https://shermantownshipgladwin.com/ +Michigan,Shiawassee County,Shiawassee Township,http://www.shiawasseetownship.org/ +Michigan,Berrien County,Shoreham,http://www.shoreham-village.com/ +Michigan,Montcalm County,Sidney Township,http://www.sidneymi.org/ +Michigan,Cass County,Silver Creek Township,https://www.silvercreektwpmi.org/ +Michigan,Arenac County,Sims Township,https://simstownship.org/ +Michigan,Berrien County,Sodus Township,http://www.sodustwp.org/ +Michigan,Kent County,Solon Township,http://solontwp.org/ +Michigan,Hillsdale County,Somerset Township,http://www.somersettownship.org/ +Michigan,Chippewa County,Soo Township,http://sootownship.org/ +Michigan,Charlevoix County,South Arm Township,http://southarmtwp.com/ +Michigan,Crawford County,South Branch Township,http://southbranchtownship.com +Michigan,Oakland County,South Lyon,http://www.southlyonmi.org/ +Michigan,Adams Township,South Range,http://www.southrange.com/ +Michigan,Monroe County,South Rockwood,http://villageofsouthrockwoodmi.com/ +Michigan,County Wexford,Southfield,http://www.cityofsouthfield.com +Michigan,Oakland County,Southfield Township,http://www.southfieldtownship.org/ +Michigan,Oakland County,Southgate,http://www.southgate-mi.org/ +Michigan,Menominee County,Spalding Township,https://www.powers-spalding.org/ +Michigan,Kent County,Sparta,https://spartami.org/ +Michigan,Kent County,Sparta Township,https://spartatownship.org/ +Michigan,Saginaw County,Spaulding Township,https://spauldingtwp.com/ +Michigan,Kent County,Spencer Township,http://www.spencertwp.org/ +Michigan,Jackson County,Spring Arbor Township,https://springarbor.org/ +Michigan,Ottawa County,Spring Lake,http://www.springlakevillage.org/ +Michigan,Ottawa County,Spring Lake Township,http://www.springlaketwp.org/ +Michigan,Calhoun County,Springfield,http://www.springfieldmich.com/ +Michigan,Oakland County,Springfield Township,http://www.springfield-twp.us/ +Michigan,Jackson County,Springport,https://villageofspringport.com/ +Michigan,Jackson County,Springport Township,http://www.springportmi.com/ +Michigan,Wexford County,Springville Township,http://springvilletownshipmi.live/ +Michigan,Saginaw County,St. Charles,https://stcmi.com/ +Michigan,Saginaw County,St. Charles Township,https://stcharlestwp.com/ +Michigan,St. Clair County,St. Clair,http://www.cityofstclair.com/ +Michigan,St. Clair County,St. Clair Shores,http://scsmi.net/ +Michigan,St. Clair County,St. Clair Township,http://www.stclairtwp.org/ +Michigan,Mackinac County,St. Ignace,https://www.cityofstignace.com/ +Michigan,Mackinac County,St. Ignace Township,http://stignacetownship.org/ +Michigan,Charlevoix County,St. James Township,http://www.stjamestwp.org/ +Michigan,Charlevoix County,St. Johns,https://cityofstjohnsmi.com/ +Michigan,Berrien County,St. Joseph,https://www.sjcity.com/ +Michigan,Berrien County,St. Joseph Charter Township,http://www.sjct.org/ +Michigan,Gratiot County,St. Louis,http://www.stlouismi.com +Michigan,Arenac County,Standish,http://www.cityofstandish.com/ +Michigan,Ontonagon County,Stannard Township,http://www.stannardtwp.com/ +Michigan,Montcalm County,Stanton,http://www.stantononline.com/ +Michigan,Houghton County,Stanton Township,http://www.stantontownship.com/ +Michigan,Antrim County,Star Township,http://www.startownship.com/ +Michigan,Menominee County,Stephenson,http://www.stephenson-mi.com/ +Michigan,Arenac County,Sterling Heights,http://www.sterling-heights.net/ +Michigan,Berrien County,Stevensville,https://www.villageofstevensville.us/ +Michigan,Ingham County,Stockbridge,http://www.vosmi.org/ +Michigan,Ingham County,Stockbridge Township,http://stockbridgetownshipmi.com/index.htm +Michigan,St. Joseph County,Sturgis,http://www.sturgismi.gov/ +Michigan,St. Joseph County,Sturgis Township,http://sturgistownship.org +Michigan,Chippewa County,Sugar Island Township,http://sugarislandtownship.com +Michigan,Clare County,Summerfield Township,https://www.summerfieldtwp.org/ +Michigan,Monroe County,Summerfield Township,http://www.summerfieldtownship.org/ +Michigan,Jackson County,Summit Township,https://www.summittwp.com/ +Michigan,Mason County,Summit Township,https://summittownship.org/ +Michigan,Wayne County,Sumpter Township,http://sumptertwp.com/ +Michigan,Eaton County,Sunfield Township,http://www.sunfieldtownship.org +Michigan,Washtenaw County,Superior Township,http://www.superior-twp.org +Michigan,Clare County,Surrey Township,http://www.surreytownship.com/ +Michigan,Clare County,Suttons Bay,https://www.suttonsbayvillage.org +Michigan,Clare County,Suttons Bay Township,http://www.leelanau.cc/suttonsbaytwp.asp +Michigan,Saginaw County,Swan Creek,https://swancreektwp.com/ +Michigan,Genesee County,Swartz Creek,http://www.cityofswartzcreek.org +Michigan,Oakland County,Sylvan Lake,http://www.sylvanlake.org/ +Michigan,Washtenaw County,Sylvan Township,https://www.sylvan-township.org/ +Michigan,Ottawa County,Tallmadge Township,http://www.tallmadge.com/ +Michigan,Iosco County,Tawas City,https://tawascity.org/ +Michigan,Iosco County,Taylor,http://www.cityoftaylor.com/ +Michigan,Saginaw County,Taymouth Township,https://taymouthtownship.com/ +Michigan,Lenawee County,Tecumseh,http://www.mytecumseh.org +Michigan,Lenawee County,Tecumseh Township,http://www.tecumsehtownship.org +Michigan,Calhoun County,Tekonsha,http://villageoftekonsha.com +Michigan,Calhoun County,Tekonsha Township,http://tekonshatownship.com +Michigan,Kalamazoo County,Texas Charter Township,http://www.texastownship.org +Michigan,Saginaw County,Thomas Township,http://www.thomastwp.org/ +Michigan,Schoolcraft County,Thompson Township,http://thompsontownshipmi.com/ +Michigan,Barry County,Thornapple Township,http://www.thornapple-twp.org +Michigan,Berrien County,Three Oaks,http://www.threeoaksvillage.org/ +Michigan,Berrien County,Three Oaks Township,http://www.threeoakstownship.org/ +Michigan,St. Joseph County,Three Rivers,https://www.threeriversmi.org/ +Michigan,Saginaw County,Tittabawassee Township,http://tittabawassee.weebly.com/ +Michigan,Gladwin County,Tobacco Township,https://www.tobaccotownship.org/ +Michigan,Jackson County,Tompkins Township,http://www.tompkinstwp-mi.org/ +Michigan,Antrim County,Torch Lake Township,http://www.torchlaketownship.org/ +Michigan,Houghton County,Torch Lake Township,http://www.torchlaketownship.com/ +Michigan,Houghton County,Traverse City,http://www.traversecitymi.gov +Michigan,Houghton County,Trenton,https://www.trentonmi.org/ +Michigan,Chippewa County,Trout Lake Township,http://www.troutlaketownship.com +Michigan,Oakland County,Troy,http://www.troymi.gov +Michigan,Cheboygan County,Tuscarora Township,http://www.tuscaroratwp.com +Michigan,Kent County,Tyrone Township,https://www.tyronetownship.org/ +Michigan,Livingston County,Tyrone Township,http://www.tyronetownship.us +Michigan,Bingham Township,Ubly,http://ublymi.com/ +Michigan,Livingston County,Unadilla Township,http://twp.unadilla.mi.us +Michigan,Branch County,Union City,http://www.liveinUC.com +Michigan,Tuscola County,Unionville,http://www.unionvillemi.us/ +Michigan,Allegan County,Valley Township,http://www.valleytwp.org +Michigan,Allegan County,Van Buren Charter Township,https://vanburen-mi.org/ +Michigan,Cass County,Vandalia,http://villageofvandaliami.com/ +Michigan,Tuscola County,Vassar,http://www.cityofvassar.org +Michigan,Tuscola County,Vassar Township,https://www.vassartownship.org +Michigan,Shiawassee County,Venice Township,http://www.venicetownship.org/ +Michigan,Kent County,Vergennes Township,https://vergennestwp.org/ +Michigan,Eaton County,Vermontville,https://vermontville-mi.gov/ +Michigan,Vernon Township,Vernon,http://www.villageofvernon.org/ +Michigan,Isabella County,Vernon Township,http://www.vernontownship.org/ +Michigan,Shiawassee County,Vernon Township,http://www.vernontownship.org/ +Michigan,Ingham County,Vevay Township,http://www.vevaytownship.org/ +Michigan,Schoolcraft Township,Vicksburg,http://www.vicksburgmi.org/ +Michigan,Clinton County,Victor Township,https://victortwp.org/ +Michigan,Mason County,Victory Township,https://www.victorytownship.org/ +Michigan,Genesee County,Vienna Township,http://www.viennatwp.com +Michigan,Oakland County,Village of Clarkston,http://villageofclarkston.org/ +Michigan,Macomb County,Village of Grosse Pointe Shores,http://www.gpshoresmi.gov +Michigan,Gogebic County,Wakefield,http://www.cityofwakefield.org +Michigan,Kalamazoo County,Wakeshma Township,http://wakeshmatownship.com +Michigan,St. Clair County,Wales Township,http://www.walestownship.org/ +Michigan,Kent County,Walker,http://www.walker.city/ +Michigan,Oakland County,Walled Lake,http://walledlake.us/ +Michigan,County Antrim,Warren,http://www.cityofwarren.org/ +Michigan,Gratiot County,Washington Township,http://www.washingtontownship.org/ +Michigan,Oakland County,Waterford Charter Township,https://waterfordmi.gov/ +Michigan,Jackson County,Waterloo Township,http://www.waterlootwpmi.com/ +Michigan,Gogebic County,Watersmeet Township,https://www.watersmeet.us/ +Michigan,Clinton County,Watertown Charter Township,http://www.watertowntownship.com/ +Michigan,Berrien County,Watervliet,http://www.watervliet.org/ +Michigan,Berrien County,Watervliet Township,http://www.watervliettownship.org/ +Michigan,Allegan County,Watson Township,http://www.watsontownship.org +Michigan,Emmet County,Wawatam Township,http://www.wawatamtownship.org +Michigan,Allegan County,Wayland,http://www.cityofwayland.org/ +Michigan,Allegan County,Wayland Township,http://www.waytwp.org +Michigan,Cass County,Wayne,https://www.cityofwayne.com/ +Michigan,Leroy Township,Webberville,http://www.villageofwebberville.com/ +Michigan,Washtenaw County,Webster Township,http://www.twp.webster.mi.us/ +Michigan,Berrien County,Weesaw Township,https://www.weesawtownship.net/ +Michigan,Benzie County,Weldon Township,http://www.weldontwp.org/ +Michigan,Oakland County,West Bloomfield Charter Township,http://wbtownship.org/ +Michigan,Ogemaw County,West Branch,http://www.westbranch.com/ +Michigan,Marquette County,West Branch Township,http://www.westbranchtwp.org/ +Michigan,Ogemaw County,West Branch Township,https://www.westbranchtownship.org/ +Michigan,Ogemaw County,Westland,http://www.cityofwestland.com +Michigan,Ogemaw County,Westphalia,https://www.westphaliami.com/ +Michigan,Clinton County,Westphalia Township,http://westphaliatownship.org/ +Michigan,Newaygo County,White Cloud,http://www.cityofwhitecloud.org +Michigan,Ingham County,White Oak Township,http://www.white-oak-twp.org/ +Michigan,St. Joseph County,White Pigeon,https://whitepigeonvillage.com/ +Michigan,St. Joseph County,White Pigeon Township,https://www.whitepigeontwp.com/ +Michigan,Chippewa County,Whitefish Township,http://whitefishtownship.com/ +Michigan,Monroe County,Whiteford Township,http://www.whitefordtownship.org/ +Michigan,Muskegon County,Whitehall,http://www.cityofwhitehall.org/ +Michigan,Muskegon County,Whitehall Township,http://www.whitehalltwp.org/ +Michigan,Arenac County,Whitney Township,https://www.whitneytownship.com/ +Michigan,Bay County,Williams Township,http://www.williamstwp.com/ +Michigan,Ingham County,Williamston,http://www.williamston-mi.us/ +Michigan,Ingham County,Williamstown Township,http://www.williamstowntownship.com/ +Michigan,Charlevoix County,Wilson Township,https://www.wilsontownship.org/ +Michigan,Eaton County,Windsor Charter Township,http://twp.windsor.mi.us +Michigan,Huron County,Winsor Township,https://pigeonmichigan.com/winsor-township +Michigan,Clare County,Winterfield,https://www.winterfieldtownship.org/ +Michigan,Oakland County,Wixom,https://www.wixomgov.org/ +Michigan,Cheboygan County,Wolverine,http://www.villageofwolverine.com/index.cfm +Michigan,Oakland County,Wolverine Lake,http://www.wolverinelake.com/ +Michigan,Hillsdale County,Woodhaven,http://www.woodhavenmi.org/ +Michigan,Shiawassee County,Woodhull Township,http://woodhulltwp.org/ +Michigan,Lenawee County,Woodstock Township,http://www.woodstocktownship.com +Michigan,Ottawa County,Wright Township,http://www.wrighttownship.com +Michigan,Ottawa County,Wyandotte,http://www.wyandotte.net/ +Michigan,Kent County,Wyoming,https://www.wyomingmi.gov/ +Michigan,St. Clair County,Yale,https://www.yalemi.us/ +Michigan,Barry County,Yankee Springs Township,http://www.yankeespringstwp.org +Michigan,Washtenaw County,York Charter Township,https://www.twp-york.org/ +Michigan,Washtenaw County,Ypsilanti,https://cityofypsilanti.com/ +Michigan,Washtenaw County,Ypsilanti Charter Township,https://ytown.org/ +Michigan,Ottawa County,Zeeland,http://www.ci.zeeland.mi.us/ +Michigan,Ottawa County,Zeeland Charter Township,http://www.zct.zeeland.mi.us/ +Michigan,Saginaw County,Zilwaukee,http://www.zilwaukeemichigan.gov +Minnesota,Norman County,Ada,http://www.adamn.gov/ +Minnesota,Mower County,Adams,http://www.adamsmn.com/ +Minnesota,Nobles County,Adrian,http://www.adrian.govoffice2.com/ +Minnesota,Washington County,Afton,http://www.ci.afton.mn.us/ +Minnesota,Aitkin County,Aitkin,http://www.ci.aitkin.mn.us/ +Minnesota,Hubbard County,Akeley,http://www.akeleymn.com +Minnesota,Stearns County,Albany,http://www.ci.albany.mn.us/ +Minnesota,Freeborn County,Albert Lea,http://www.cityofalbertlea.org +Minnesota,Wright County,Albertville,https://www.ci.albertville.mn.us/ +Minnesota,Freeborn County,Alden,http://www.aldenmn.com/ +Minnesota,Douglas County,Alexandria,http://www.ci.alexandria.mn.us +Minnesota,Winona County,Altura,http://alturamn.ourlocalview.com//HomeTown/ +Minnesota,Blue Earth County,Amboy,http://www.amboymn.govoffice2.com/ +Minnesota,Anoka County,Andover,http://www.andovermn.gov/ +Minnesota,Wright County,Annandale,http://www.annandale.mn.us/ +Minnesota,Anoka County,Anoka,http://www.ci.anoka.mn.us +Minnesota,Dakota County,Apple Valley,https://www.ci.apple-valley.mn.us/ +Minnesota,Swift County,Appleton,http://www.appletonmn.com/ +Minnesota,Ramsey County,Arden Hills,http://www.ci.arden-hills.mn.us/ +Minnesota,Marshall County,Argyle,http://www.ci.argyle.mn.us/ +Minnesota,Sibley County,Arlington,http://www.arlingtonmn.com/ +Minnesota,Grant County,Ashby,http://www.ashbyminnesota.org +Minnesota,Pine County,Askov,http://cityofaskov.com/ +Minnesota,Kandiyohi County,Atwater,http://www.atwaterminnesota.com/ +Minnesota,Becker County,Audubon,https://audubonmn.govoffice2.com/ +Minnesota,St. Louis County,Aurora,http://www.aurora-mn.com/ +Minnesota,Mower County,Austin,http://www.ci.austin.mn.us/ +Minnesota,Stearns County,Avon,http://www.cityofavonmn.com/ +Minnesota,St. Louis County,Babbitt,http://www.babbitt-mn.com/ +Minnesota,Cass County,Backus,http://www.backusmn.com/ +Minnesota,Roseau County,Badger,http://www.ci.badger.mn.us/ +Minnesota,Clearwater County,Bagley,https://www.bagleymn.us/ +Minnesota,Lyon County,Balaton,http://www.balatonmn.com +Minnesota,Clay County,Barnesville,http://www.barnesvillemn.com/ +Minnesota,Carlton County,Barnum,http://barnummn.us +Minnesota,Grant County,Barrett,http://www.barrettmn.com/ +Minnesota,Otter Tail County,Battle Lake,http://www.ci.battle-lake.mn.us/ +Minnesota,Lake of the Woods County,Baudette,https://www.ci.baudette.mn.us/ +Minnesota,Crow Wing County,Baxter,http://www.ci.baxter.mn.us/ +Minnesota,Washington County,Bayport,https://www.ci.bayport.mn.us/ +Minnesota,Lake County,Beaver Bay,https://www.beaverbaymn.com/ +Minnesota,Sherburne County,Becker,http://www.ci.becker.mn.us/ +Minnesota,Stearns County,Belgrade,https://www.belgrademn.com/ +Minnesota,Scott County,Belle Plaine,https://www.belleplainemn.com/ +Minnesota,Goodhue County,Bellechester,http://www.bellechestermn.com +Minnesota,Lac qui Parle County,Bellingham,https://bellinghammn.com/ +Minnesota,Redwood County,Belview,http://www.belview.org/ +Minnesota,Beltrami County,Bemidji,https://bemidji.govoffice.com/ +Minnesota,Swift County,Benson,http://www.bensonmn.org/ +Minnesota,Todd County,Bertha,https://cityofbertha.weebly.com/ +Minnesota,Anoka County,Bethel,http://www.bethelmn.govoffice2.com/ +Minnesota,Koochiching County,Big Falls,http://www.bigfalls.govoffice.com/ +Minnesota,Sherburne County,Big Lake,http://www.biglakemn.org/ +Minnesota,Itasca County,Bigfork,http://www.cityofbigfork.com/ +Minnesota,Washington County,Birchwood Village,https://www.cityofbirchwood.com/ +Minnesota,Renville County,Bird Island,https://www.birdislandcity.com/ +Minnesota,St. Louis County,Biwabik,http://www.cityofbiwabik.com/ +Minnesota,Beltrami County,Blackduck,https://blackduckmn.com/ +Minnesota,Anoka County,Blaine,https://www.blainemn.gov +Minnesota,Steele County,Blooming Prairie,http://www.bloomingprairie.com/ +Minnesota,Hennepin County,Bloomington,http://www.bloomingtonmn.gov +Minnesota,Faribault County,Blue Earth,https://becity.org/ +Minnesota,Itasca County,Bovey,http://www.cityofbovey.org/ +Minnesota,Morrison County,Bowlus,http://www.bowlusmn.com/ +Minnesota,Lac qui Parle County,Boyd,http://www.dawsonboydschools.org/ +Minnesota,Isanti County,Braham,http://www.braham.com/ +Minnesota,Crow Wing County,Brainerd,http://www.ci.brainerd.mn.us/ +Minnesota,Douglas County,Brandon,http://www.brandonmn.com/ +Minnesota,Wilkin County,Breckenridge,http://www.breckenridgemn.net/ +Minnesota,Crow Wing County,Breezy Point,http://www.cityofbreezypointmn.us/ +Minnesota,Faribault County,Bricelyn,http://www.co.faribault.mn.us/Bricelyn/ +Minnesota,Hennepin County,Brooklyn Center,http://www.ci.brooklyn-center.mn.us/ +Minnesota,Hennepin County,Brooklyn Park,https://www.brooklynpark.org/ +Minnesota,Red Lake County,Brooks,http://www.brooksmn.com/ +Minnesota,Stearns County,Brooten,https://brooten.govoffice.com/ +Minnesota,Todd County,Browerville,http://www.browerville.govoffice.com/ +Minnesota,Traverse County,Browns Valley,http://www.brownsvalleymn.com/ +Minnesota,Mower County,Brownsdale,http://www.brownsdalemn.com +Minnesota,Houston County,Brownsville,http://brownsvillemn.org/ +Minnesota,McLeod County,Brownton,http://www.cityofbrownton.com/ +Minnesota,Wright County,Buffalo,http://www.ci.buffalo.mn.us +Minnesota,Renville County,Buffalo Lake,http://www.buffalolake.org/ +Minnesota,St. Louis County,Buhl,http://www.cityofbuhlmn.com/ +Minnesota,Dakota County,Burnsville,https://burnsvillemn.gov/ +Minnesota,Todd County,Burtrum,https://www.co.todd.mn.us/city/burtrum +Minnesota,Watonwan County,Butterfield,http://www.butterfieldmn.com/ +Minnesota,Olmsted County,Byron,http://www.byronmn.com/ +Minnesota,Houston County,Caledonia,https://www.caledoniamn.gov/ +Minnesota,Becker County,Callaway,http://www.callawaymn.com/ +Minnesota,Isanti County,Cambridge,https://www.ci.cambridge.mn.us/ +Minnesota,Yellow Medicine County,Canby,http://www.canby.govoffice.com/ +Minnesota,Goodhue County,Cannon Falls,http://cannonfallsmn.gov/ +Minnesota,Douglas County,Carlos,http://www.cityofcarlos.com +Minnesota,Carlton County,Carlton,http://www.cityofcarlton.com +Minnesota,Carver County,Carver,http://www.cityofcarver.com +Minnesota,Cass County,Cass Lake,http://ci.casslake.mn.us +Minnesota,Chisago County,Center City,http://www.centercitymn.us/ +Minnesota,Anoka County,Centerville,http://www.centervillemn.com/ +Minnesota,Martin County,Ceylon,https://cityofceylon.com/ +Minnesota,Hennepin County,Champlin,http://www.ci.champlin.mn.us +Minnesota,Murray County,Chandler,http://www.cityofchandlermn.com/ +Minnesota,Carver County,Chanhassen,http://www.ci.chanhassen.mn.us/ +Minnesota,Carver County,Chaska,https://www.chaskamn.com +Minnesota,Fillmore County,Chatfield,https://www.ci.chatfield.mn.us/ +Minnesota,Chisago County,Chisago City,http://www.ci.chisago.mn.us/ +Minnesota,St. Louis County,Chisholm,http://www.chisholm.govoffice.com/ +Minnesota,Anoka County,Circle Pines,https://www.ci.circle-pines.mn.us/ +Minnesota,Chippewa County,Clara City,http://www.claracity.org/ +Minnesota,Dodge County,Claremont,http://www.claremontmn.com/ +Minnesota,Todd County,Clarissa,https://cityofclarissa.weebly.com/ +Minnesota,Yellow Medicine County,Clarkfield,http://www.clarkfield.org/ +Minnesota,Sherburne County,Clear Lake,http://www.clearlakemn.govoffice2.com/ +Minnesota,Clearwater County,Clearbrook,https://www.ci.clearbrook.mn.us/ +Minnesota,Wright County,Clearwater,http://www.clearwatercity.com/ +Minnesota,Le Sueur County,Cleveland,http://www.clevelandmn.govoffice2.com +Minnesota,Carlton County,Cloquet,http://www.ci.cloquet.mn.us +Minnesota,Itasca County,Cohasset,http://www.cohasset-mn.com/ +Minnesota,Wright County,Cokato,https://www.cokato.mn.us/ +Minnesota,Stearns County,Cold Spring,http://www.coldspring.govoffice.com/ +Minnesota,Itasca County,Coleraine,http://www.cityofcoleraine.com/ +Minnesota,Carver County,Cologne,http://www.ci.cologne.mn.us/ +Minnesota,Anoka County,Columbia Heights,http://www.ci.columbia-heights.mn.us +Minnesota,Anoka County,Columbus,http://www.ci.columbus.mn.us/ +Minnesota,Brown County,Comfrey,https://www.comfreymn.com/ +Minnesota,St. Louis County,Cook,http://www.cookmn.us/ +Minnesota,Anoka County,Coon Rapids,https://www.coonrapidsmn.gov/ +Minnesota,Hennepin County,Corcoran,http://www.ci.corcoran.mn.us/ +Minnesota,Meeker County,Cosmos,http://www.cosmos-mn.com/ +Minnesota,Washington County,Cottage Grove,https://www.cottagegrovemn.gov/ +Minnesota,Lyon County,Cottonwood,http://www.cottonwood.govoffice2.com +Minnesota,Nicollet County,Courtland,http://courtlandmn.com/ +Minnesota,Polk County,Crookston,http://www.crookston.mn.us +Minnesota,Crow Wing County,Crosby,http://crosbymn.govoffice3.com/ +Minnesota,Crow Wing County,Crosslake,https://www.cityofcrosslake.org/ +Minnesota,Hennepin County,Crystal,http://www.ci.crystal.mn.us/ +Minnesota,Crow Wing County,Cuyuna,http://www.ci.cuyuna.mn.us/ +Minnesota,Pope County,Cyrus,https://cityofcyrus.com/ +Minnesota,Winona County,Dakota,https://www.cityofdakotamn.com/ +Minnesota,Renville County,Danube,http://www.cityofdanube.com/ +Minnesota,Meeker County,Dassel,http://dassel.com/ +Minnesota,Lac qui Parle County,Dawson,http://www.dawsonmn.com/ +Minnesota,Hennepin County,Dayton,http://www.cityofdaytonmn.com/ +Minnesota,Hennepin County,Deephaven,http://www.cityofdeephaven.org +Minnesota,Itasca County,Deer River,http://www.deerriver.org/ +Minnesota,Crow Wing County,Deerwood,http://cityofdeerwood.com/ +Minnesota,Wright County,Delano,http://www.delano.mn.us/ +Minnesota,Washington County,Dellwood,http://dellwood.us/ +Minnesota,Becker County,Detroit Lakes,http://www.cityofdetroitlakes.com +Minnesota,Clay County,Dilworth,https://www.cityofdilworth.com/ +Minnesota,Dodge County,Dodge Center,http://www.ci.dodgecenter.mn.us/ +Minnesota,St. Louis County,Duluth,https://duluthmn.gov/ +Minnesota,Rice County,Dundas,http://www.cityofdundas.org/ +Minnesota,Dakota County,Eagan,https://www.cityofeagan.com +Minnesota,Blue Earth County,Eagle Lake,http://www.eaglelakemn.com/ +Minnesota,Anoka County,East Bethel,http://www.ci.east-bethel.mn.us/ +Minnesota,Polk County,East Grand Forks,http://www.egf.mn/ +Minnesota,Cass County,East Gull Lake,https://eastgulllake.govoffice.com/ +Minnesota,Faribault County,Easton,http://cityofeastonmn.com/ +Minnesota,Yellow Medicine County,Echo,https://echomn.com/ +Minnesota,County Road 61 (Hennepin County,Eden Prairie,https://www.edenprairie.org/ +Minnesota,Meeker County,Eden Valley,https://ci.edenvalley.mn.us/ +Minnesota,Pipestone County,Edgerton,http://www.edgertonmn.com/ +Minnesota,Hennepin County,Edina,https://www.edinamn.gov/ +Minnesota,Houston County,Eitzen,http://www.eitzenmn.com +Minnesota,Grant County,Elbow Lake,https://www.thecityofelbowlake.com/ +Minnesota,Wabasha County,Elgin,http://www.elginmn.com +Minnesota,Sherburne County,Elk River,https://www.elkrivermn.gov/ +Minnesota,Scott County,Elko New Market,https://www.ci.enm.mn.us/ +Minnesota,Steele County,Ellendale,http://www.ellendalemn.com/ +Minnesota,St. Louis County,Ely,http://www.ely.mn.us/ +Minnesota,Le Sueur County,Elysian,http://elysianmn.com +Minnesota,Crow Wing County,Emily,https://www.cityofemily.com/ +Minnesota,Otter Tail County,Erhard,https://ottertailcountymn.us/city/erhard/ +Minnesota,Polk County,Erskine,http://erskinemn.org/ +Minnesota,Douglas County,Evansville,http://www.evansvillemn.com/ +Minnesota,St. Louis County,Eveleth,http://www.evelethmn.com/ +Minnesota,Hennepin County,Excelsior,http://www.ci.excelsior.mn.us +Minnesota,Renville County,Fairfax,https://fairfax-mn.gov/ +Minnesota,Martin County,Fairmont,https://fairmont.org/ +Minnesota,Ramsey County,Falcon Heights,http://www.falconheights.org/ +Minnesota,Rice County,Faribault,http://www.faribault.org +Minnesota,Dakota County,Farmington,http://www.ci.farmington.mn.us/ +Minnesota,Otter Tail County,Fergus Falls,http://www.ci.fergus-falls.mn.us/ +Minnesota,Polk County,Fertile,http://www.cityoffertile.org +Minnesota,Polk County,Fisher,https://www.cityoffishermn.com/ +Minnesota,St. Louis County,Floodwood,http://floodwood.govoffice.com/ +Minnesota,Benton County,Foley,http://www.ci.foley.mn.us/ +Minnesota,Douglas County,Forada,http://www.foradadays.com/ +Minnesota,Washington County,Forest Lake,http://www.ci.forest-lake.mn.us/ +Minnesota,Polk County,Fosston,http://www.fosston.com/ +Minnesota,Becker County,Frazee,http://www.frazeecity.com/ +Minnesota,Stearns County,Freeport,http://freeportmn.org/ +Minnesota,Anoka County,Fridley,https://www.ci.fridley.mn.us/ +Minnesota,Murray County Central School District,Fulda,https://fuldamn.com/ +Minnesota,Douglas County,Garfield,http://www.garfieldmn.com/ +Minnesota,Crow Wing County,Garrison,https://www.garrisonmn.com/ +Minnesota,Sibley County,Gaylord,http://www.exploregaylord.org/ +Minnesota,Ramsey County,Gem Lake,http://gemlakemn.org/ +Minnesota,Sibley County,Gibbon,http://www.cityofgibbon.com/index.asp?Type=NONE&SEC={EC912AFC-C168-4CCC-8E1B-4205DFCF52B9 +Minnesota,St. Louis County,Gilbert,https://www.gilbertmn.org/ +Minnesota,McLeod County,Glencoe,http://www.glencoechamber.com +Minnesota,Pope County,Glenwood,https://www.ci.glenwood.mn.us/ +Minnesota,Clay County,Glyndon,http://glyndonmn.com +Minnesota,Hennepin County,Golden Valley,https://www.goldenvalleymn.gov/ +Minnesota,Goodhue County,Goodhue,http://www.cityofgoodhue.com +Minnesota,Winona County,Goodview,https://goodview.govoffice.com/ +Minnesota,Cook County,Grand Marais,http://www.ci.grand-marais.mn.us/ +Minnesota,Mower County,Grand Meadow,https://www.cityofgrandmeadow.com/ +Minnesota,Itasca County,Grand Rapids,http://cityofgrandrapidsmn.com/ +Minnesota,Chippewa County,Granite Falls,https://www.granitefalls.com/ +Minnesota,Washington County,Grant,http://www.cityofgrant.com/ +Minnesota,Sibley County,Green Isle,http://www.cityofgreenislemn.org/ +Minnesota,Roseau County,Greenbush,http://greenbushmn.govoffice2.com +Minnesota,Hennepin County,Greenfield,http://www.ci.greenfield.mn.us/ +Minnesota,Hennepin County,Greenwood,http://www.greenwoodmn.com/ +Minnesota,Todd County,Grey Eagle,http://www.diversicommunity.com/greyeagle +Minnesota,Cass County,Hackensack,http://www.hackensackchamber.com +Minnesota,Murray County,Hadley,http://cityofhadley.com/ +Minnesota,Kittson County,Hallock,http://www.hallockmn.org/ +Minnesota,Norman County,Halstad,http://www.halstad.com/ +Minnesota,Anoka County,Ham Lake,http://www.ci.ham-lake.mn.us/ +Minnesota,Carver County,Hamburg,http://www.cityofhamburgmn.com/ +Minnesota,Stevens County,Hancock,http://hancockmn.org/ +Minnesota,Wright County,Hanover,https://www.hanovermn.org/ +Minnesota,Brown County,Hanska,http://www.cityofhanska.com/ +Minnesota,Fillmore County,Harmony,http://www.harmony.mn.us/ +Minnesota,Chisago County,Harris,http://www.harrismn.com/ +Minnesota,Dakota County,Hastings,http://www.hastingsmn.gov/ +Minnesota,Clay County,Hawley,http://www.hawley.govoffice.com/ +Minnesota,Dodge County,Hayfield,http://www.hayfieldmn.com/ +Minnesota,Freeborn County,Hayward,http://www.haywardmn.org/ +Minnesota,Renville County,Hector,http://hector.govoffice.com/ +Minnesota,Le Sueur County,Heidelberg,http://cityofheidelbergmn.com +Minnesota,Sibley County,Henderson,http://www.henderson-mn.com/ +Minnesota,Lincoln County,Hendricks,http://www.hendricksmn.net +Minnesota,Norman County,Hendrum,http://hendrummn.com/ +Minnesota,Otter Tail County,Henning,http://cityofhenning.com/ +Minnesota,St. Louis County,Hermantown,http://www.hermantownmn.com +Minnesota,Jackson County,Heron Lake,http://www.heronlakecity.org/ +Minnesota,St. Louis County,Hibbing,https://www.hibbingmn.gov/ +Minnesota,Aitkin County,Hill City,http://hillcity-mn.com/ +Minnesota,Rock County,Hills,http://www.hillsmn.com/ +Minnesota,Anoka County,Hilltop,http://hilltop.govoffice.com/ +Minnesota,Pine County,Hinckley,http://www.hinckley.govoffice2.com/ +Minnesota,Grant County,Hoffman,http://www.hoffmanmn.com/ +Minnesota,Houston County,Hokah,http://www.cityofhokah-mn.gov/ +Minnesota,Stearns County,Holdingford,http://www.holdingfordmn.us/ +Minnesota,Hennepin County,Hopkins,http://www.hopkinsmn.com +Minnesota,Houston County,Houston,https://houston.govoffice.com/ +Minnesota,Wright County,Howard Lake,http://www.howard-lake.mn.us/ +Minnesota,St. Louis County,Hoyt Lakes,http://hoytlakes.com/ +Minnesota,Washington County,Hugo,http://www.ci.hugo.mn.us +Minnesota,McLeod County,Hutchinson,http://www.ci.hutchinson.mn.us/ +Minnesota,Hennepin County,Independence,https://www.ci.independence.mn.us +Minnesota,Koochiching County,International Falls,http://www.ci.international-falls.mn.us/ +Minnesota,Dakota County,Inver Grove Heights,https://www.ighmn.gov/ +Minnesota,Isanti County,Isanti,http://www.cityofisanti.us +Minnesota,Lincoln County,Ivanhoe,http://www.ivanhoe-mn.com/ +Minnesota,Jackson County,Jackson,http://www.cityofjacksonmn.com/ +Minnesota,Waseca County,Janesville,http://www.janesville.govoffice.com/ +Minnesota,Scott County,Jordan,https://jordanmn.gov/ +Minnesota,Kittson County,Karlstad,https://www.cityofkarlstad.com/ +Minnesota,Le Sueur County,Kasota,http://www.kasotamn.govoffice2.com/ +Minnesota,Dodge County,Kasson,http://www.cityofkasson.com/ +Minnesota,Itasca County,Keewatin,http://www.keewatin.govoffice.com/ +Minnesota,Beltrami County,Kelliher,https://kelliher.govoffice.com/ +Minnesota,Wabasha County,Kellogg,http://www.cityofkellogg.org/ +Minnesota,Kittson County,Kennedy,http://www.cityofkennedy.com/ +Minnesota,Douglas County,Kensington,http://www.kensingtonmn.com/ +Minnesota,Goodhue County,Kenyon,http://www.cityofkenyon.com +Minnesota,Swift County,Kerkhoven,http://www.cityofkerk.com/ +Minnesota,Carlton County,Kettle River,http://www.ci.kettle-river.mn.us/ +Minnesota,Faribault County,Kiester,http://cityofkiester.com/ +Minnesota,Le Sueur County,Kilkenny,http://www.kilkennymn.com +Minnesota,Stearns County,Kimball,https://www.ci.kimball.mn.us/ +Minnesota,Houston County,La Crescent,https://www.cityoflacrescent-mn.gov/ +Minnesota,Lincoln County,Lake Benton,http://www.lakebentonminnesota.com +Minnesota,Wabasha County,Lake City,http://ci.lake-city.mn.us/ +Minnesota,Blue Earth County,Lake Crystal,https://www.lakecrystalmn.org/ +Minnesota,Washington County,Lake Elmo,http://www.lakeelmo.org/ +Minnesota,Kandiyohi County,Lake Lillian,http://lakelillian.govoffice.com/ +Minnesota,Becker County,Lake Park,http://lakeparkmn.com/ +Minnesota,Cass County,Lake Shore,https://www.cityoflakeshore.com/ +Minnesota,Washington County,Lake St. Croix Beach,http://lscb.govoffice.com/ +Minnesota,Jackson County,Lakefield,http://www.lakefieldmn.com/ +Minnesota,Washington County,Lakeland,http://ci.lakeland.mn.us/ +Minnesota,Washington County,Lakeland Shores,http://lakelandshores.govoffice.com/ +Minnesota,Dakota County,Lakeville,https://lakevillemn.gov/ +Minnesota,Kittson County,Lancaster,http://www.lancastermn.org/ +Minnesota,Fillmore County,Lanesboro,http://www.lanesboro-mn.gov/ +Minnesota,Morrison County,Lastrup,http://cityoflastrup.com/ +Minnesota,Ramsey County,Lauderdale,https://www.lauderdalemn.org/ +Minnesota,Le Sueur County,Le Center,http://www.cityoflecenter.com +Minnesota,Le Sueur County,Le Sueur,http://www.cityoflesueur.com +Minnesota,McLeod County,Lester Prairie,http://www.lesterprairiemn.us/ +Minnesota,Winona County,Lewiston,http://lewistonmn.org/ +Minnesota,Anoka County,Lexington,http://www.ci.lexington.mn.us/ +Minnesota,Dakota County,Lilydale,http://lilydale.govoffice.com/ +Minnesota,Chisago County,Lindstrom,http://www.cityoflindstrom.us/ +Minnesota,Anoka County,Lino Lakes,http://www.ci.lino-lakes.mn.us/ +Minnesota,Nobles County,Lismore,http://www.lismore.govoffice2.com/ +Minnesota,Meeker County,Litchfield,http://www.ci.litchfield.mn.us/ +Minnesota,Ramsey County,Little Canada,http://www.littlecanadamn.org/ +Minnesota,Morrison County,Little Falls,http://www.cityoflittlefalls.com/ +Minnesota,Koochiching County,Littlefork,http://www.cityoflittlefork.com/ +Minnesota,Pope County,Long Beach,https://www.longbeachmn.com/ +Minnesota,Hennepin County,Long Lake,http://www.longlakemn.gov/ +Minnesota,Todd County,Long Prairie,http://www.longprairie.net/ +Minnesota,Cass County,Longville,http://www.cityoflongville.com/ +Minnesota,Rice County,Lonsdale,http://www.lonsdale.govoffice.com +Minnesota,Hennepin County,Loretto,http://www.ci.loretto.mn.us/ +Minnesota,Pope County,Lowry,https://lowrymn.govoffice3.com/ +Minnesota,Rock County,Luverne,http://www.cityofluverne.org +Minnesota,Mower County,Lyle,http://www.lylemn.org/ +Minnesota,Fillmore County,Mabel,http://www.mabelmn.com/ +Minnesota,Watonwan County,Madelia,http://www.madeliamn.com/ +Minnesota,Lac qui Parle County,Madison,http://www.ci.madison.mn.us/ +Minnesota,Blue Earth County,Madison Lake,http://www.ci.madison-lake.mn.us/ +Minnesota,Mahnomen County,Mahnomen,http://www.mahnomen.govoffice.com/ +Minnesota,Washington County,Mahtomedi,http://www.ci.mahtomedi.mn.us/ +Minnesota,Crow Wing County,Manhattan Beach,http://www.manhattanbeachmn.org/ +Minnesota,Blue Earth County,Mankato,http://www.mankatomn.gov/ +Minnesota,Dodge County,Mantorville,http://www.mantorville.com/ +Minnesota,Hennepin County,Maple Grove,http://maplegrovemn.gov/ +Minnesota,Wright County,Maple Lake,http://www.ci.maple-lake.mn.us/ +Minnesota,Hennepin County,Maple Plain,http://www.mapleplain.com +Minnesota,Blue Earth County,Mapleton,http://www.mapletonmn.com/ +Minnesota,Ramsey County,Maplewood,https://maplewoodmn.gov/ +Minnesota,Washington County,Marine on St. Croix,http://marine.govoffice.com/ +Minnesota,Lyon County,Marshall,http://ci.marshall.mn.us +Minnesota,Carver County,Mayer,http://www.cityofmayer.com/ +Minnesota,Polk County,McIntosh,http://www.ci.mcintosh.mn.us +Minnesota,Steele County,Medford,http://www.medfordminnesota.com/ +Minnesota,Hennepin County,Medicine Lake,http://www.cityofmedicinelake.com// +Minnesota,Hennepin County,Medina,http://medinamn.us/ +Minnesota,Stearns County,Melrose,http://www.cityofmelrose.com/ +Minnesota,Wadena County,Menahga,https://www.cityofmenahga.com/ +Minnesota,Dakota County,Mendota,http://www.cityofmendota.org/ +Minnesota,Dakota County,Mendota Heights,http://www.mendota-heights.com +Minnesota,Mille Lacs County,Milaca,http://www.cityofmilaca.org/ +Minnesota,Chippewa County,Milan,https://www.milanmn.com/ +Minnesota,Redwood County,Milroy,http://milroymn.govoffice2.com/ +Minnesota,Winona County,Minneiska,http://minneiska-mn.com/ +Minnesota,Lyon County,Minneota,http://minneota.com +Minnesota,Winona County,Minnesota City,https://www.minnesotacity.org/ +Minnesota,Faribault County,Minnesota Lake,http://www.minnesotalake.com/ +Minnesota,Hennepin County,Minnetonka,https://www.minnetonkamn.gov/ +Minnesota,Hennepin County,Minnetrista,http://www.cityofminnetrista.com// +Minnesota,Chippewa County,Montevideo,http://www.montevideomn.org/ +Minnesota,Wright County,Monticello,http://ci.monticello.mn.us +Minnesota,Wright County,Montrose,http://www.montrose-mn.com +Minnesota,Clay County,Moorhead,http://www.ci.moorhead.mn.us/ +Minnesota,Carlton County,Moose Lake,https://www.cityofmooselake.net/ +Minnesota,Kanabec County,Mora,http://ci.mora.mn.us/ +Minnesota,Stevens County,Morris,http://www.ci.morris.mn.us/ +Minnesota,Rice County,Morristown,http://www.morristownmn.org/ +Minnesota,Renville County,Morton,http://www.mortonmn.com/ +Minnesota,Morrison County,Motley,http://www.cityofmotley.com +Minnesota,Hennepin County,Mound,https://www.cityofmound.com/ +Minnesota,Ramsey County,Mounds View,http://www.ci.mounds-view.mn.us/ +Minnesota,St. Louis County,Mountain Iron,https://mtniron.com/ +Minnesota,Cottonwood County,Mountain Lake,http://www.mountainlakemn.com/ +Minnesota,Swift County,Murdock,http://cityofmurdock.com/ +Minnesota,Hubbard County,Nevis,https://nevis.govoffice.com/ +Minnesota,Ramsey County,New Brighton,https://www.newbrightonmn.gov/ +Minnesota,Hennepin County,New Hope,https://www.newhopemn.gov/ +Minnesota,Kandiyohi County,New London,http://www.newlondonmn.net/ +Minnesota,Scott County,New Prague,http://www.ci.new-prague.mn.us/ +Minnesota,Waseca County,New Richland,http://www.cityofnewrichlandmn.com/ +Minnesota,Brown County,New Ulm,http://www.ci.new-ulm.mn.us/ +Minnesota,Otter Tail County,New York Mills,http://newyorkmills.govoffice2.com/ +Minnesota,Marshall County,Newfolden,http://www.ci.newfolden.mn.us/ +Minnesota,Washington County,Newport,http://www.ci.newport.mn.us/ +Minnesota,Nicollet County,Nicollet,http://nicollet.org/ +Minnesota,Crow Wing County,Nisswa,http://cityofnisswa.com/ +Minnesota,Chisago County,North Branch,http://ci.north-branch.mn.us/ +Minnesota,Nicollet County,North Mankato,http://www.northmankato.com/ +Minnesota,Ramsey County,North Oaks,http://www.cityofnorthoaks.com/ +Minnesota,Ramsey County,North St. Paul,https://www.northstpaul.org/ +Minnesota,Rice County,Northfield,http://www.ci.northfield.mn.us/ +Minnesota,Koochiching County,Northome,http://ci.northome.mn.us/ +Minnesota,Carver County,Norwood Young America,http://www.cityofnya.com +Minnesota,Anoka County,Nowthen,https://www.cityofnowthen.com/ +Minnesota,Anoka County,Oak Grove,http://www.ci.oak-grove.mn.us/ +Minnesota,Washington County,Oak Park Heights,https://www.cityofoakparkheights.com/ +Minnesota,Washington County,Oakdale,http://www.ci.oakdale.mn.us/ +Minnesota,Renville County,Olivia,http://www.olivia.mn.us/ +Minnesota,Mille Lacs County,Onamia,https://onamiamn.com/ +Minnesota,Hennepin County,Orono,http://www.ci.orono.mn.us +Minnesota,Olmsted County,Oronoco,https://www.oronoco.com/ +Minnesota,Big Stone County,Ortonville,https://mnortonville.com/ +Minnesota,Douglas County,Osakis,https://cityofosakis.com/ +Minnesota,Marshall County,Oslo,http://www.oslo.ima-jenn.com/ +Minnesota,Hennepin County,Osseo,http://www.discoverosseo.com +Minnesota,Wright County,Otsego,http://www.ci.otsego.mn.us/ +Minnesota,Steele County,Owatonna,https://www.owatonna.gov/ +Minnesota,Hubbard County,Park Rapids,http://ci.park-rapids.mn.us/ +Minnesota,Otter Tail County,Parkers Prairie,http://www.parkersprairie.net +Minnesota,Stearns County,Paynesville,https://www.paynesvillemn.com/ +Minnesota,Otter Tail County,Pelican Rapids,http://www.pelicanrapids.com +Minnesota,Blue Earth County,Pemberton,https://pembertonmn.govoffice2.com/ +Minnesota,Crow Wing County,Pequot Lakes,http://www.pequotlakes-mn.gov/ +Minnesota,Otter Tail County,Perham,http://www.ci.perham.mn.us/ +Minnesota,Fillmore County,Peterson,http://www.petersonmn.org/ +Minnesota,Morrison County,Pierz,http://www.pierzmn.org/ +Minnesota,Pine County,Pine City,https://pinecity.govoffice.com/ +Minnesota,Goodhue County,Pine Island,http://cc.pineislandmn.com +Minnesota,Pipestone County,Pipestone,https://pipestoneminnesota.com/ +Minnesota,Wabasha County,Plainview,http://www.plainviewmn.com/ +Minnesota,Hennepin County,Plymouth,https://www.plymouthmn.gov +Minnesota,Yellow Medicine County,Porter,http://www.portermn.org +Minnesota,Mille Lacs County,Princeton,https://www.princetonmn.org/ +Minnesota,Scott County,Prior Lake,http://www.cityofpriorlake.com +Minnesota,St. Louis County,Proctor,http://www.ci.proctor.mn.us/ +Minnesota,Mower County,Racine,#cite_note-4 +Minnesota,Anoka County,Ramsey,http://www.ci.ramsey.mn.us/ +Minnesota,Morrison County,Randall,http://www.randall.govoffice2.com/ +Minnesota,Red Lake County,Red Lake Falls,http://www.redlakefalls.com +Minnesota,Goodhue County,Red Wing,http://www.red-wing.org/ +Minnesota,Redwood County,Redwood Falls,https://ci.redwood-falls.mn.us/ +Minnesota,Renville County,Renville,http://www.ci.renville.mn.us/ +Minnesota,Benton County,Rice,http://www.cityofrice.com/ +Minnesota,St. Louis County,Rice Lake,https://www.ricelakecitymn.com/ +Minnesota,Hennepin County,Richfield,https://www.richfieldmn.gov/ +Minnesota,Stearns County,Richmond,http://www.ci.richmond.mn.us/ +Minnesota,Hennepin County,Robbinsdale,http://www.robbinsdalemn.com/ +Minnesota,Olmsted County,Rochester,http://www.rochestermn.gov +Minnesota,Pine County,Rock Creek,http://cityofrockcreekmn.com/ +Minnesota,Wright County,Rockford,http://www.cityofrockford.org/ +Minnesota,Stearns County,Rockville,http://www.rockvillecity.org/ +Minnesota,Hennepin County,Rogers,http://www.cityofrogers.org +Minnesota,Roseau County,Roseau,http://city.roseau.mn.us/ +Minnesota,Dakota County,Rosemount,http://www.ci.rosemount.mn.us/ +Minnesota,Ramsey County,Roseville,http://www.ci.roseville.mn.us/ +Minnesota,Nobles County,Round Lake,http://roundlk.net/ +Minnesota,Morrison County,Royalton,http://www.royaltonmn.com +Minnesota,Chisago County,Rush City,http://rushcitymn.us/ +Minnesota,Fillmore County,Rushford,http://www.rushford.govoffice.com/ +Minnesota,Fillmore County,Rushford Village,http://rushfordvillage.govoffice.com/ +Minnesota,Clay County,Sabin,http://www.cityofsabin.com/ +Minnesota,Ramsey County,Saint Paul,http://www.stpaul.gov/ +Minnesota,Redwood County,Sanborn,http://www.cityofsanbornmn.org/ +Minnesota,Pine County,Sandstone,http://www.sandstone.govoffice.com/ +Minnesota,Stearns County,Sartell,http://www.sartellmn.com +Minnesota,Stearns County,Sauk Centre,https://saukcentre.govoffice2.com/ +Minnesota,Benton County,Sauk Rapids,https://ci.sauk-rapids.mn.us/ +Minnesota,Scott County,Savage,https://www.cityofsavage.com/ +Minnesota,Washington County,Scandia,https://www.cityofscandia.com/ +Minnesota,Carlton County,Scanlon,http://cityofscanlon.com +Minnesota,Wadena County,Sebeka,http://www.cityofsebeka.org/ +Minnesota,Chisago County,Shafer,http://www.shafermn.com/ +Minnesota,Scott County,Shakopee,https://www.shakopeemn.gov/ +Minnesota,Martin County,Sherburn,http://sherburn.govoffice.com/ +Minnesota,Ramsey County,Shoreview,http://www.shoreviewmn.gov/ +Minnesota,Hennepin County,Shorewood,http://www.ci.shorewood.mn.us/ +Minnesota,Lake County,Silver Bay,http://www.silverbay.com/ +Minnesota,McLeod County,Silver Lake,https://www.cityofsilverlake.org/ +Minnesota,Blue Earth County,Skyline,https://www.cityofskyline.com/ +Minnesota,Murray County,Slayton,http://slayton.govoffice.com/ +Minnesota,Brown County,Sleepy Eye,http://www.sleepyeye-mn.com/ +Minnesota,Dakota County,South St. Paul,http://www.southstpaul.org/ +Minnesota,Houston County,Spring Grove,http://www.springgrove.govoffice.com +Minnesota,Anoka County,Spring Lake Park,http://www.slpmn.org/ +Minnesota,Hennepin County,Spring Park,http://springpark.govoffice.com +Minnesota,Fillmore County,Spring Valley,https://www.springvalley-mn.com/ +Minnesota,Brown County,Springfield,http://www.springfieldmn.org +Minnesota,Hennepin County,St. Anthony,http://www.savmn.com +Minnesota,Stearns County,St. Augusta,http://staugustamn.com/ +Minnesota,Hennepin County,St. Bonifacius,http://www.ci.st-bonifacius.mn.us/ +Minnesota,Winona County,St. Charles,http://www.stcharlesmn.org/ +Minnesota,Blue Earth County,St. Clair,http://www.stclair.govoffice2.com/ +Minnesota,Stearns County,St. Cloud,http://www.ci.stcloud.mn.us/ +Minnesota,Anoka County,St. Francis,http://www.stfrancismn.org/ +Minnesota,Watonwan County,St. James,https://www.ci.stjames.mn.us/ +Minnesota,Stearns County,St. Joseph,http://www.cityofstjoseph.com/ +Minnesota,Hennepin County,St. Louis Park,https://www.stlouispark.org/ +Minnesota,Washington County,St. Marys Point,https://www.stmaryspointmn.org/ +Minnesota,Wright County,St. Michael,https://stmichaelmn.gov/ +Minnesota,Washington County,St. Paul Park,http://www.stpaulpark.govoffice.com/ +Minnesota,Nicollet County,St. Peter,http://www.saintpetermn.gov +Minnesota,Stearns County,St. Stephen,http://www.cityofststephen.com/ +Minnesota,Chisago County,Stacy,http://www.stacymn.org/ +Minnesota,Todd County,Staples,https://staples.govoffice.com/ +Minnesota,Pope County,Starbuck,https://starbuckcitygov.com/ +Minnesota,Marshall County,Stephen,http://www.stephenmn.com/ +Minnesota,Olmsted County,Stewartville,http://stewartvillemn.com/ +Minnesota,Washington County,Stillwater,http://www.ci.stillwater.mn.us +Minnesota,Winona County,Stockton,http://www.ci.stockton.mn.us/ +Minnesota,Cottonwood County,Storden,http://www.rrcnet.org/~storden/ +Minnesota,Dakota County,Sunfish Lake,http://www.sunfishlake.org/ +Minnesota,Chisago County,Taylors Falls,http://www.ci.taylors-falls.mn.us/ +Minnesota,Pennington County,Thief River Falls,http://www.citytrf.net/ +Minnesota,Hennepin County,Tonka Bay,http://www.cityoftonkabay.net/ +Minnesota,St. Louis County,Tower,http://www.cityoftower.com/ +Minnesota,Lyon County,Tracy,http://www.tracymn.org +Minnesota,Martin County,Truman,http://www.trumanmn.us/ +Minnesota,Norman County,Twin Valley,http://www.twinvalley.govoffice.com +Minnesota,Lake County,Two Harbors,https://www.twoharborsmn.gov/ +Minnesota,Lincoln County,Tyler,http://www.tyler.govoffice.com +Minnesota,Clay County,Ulen,https://ulenmn.org/ +Minnesota,Otter Tail County,Underwood,http://www.ci.underwood.mn.us/ +Minnesota,Morrison County,Upsala,https://cityofupsala.com/ +Minnesota,Ramsey County,Vadnais Heights,http://www.cityvadnaisheights.com/ +Minnesota,Otter Tail County,Vergas,http://www.cityofvergas.com +Minnesota,Wadena County,Verndale,https://cityofverndale.weebly.com/ +Minnesota,Redwood County,Vesta,http://www.vestamn.us/ +Minnesota,Carver County,Victoria,https://www.ci.victoria.mn.us/ +Minnesota,St. Louis County,Virginia,https://www.virginiamn.us/ +Minnesota,Wabasha County,Wabasha,http://www.wabasha.org/ +Minnesota,Redwood County,Wabasso,http://www.wabasso.org/ +Minnesota,Carver County,Waconia,http://www.waconia.org +Minnesota,Wadena County,Wadena,http://www.wadena.org/ +Minnesota,Stearns County,Waite Park,http://www.ci.waitepark.mn.us/ +Minnesota,Cass County,Walker,http://walker.govoffice.com +Minnesota,Redwood County,Walnut Grove,http://www.walnutgrovemn.org/ +Minnesota,Goodhue County,Wanamingo,http://www.cityofwanamingo.com/ +Minnesota,Marshall County,Warren,http://www.warrenminnesota.com/ +Minnesota,Roseau County,Warroad,http://warroadmn.org/ +Minnesota,Waseca County,Waseca,http://ci.waseca.mn.us/ +Minnesota,Carver County,Watertown,https://www.watertownmn.gov/ +Minnesota,Le Sueur County,Waterville,http://cityofwaterville.com +Minnesota,Meeker County,Watkins,http://www.cityofwatkins.com/ +Minnesota,Waverly,Waverly,http://www.waverlymn.org/ +Minnesota,Hennepin County,Wayzata,http://www.wayzata.org +Minnesota,Martin County,Welcome,https://welcomemn.govoffice2.com/ +Minnesota,Faribault County,Wells,http://www.cityofwells.net/ +Minnesota,Grant County,Wendell,http://www.cityofwendell.net/ +Minnesota,Dodge County,West Concord,http://www.westconcordmn.com/ +Minnesota,Dakota County,West St. Paul,https://www.wspmn.gov/ +Minnesota,Traverse County,Wheaton,http://www.cityofwheaton.com +Minnesota,Ramsey County,White Bear Lake,http://www.whitebearlake.org/ +Minnesota,Washington County,Willernie,http://www.willernie.org +Minnesota,Kandiyohi County,Willmar,http://www.willmarmn.gov/ +Minnesota,Cottonwood County,Windom,http://www.windom-mn.com +Minnesota,Faribault County,Winnebago,https://www.cityofwinnebago.com/ +Minnesota,Winona County,Winona,https://www.cityofwinona.com/ +Minnesota,McLeod County,Winsted,http://winsted.mn.us +Minnesota,Sibley County,Winthrop,http://www.winthropminnesota.com/ +Minnesota,Wilkin County,Wolverton,http://cityofwolverton.com/ +Minnesota,Washington County,Woodbury,http://www.ci.woodbury.mn.us/ +Minnesota,Hennepin County,Woodland,http://www.woodlandmn.org/ +Minnesota,Nobles County,Worthington,http://www.ci.worthington.mn.us/ +Minnesota,Fillmore County,Wykoff,http://www.wykoff.govoffice2.com +Minnesota,Chisago County,Wyoming,http://www.wyomingmn.org +Minnesota,Sherburne County,Zimmerman,http://zimmerman.govoffice.com/ +Minnesota,Goodhue County,Zumbrota,http://www.ci.zumbrota.mn.us +Mississippi,Monroe County,Aberdeen,http://cityofaberdeenms.com/ +Mississippi,Choctaw County,Ackerman,http://ackermanms.org/ +Mississippi,Monroe County,Amory,http://www.cityofamoryms.com/ +Mississippi,Benton County,Ashland,http://www.ashland.ms +Mississippi,Benton County,Baldwyn,http://www.baldwynliving.com/ +Mississippi,Panola County,Batesville,http://batesville.panolams.com/ +Mississippi,Jasper County,Bay Springs,http://cityofbaysprings.com +Mississippi,Hancock County,Bay St. Louis,http://www.baystlouis-ms.gov +Mississippi,Humphreys County,Belzoni,http://www.belzonims.com/profbel.htm +Mississippi,Yazoo County,Bentonia,http://townofbentonia.com/ +Mississippi,Harrison County,Biloxi,http://www.biloxi.ms.us +Mississippi,Union County,Blue Springs,http://bluespringsms.com/ +Mississippi,Prentiss County,Booneville,https://www.visitbooneville.com/ +Mississippi,Rankin County,Brandon,https://www.brandonms.org/ +Mississippi,Lincoln County,Brookhaven,http://brookhaven-ms.gov +Mississippi,Noxubee County,Brooksville,http://www.brooksvillems.org/ +Mississippi,Calhoun County,Bruce,http://www.cityofbruce.org +Mississippi,Tishomingo County,Burnsville,http://burnsvillems.com/ +Mississippi,Marshall County,Byhalia,http://www.byhalia-ms.com/ +Mississippi,Hinds County,Byram,http://byram-ms.us +Mississippi,Calhoun County,Calhoun City,http://www.calhouncity.org/ +Mississippi,Madison County,Canton,http://cityofcantonms.com/ +Mississippi,Carroll County,Carrollton,http://www.carrolltonms.com +Mississippi,Leake County,Carthage,http://www.cityofcarthage.org/ +Mississippi,Wilkinson County,Centreville,https://townofcentrevillems.org/ +Mississippi,Coahoma County,Clarksdale,http://www.cityofclarksdale.org/ +Mississippi,Bolivar County,Cleveland,http://www.cityofclevelandms.com/ +Mississippi,Hinds County,Clinton,http://www.clintonms.org +Mississippi,Yalobusha County,Coffeeville,http://www.coffeevillems.com/ +Mississippi,Tate County,Coldwater,http://coldwaterms.org/ +Mississippi,Covington County,Collins,http://www.cityofcollins.com +Mississippi,Marion County,Columbia,http://www.cityofcolumbiams.com/ +Mississippi,Lowndes County,Columbus,http://www.thecityofcolumbus.ms.gov/Pages/default.aspx +Mississippi,Panola County,Como,http://como.panolams.com/ +Mississippi,Alcorn County,Corinth,http://cityofcorinthms.com +Mississippi,Wilkinson County,Crosby,http://townofcrosby.com +Mississippi,Copiah County,Crystal Springs,http://cityofcrystalsprings.com +Mississippi,Newton County,Decatur,http://www.decaturms.org/index.php +Mississippi,Hancock County,Diamondhead,http://www.diamondhead.ms.gov +Mississippi,Harrison County,D'Iberville,http://diberville.ms.us +Mississippi,Simpson County,D'Lo,http://www.dlowaterpark.com +Mississippi,Montgomery County,Duck Hill,http://montgomerycountyms.org/index.php?option=com_content&view=article&id=46&Itemid=53 +Mississippi,Hinds County,Edwards,http://townofedwards.com +Mississippi,Jones County,Ellisville,http://cityofellisvillems.com +Mississippi,Clarke County,Enterprise,https://www.townofenterprise.com/ +Mississippi,Webster County,Eupora,https://www.cityofeupora.com +Mississippi,Alcorn County,Farmington,http://www.farmingtonms.com +Mississippi,Jefferson County,Fayette,http://www.fayettems.com +Mississippi,Madison County,Flora,http://www.florams.com/ +Mississippi,Rankin County,Florence,http://www.cityofflorencems.com/ +Mississippi,Rankin County,Flowood,https://www.cityofflowood.com/ +Mississippi,Scott County,Forest,http://www.forest-ms.com/ +Mississippi,Itawamba County,Fulton,http://fulton.itawambams.com/fulton-city-hall/ +Mississippi,Jackson County,Gautier,http://www.gautier-ms.gov +Mississippi,Tallahatchie County,Glendora,http://www.glendorams.com/ +Mississippi,Amite County,Gloster,http://www.amitecounty.ms/cities/gloster.php +Mississippi,Madison County,Gluckstadt,https://www.gluckstadtms.org/ +Mississippi,Washington County,Greenville,http://www.greenvillems.org +Mississippi,Leflore County,Greenwood,https://www.greenwoodms.com/city +Mississippi,Grenada County,Grenada,http://www.cityofgrenada.net +Mississippi,Harrison County,Gulfport,http://www.gulfport-ms.gov/ +Mississippi,Monroe County,Hatley,http://hatley.monroems.com/ +Mississippi,Forrest County,Hattiesburg,http://www.hattiesburgms.com +Mississippi,Jasper County,Heidelberg,http://townofheidelberg.com +Mississippi,DeSoto County,Hernando,http://www.cityofhernando.org +Mississippi,Marshall County,Holly Springs,https://hollyspringsmsus.com/ +Mississippi,DeSoto County,Horn Lake,http://www.hornlake.org/ +Mississippi,Chickasaw County,Houston,https://www.houston.ms.gov/Pages/default.aspx +Mississippi,Sunflower County,Indianola,http://www.indianola.ms.gov +Mississippi,Leflore County,Itta Bena,http://ittabenams.homestead.com/index.html +Mississippi,Tishomingo County,Iuka,http://iukams.com/ +Mississippi,Hinds County,Jackson,http://www.jacksonms.gov +Mississippi,Montgomery County,Kilmichael,http://kilmichaelms.com/ +Mississippi,Attala County,Kosciusko,http://kosciusko.ms +Mississippi,Jones County,Laurel,http://www.laurelms.com +Mississippi,Greene County,Leakesville,https://leakesvillems.com/ +Mississippi,Washington County,Leland,http://www.lelandchamber.com/ +Mississippi,Amite County,Liberty,http://www.amitecounty.ms/liberty +Mississippi,Harrison County,Long Beach,http://www.cityoflongbeachms.com/ +Mississippi,Winston County,Louisville,http://www.cityoflouisvillems.com/ +Mississippi,George County,Lucedale,http://cityoflucedale.com +Mississippi,Noxubee County,Macon,http://www.cityofmacon.org +Mississippi,Madison County,Madison,http://www.madisonthecity.com +Mississippi,Simpson County,Magee,http://www.cityofmagee.com/ +Mississippi,Itawamba County,Mantachie,http://mantachie.itawambams.com +Mississippi,Lauderdale County,Marion,http://www.marionms.org +Mississippi,Pike County,McComb,http://www.mccomb-ms.gov +Mississippi,Franklin County,Meadville,http://www.meadvillems.com +Mississippi,Simpson County,Mendenhall,http://ci.mendenhall.ms.us +Mississippi,Lauderdale County,Meridian,http://www.meridianms.org +Mississippi,Smith County,Mize,http://mizems.com/ +Mississippi,Lawrence County,Monticello,http://www.monticello.ms.gov +Mississippi,Scott County,Morton,http://www.cityofmorton.com/ +Mississippi,Jackson County,Moss Point,http://cityofmosspoint.org +Mississippi,Bolivar County,Mound Bayou,http://www.cityofmoundbayou.com/ +Mississippi,Covington County,Mount Olive,https://www.townofmtolivems.com/ +Mississippi,Adams County,Natchez,http://www.natchez.ms.us/1 +Mississippi,Monroe County,Nettleton,https://nettletonms.gov/ +Mississippi,Union County,New Albany,http://www.visitnewalbany.com/ +Mississippi,Newton County,Newton,http://www.newtonms.org +Mississippi,Carroll County,North Carrollton,http://www.northcarrolltonms.com +Mississippi,Winston County,Noxapater,http://www.noxapater.com/ +Mississippi,Jackson County,Ocean Springs,http://www.oceansprings-ms.gov/ +Mississippi,Chickasaw County,Okolona,http://www.cityofokolona.com +Mississippi,DeSoto County,Olive Branch,http://www.obms.us +Mississippi,Lafayette County,Oxford,http://www.oxfordms.net +Mississippi,Jackson County,Pascagoula,http://cityofpascagoula.com +Mississippi,Harrison County,Pass Christian,https://pass-christian.com/modern/ +Mississippi,Rankin County,Pearl,http://www.cityofpearl.com +Mississippi,Rankin County,Pelahatchie,http://pelahatchie.org/ +Mississippi,Forrest County,Petal,http://www.cityofpetal.com +Mississippi,Neshoba County,Philadelphia,http://www.philadelphiathecity.com +Mississippi,Pearl River County,Picayune,http://www.picayune.ms.us +Mississippi,Smith County,Polkville,http://www.polkville.org/ +Mississippi,Pontotoc County,Pontotoc,http://www.pontotocms.org/ +Mississippi,Panola County,Pope,http://pope.panolams.com/ +Mississippi,Pearl River County,Poplarville,https://www.poplarvillems.gov +Mississippi,Claiborne County,Port Gibson,http://portgibsonms.org/ +Mississippi,Jefferson Davis County,Prentiss,http://prentissms.com +Mississippi,Rankin County,Puckett,http://www.puckettms.org +Mississippi,Clarke County,Quitman,https://www.cityquitman.net +Mississippi,Hinds County,Raymond,http://www.raymondms.com/ +Mississippi,Rankin County,Richland,http://richlandms.org +Mississippi,Madison County,Ridgeland,http://www.ridgelandms.org/ +Mississippi,Tippah County,Ripley,https://www.ripley.ms.gov/ +Mississippi,Bolivar County,Rosedale,http://www.cityofrosedale-ms.com +Mississippi,Lee County,Saltillo,http://saltilloms.org +Mississippi,Tate County,Senatobia,http://www.cityofsenatobia.com +Mississippi,Lee County,Shannon,http://townofshannon.org/ +Mississippi,Bolivar County,Shelby,http://cityofshelbyms.com +Mississippi,Noxubee County,Shuqualak,http://www.townofshuqualak.com/ +Mississippi,Monroe County,Smithville,http://www.smithvillems.org/ +Mississippi,Benton County,Snow Lake Shores,http://snowlakeshores.ms +Mississippi,DeSoto County,Southaven,http://www.southaven.org +Mississippi,Oktibbeha County,Starkville,http://www.cityofstarkville.org/ +Mississippi,Pike County,Summit,http://www.summitms.org/ +Mississippi,Lamar County,Sumrall,http://www.sumrallms.org/ +Mississippi,Lafayette County,Taylor,http://www.taylorms.org +Mississippi,Smith County,Taylorsville,https://www.visittvillems.org/ +Mississippi,Hinds County,Terry,http://terryms.org +Mississippi,Tishomingo County,Tishomingo,http://www.tishomingo.ms/ +Mississippi,Tunica County,Tunica,http://townoftunica.com/ +Mississippi,Lee County,Tupelo,http://tupeloms.gov +Mississippi,Tallahatchie County,Tutwiler,http://tutwilerms.com/ +Mississippi,Walthall County,Tylertown,http://www.co.walthall.ms.us/town-of-tylertown.html +Mississippi,Carroll County,Vaiden,http://vaidenms.com/ +Mississippi,Calhoun County,Vardaman,http://www.townofvardaman.com/ +Mississippi,Lee County,Verona,http://cityofverona.org +Mississippi,Warren County,Vicksburg,http://www.vicksburg.org/ +Mississippi,DeSoto County,Walls,http://www.townofwalls.com +Mississippi,Tippah County,Walnut,http://www.walnut.ms/ +Mississippi,Leake County,Walnut Grove,http://www.walnutgrove-ms.com +Mississippi,Hancock County,Waveland,http://waveland.ms.gov +Mississippi,Wayne County,Waynesboro,http://waynesboroms.us/ +Mississippi,Tallahatchie County,Webb,http://www.city-data.com/city/Webb-Mississippi.html +Mississippi,Copiah County,Wesson,http://wessonms.org/ +Mississippi,Clay County,West Point,http://www.wpnet.org/ +Mississippi,Stone County,Wiggins,http://www.cityofwiggins.com/ +Mississippi,Montgomery County,Winona,http://winonams.us +Mississippi,Bolivar County,Winstonville,http://www.townofwinstonville.com +Mississippi,Wilkinson County,Woodville,http://www.woodvillems.org/ +Mississippi,Yazoo County,Yazoo City,http://www.cityofyazoocity.org/ +Missouri,Jefferson County,Arnold,http://www.arnoldmo.org +Missouri,St. Louis County,Ballwin,http://www.ballwin.mo.us +Missouri,St. Louis County,Bellefontaine Neighbors,http://www.cityofbn.com +Missouri,Cass County,Belton,http://www.belton.org +Missouri,St. Louis County,Berkeley,http://www.cityofberkeley.us/ +Missouri,Jackson County,Blue Springs,http://www.bluespringsgov.com +Missouri,Polk County,Bolivar,http://bolivar.mo.us/ +Missouri,Cooper County,Boonville,http://boonvillemo.org/ +Missouri,Taney County,Branson,https://www.bransonmo.gov/ +Missouri,St. Louis County,Brentwood,http://www.brentwoodmo.org +Missouri,St. Louis County,Bridgeton,http://www.bridgetonmo.com/ +Missouri,Clinton County,Cameron,http://www.cameron-mo.com/ +Missouri,Cape Girardeau County,Cape Girardeau,https://www.cityofcapegirardeau.org/ +Missouri,Jasper County,Carl Junction,https://carljunction.org/ +Missouri,Jasper County,Carthage,http://carthagemo.gov/ +Missouri,St. Louis County,Chesterfield,http://www.chesterfield.mo.us/ +Missouri,Livingston County,Chillicothe,http://www.chillicothecity.org +Missouri,St. Louis County,Clayton,http://www.claytonmo.gov/ +Missouri,Henry County,Clinton,http://clintonmo.com/ +Missouri,Boone County,Columbia,http://www.como.gov +Missouri,St. Louis County,Crestwood,http://www.cityofcrestwood.org +Missouri,St. Louis County,Creve Coeur,https://www.crevecoeurmo.gov/ +Missouri,Saint Charles County,Dardenne Prairie,http://www.dardenneprairie.org/ +Missouri,St. Louis County,Des Peres,http://www.desperesmo.org +Missouri,St. Louis County,Ellisville,http://www.ellisville.mo.us/ +Missouri,St. Louis County,Eureka,http://www.eureka.mo.us/ +Missouri,Clay County,Excelsior Springs,https://cityofesmo.com/ +Missouri,Saint Francois County,Farmington,http://farmington-mo.gov +Missouri,St. Louis County,Ferguson,http://www.fergusoncity.com/ +Missouri,Jefferson County,Festus,http://www.cityoffestus.org/ +Missouri,St. Louis County,Florissant,http://www.florissantmo.com/ +Missouri,Callaway County,Fulton,http://fultonmo.org/ +Missouri,Clay County,Gladstone,http://www.gladstone.mo.us/ +Missouri,Jackson County,Grain Valley,https://www.cityofgrainvalley.org/ +Missouri,Jackson County,Grandview,http://www.grandview.org +Missouri,Marion County,Hannibal,http://www.hannibal-mo.gov/ +Missouri,Cass County,Harrisonville,http://ci.harrisonville.mo.us/ +Missouri,St. Louis County,Hazelwood,http://www.hazelwoodmo.org +Missouri,Jackson County,Independence,http://www.indepmo.org +Missouri,Cape Girardeau County,Jackson,http://www.jacksonmo.org/ +Missouri,St. Louis County,Jefferson City,http://www.jeffersoncitymo.gov/ +Missouri,St. Louis County,Jennings,http://www.cityofjennings.org/ +Missouri,Jasper County,Joplin,http://www.joplinmo.org/ +Missouri,Jackson County,Kansas City,https://kcmo.gov/ +Missouri,Clay County,Kearney,http://www.ci.kearney.mo.us +Missouri,Dunklin County,Kennett,http://www.cityofkennettmo.com/ +Missouri,Benton Township,Kirksville,http://www.kirksvillecity.com +Missouri,St. Louis County,Kirkwood,http://www.kirkwoodmo.org +Missouri,St. Louis County,Ladue,http://www.cityofladue-mo.gov +Missouri,St. Charles County,Lake St. Louis,http://www.lakesaintlouis.com/ +Missouri,Laclede County,Lebanon,http://www.lebanonmissouri.org +Missouri,Jackson County,Lee's Summit,http://cityofls.net +Missouri,Clay County,Liberty,https://www.libertymissouri.gov/ +Missouri,St. Louis County,Manchester,http://www.manchestermo.gov/ +Missouri,St. Louis County,Maplewood,http://www.cityofmaplewood.com/ +Missouri,Saline County,Marshall,https://www.marshall-mo.com/ +Missouri,St. Louis County,Maryland Heights,http://www.marylandheights.com +Missouri,Nodaway County,Maryville,https://www.maryville.org/ +Missouri,Audrain County,Mexico,http://www.mexicomissouri.net/ +Missouri,Randolph County,Moberly,http://www.moberlymo.org/ +Missouri,Monett Township,Monett,http://cityofmonett.com +Missouri,Newton County,Neosho,http://www.neoshomo.org/ +Missouri,Vernon County,Nevada,http://nevadamo.gov/ +Missouri,Christian County,Nixa,http://www.nixa.com/ +Missouri,Jackson County,Oak Grove,http://www.cityofoakgrove.com +Missouri,St. Charles County,O'Fallon,http://www.ofallon.mo.us/ +Missouri,St. Louis County,Olivette,http://www.olivettemo.com +Missouri,St. Louis County,Overland,http://www.overlandmo.org/ +Missouri,Christian County,Ozark,http://ozarkmissouri.com/ +Missouri,Saint Francois County,Park Hills,http://www.parkhillsmo.net/ +Missouri,Central Township,Perryville,https://www.cityofperryville.com +Missouri,Cass County,Pleasant Hill,http://www.pleasanthill.com/ +Missouri,Butler County,Poplar Bluff,http://www.poplarbluff-mo.gov/ +Missouri,Cass County,Raymore,http://www.raymore.com +Missouri,Jackson County,Raytown,http://www.raytown.mo.us/ +Missouri,Christian County,Republic,http://www.republicmo.com/ +Missouri,St. Louis County,Richmond Heights,http://www.richmondheights.org/ +Missouri,Phelps County,Rolla,http://www.rollacity.org/ +Missouri,Pettis County,Sedalia,http://www.cityofsedalia.com +Missouri,Scott County,Sikeston,http://www.sikeston.org/ +Missouri,Clay County,Smithville,http://www.smithvillemo.org/ +Missouri,Greene County,Springfield,http://www.springfieldmo.gov/ +Missouri,St. Louis County,St. Ann,http://www.stannmo.org/ +Missouri,Saint Charles County,St. Charles,http://www.stcharlescitymo.gov/ +Missouri,Buchanan County,St. Joseph,https://www.stjosephmo.gov/ +Missouri,St. Charles County,St. Peters,http://www.stpetersmo.net/ +Missouri,St. Louis County,Sunset Hills,http://www.sunset-hills.com/ +Missouri,St. Louis County,Town and Country,http://www.town-and-country.org +Missouri,Lincoln County,Troy,http://cityoftroymissouri.com +Missouri,Franklin County,Union,https://www.unionmissouri.gov/ +Missouri,St. Louis County,University City,http://www.ucitymo.org/ +Missouri,Johnson County,Warrensburg,http://www.warrensburg-mo.com +Missouri,Warren County,Warrenton,http://www.warrenton-mo.org/ +Missouri,Franklin County,Washington,https://washmo.gov/ +Missouri,St. Louis County,Webster Groves,http://www.webstergroves.org +Missouri,St. Charles County,Wentzville,http://wentzvillemo.org/ +Missouri,Howell County,West Plains,https://www.westplains.gov +Missouri,St. Louis County,Wildwood,http://www.cityofwildwood.com +Montana,Deer Lodge County,Anaconda,http://adlc.us +Montana,Fallon County,Baker,https://www.bakermontana.us/ +Montana,Gallatin County,Belgrade,http://www.ci.belgrade.mt.us/ +Montana,Cascade County,Belt,https://www.beltmontana.com/ +Montana,Chouteau County,Big Sandy,http://townofbigsandy.com/ +Montana,Sweet Grass County,Big Timber,http://www.cityofbigtimber.com/ +Montana,Yellowstone County,Billings,https://www.billingsmt.gov/ +Montana,Gallatin County,Bozeman,http://www.bozeman.net/ +Montana,Glacier County,Browning,http://www.browningmontana.com/ +Montana,Silver Bow County,Butte,https://www.co.silverbow.mt.us/ +Montana,Cascade County,Cascade,http://www.cascademontana.com/ +Montana,Liberty County,Chester,https://chester-montana.com/ +Montana,Blaine County,Chinook,http://cityofchinook.com/ +Montana,Teton County,Choteau,https://choteaumt.org/ +Montana,McCone County,Circle,https://www.visitmt.com/places-to-go/cities-and-towns/circle.html +Montana,Rosebud County,Colstrip,http://www.cityofcolstrip.com/ +Montana,Flathead County,Columbia Falls,http://www.cityofcolumbiafalls.org +Montana,Stillwater County,Columbus,http://townofcolumbus.com/ +Montana,Pondera County,Conrad,http://cityofconrad.com/ +Montana,Glacier County,Cut Bank,http://cityofcutbank.org +Montana,Ravalli County,Darby,http://www.darbymt.net/ +Montana,Beaverhead County,Dillon,http://www.dillonmt.org +Montana,Teton County,Dutton,https://townofdutton.com/ +Montana,Lewis and Clark County,East Helena,http://www.easthelenamt.us +Montana,Madison County,Ennis,http://www.ennismontana.org/ +Montana,Lincoln County,Eureka,http://www.eureka-mt.gov +Montana,Richland County,Fairview,http://www.midrivers.com/~fairview/ +Montana,Rosebud County,Forsyth,http://www.forsythmt.com/ +Montana,Chouteau County,Fort Benton,http://www.fortbenton.com +Montana,Valley County,Glasgow,https://www.cityofglasgowmt.com/ +Montana,Dawson County,Glendive,http://www.cityofglendive.us/ +Montana,Cascade County,Great Falls,https://greatfallsmt.net/ +Montana,Ravalli County,Hamilton,http://www.cityofhamilton.net +Montana,Big Horn County,Hardin,http://www.hardinmt.com/ +Montana,Blaine County,Harlem,http://www.cityofharlemmontana.com +Montana,Hill County,Havre,http://ci.havre.mt.us +Montana,Tenmile Creek (Lewis and Clark County,Helena,http://www.helenamt.gov +Montana,Sanders County,Hot Springs,https://townofhotspringsmt.com/ +Montana,Flathead County,Kalispell,https://www.kalispell.com/ +Montana,Yellowstone County,Laurel,http://laurel.mt.gov/ +Montana,Fergus County,Lewistown,http://www.cityoflewistown.com +Montana,Lincoln County,Libby,http://cityoflibby.com +Montana,Park County,Livingston,https://www.livingstonmontana.org/ +Montana,Sheridan County,Medicine Lake,http://www.medicinelakemt.com +Montana,Custer County,Miles City,http://milescity-mt.org/ +Montana,Missoula County,Missoula,http://ci.missoula.mt.us +Montana,Sanders County,Plains,http://www.plainsmontana.com/ +Montana,Lake County,Polson,http://www.cityofpolson.com +Montana,Carbon County,Red Lodge,https://www.cityofredlodge.net/ +Montana,Lake County,Ronan,http://cityofronan.org +Montana,Phillips County,Saco,http://www.sacomontana.net +Montana,Daniels County,Scobey,https://cityofscobey.com/ +Montana,Toole County,Shelby,http://shelbymt.com/ +Montana,Richland County,Sidney,http://www.cityofsidneymt.com/ +Montana,Lake County,St. Ignatius,http://townofstignatius.com +Montana,Ravalli County,Stevensville,http://www.townofstevensville.com +Montana,Mineral County,Superior,https://townofsuperiormontana.org/ +Montana,Prairie County,Terry,https://townofterry.com/ +Montana,Sanders County,Thompson Falls,https://thompsonfalls.org/ +Montana,Gallatin County,Three Forks,http://www.threeforksmontana.us +Montana,Broadwater County,Townsend,http://www.townsendmt.com/ +Montana,Lincoln County,Troy,http://cityoftroymontana.com +Montana,Pondera County,Valier,https://www.townofvalier.com/ +Montana,Gallatin County,West Yellowstone,http://www.townofwestyellowstone.com +Montana,Flathead County,Whitefish,http://www.cityofwhitefish.org +Montana,Jefferson County,Whitehall,http://townofwhitehall.org/ +Montana,Petroleum County,Winnett,http://localtown.us/winnett-mt/ +Montana,Roosevelt County,Wolf Point,http://ci.wolf-point.mt.us/ +Nebraska,Adams Township,Adams,http://www.ci.adams.ne.us +Nebraska,Brown County,Ainsworth,https://cityofainsworth.com/ +Nebraska,Boone County,Albion,http://www.ci.albion.ne.us/ +Nebraska,Thayer County,Alexandria,http://www.alexandriane.com/ +Nebraska,Box Butte County,Alliance,http://www.cityofalliance.net/ +Nebraska,Harlan County,Alma,https://www.almacity.com/ +Nebraska,Cass County,Alvo,http://www.AlvoNebraska.com +Nebraska,Furnas County,Arapahoe,http://www.arapahoenebraska.com/ +Nebraska,Saunders County,Ashland,http://www.ashland-ne.com/ +Nebraska,Holt County,Atkinson,http://www.atkinsonne.com/ +Nebraska,Nemaha County,Auburn,http://auburn.ne.gov/ +Nebraska,Hamilton County,Aurora,http://www.cityofaurora.org/ +Nebraska,Cass County,Avoca,http://www.AvocaNebraska.com +Nebraska,Rock County,Bassett,https://bassettnebr.com/ +Nebraska,Gage County,Beatrice,https://www.beatrice.ne.gov/ +Nebraska,Seward County,Bee,https://www.villageofbee.com/ +Nebraska,Cuming County,Beemer,http://www.ci.beemer.ne.us +Nebraska,Sarpy County,Bellevue,http://www.bellevue.net/ +Nebraska,Savannah Township,Bellwood,http://www.bellwoodnebraska.com/ +Nebraska,Dundy County,Benkelman,https://www.benkelmanusa.com/ +Nebraska,Lancaster County,Bennet,http://lancaster.ne.gov/bennet/ +Nebraska,Douglas County,Bennington,https://benningtonne.com/ +Nebraska,Berwyn Township,Berwyn,http://www.berwynne.org +Nebraska,Washington County,Blair,https://www.blairnebraska.org/ +Nebraska,Webster County,Blue Hill,http://bluehillne.com/ +Nebraska,Gage County,Blue Springs,http://www.bluespringsne.com/ +Nebraska,Douglas County,Boys Town,http://www.boystown.org +Nebraska,Oak Creek Township,Brainard,http://www.brainardnebraska.com +Nebraska,Morrill County,Bridgeport,http://cityofbport.com +Nebraska,Custer County,Broken Bow,http://www.cityofbrokenbow.org/ +Nebraska,Nemaha County,Brownville,http://www.brownville-ne.com/ +Nebraska,Keith County,Brule,http://www.ci.brule.ne.us +Nebraska,Garfield County,Burwell,http://www.burwellonline.com/ +Nebraska,Boyd County,Butte,http://www.buttenebraska.com/ +Nebraska,Delight Township,Callaway,http://www.callaway-ne.com/ +Nebraska,Furnas County,Cambridge,http://www.cambridgene.org/ +Nebraska,Cass County,Cedar Creek,http://cedarcreeknebraska.com +Nebraska,Boone County,Cedar Rapids,http://cedarrapidsne.com/ +Nebraska,Knox County,Center,http://www.centerne.com/ +Nebraska,Merrick County,Central City,https://www.cc-ne.com/ +Nebraska,Dawes County,Chadron,http://chadron-nebraska.com/ +Nebraska,Deuel County,Chappell,http://www.chappellne.org/ +Nebraska,Thayer County,Chester,http://www.ChesterNE.com +Nebraska,Clay County,Clay Center,https://claycenterne.com/ +Nebraska,Cedar County,Coleridge,http://www.coleridge-ne.com/ +Nebraska,Columbus Township,Columbus,http://www.columbusne.us/ +Nebraska,Comstock Township,Comstock,http://www.comstock-ne.com/ +Nebraska,Dawson County,Cozad,https://cozadnebraska.net/ +Nebraska,Dawes County,Crawford,http://www.crawfordnebraska.net/ +Nebraska,Knox County,Creighton,http://www.creighton.org/ +Nebraska,Saline County,Crete,http://www.crete.ne.gov +Nebraska,Knox County,Crofton,http://city-of-crofton.com +Nebraska,Frontier County,Curtis,https://www.curtisnebraska.com/ +Nebraska,Dakota County,Dakota City,http://dakotacity.net +Nebraska,Lancaster County,Davey,http://lancaster.ne.gov/davey/ +Nebraska,Franklin Township,David City,http://davidcityne.com/ +Nebraska,Saline County,De Witt,http://www.dewitt.ne.gov +Nebraska,Lancaster County,Denton,http://lancaster.ne.gov/denton/ +Nebraska,Webster Township,Dodge,http://www.ci.dodge.ne.us/ +Nebraska,Hall County,Doniphan,https://doniphanne.com/ +Nebraska,Otoe County,Douglas,https://www.villageofdouglas.com/ +Nebraska,Butler Township,Duncan,http://www.villageofduncan.com/ +Nebraska,Cass County,Eagle,https://EagleNebraska.com +Nebraska,Clay County,Edgar,http://www.ci.edgar.ne.us/ +Nebraska,Antelope County,Elgin,https://sites.google.com/view/wwwelginnebraskaorg/home +Nebraska,Cass County,Elmwood,http://www.ElmwoodNebraska.com +Nebraska,Gosper County,Elwood,http://www.elwoodnebraska.com/ +Nebraska,Dixon County,Emerson,https://emerson-ne.com/ +Nebraska,Frontier County,Eustis,https://www.eustisnebraska.org/ +Nebraska,Fillmore County,Exeter,http://www.ci.exeter.ne.us/general.htm +Nebraska,Jefferson County,Fairbury,http://www.fairburyne.org +Nebraska,Richardson County,Falls City,http://www.fallscityonline.com/ +Nebraska,Lancaster County,Firth,http://www.firth.nebraska.gov +Nebraska,Franklin County,Franklin,http://www.franklinnebraska.com/ +Nebraska,Dodge County,Fremont,http://fremontne.gov/ +Nebraska,Saline County,Friend,http://www.ci.friend.ne.us/ +Nebraska,Fullerton Township,Fullerton,http://www.fullerton-ne.com/ +Nebraska,Fillmore County,Geneva,http://www.genevane.org/ +Nebraska,Genoa Township,Genoa,http://www.ci.genoa.ne.us/ +Nebraska,Scotts Bluff County,Gering,http://www.gering.org/ +Nebraska,Buffalo County,Gibbon,http://www.cityofgibbon.org/ +Nebraska,Sheridan County,Gordon,https://www.gordon-ne.us/ +Nebraska,Dawson County,Gothenburg,http://www.ci.gothenburg.ne.us/ +Nebraska,Hall County,Grand Island,http://www.grand-island.com/ +Nebraska,Perkins County,Grant,http://www.grantnebraska.com/ +Nebraska,Greeley County,Greeley Center,http://www.greeleyne.com/ +Nebraska,Cass County,Greenwood,http://www.GreenwoodNebraska.com +Nebraska,Sarpy County,Gretna,http://www.gretnane.org/ +Nebraska,Cedar County,Hartington,https://www.ci.hartington.ne.us/ +Nebraska,Clay County,Harvard,https://www.harvardnebraska.com/ +Nebraska,Adams County,Hastings,http://cityofhastings.org +Nebraska,Hayes County,Hayes Center,https://hayescountyne.com/ +Nebraska,Sherman County,Hazard,http://www.hazardnebraska.com +Nebraska,Thayer County,Hebron,http://www.hebronnebraska.us +Nebraska,York County,Henderson,https://www.cityofhenderson.org +Nebraska,Lancaster County,Hickman,http://www.hickman.ne.gov/ +Nebraska,Franklin County,Hildreth,https://villageofhildreth.com/ +Nebraska,Phelps County,Holdrege,http://www.cityofholdrege.org/ +Nebraska,Colfax County,Howells,http://www.ci.howells.ne.us/ +Nebraska,Platte County,Humphrey,https://www.cityofhumphrey.com +Nebraska,Chase County,Imperial,http://www.imperial-ne.com +Nebraska,Brown County,Johnstown,http://www.co.brown.ne.us/johnst.htm +Nebraska,Buffalo County,Kearney,http://www.cityofkearney.org +Nebraska,Kimball County,Kimball,http://www.kimballne.org/ +Nebraska,Sarpy County,La Vista,http://cityoflavista.org/ +Nebraska,Cedar County,Laurel,https://laurelne.com/ +Nebraska,Colfax County,Leigh,https://www.cityofleigh.com/ +Nebraska,Dawson County,Lexington,http://www.cityoflex.com/ +Nebraska,Gage County,Lincoln,http://www.lincoln.ne.gov/ +Nebraska,Platte Township,Linwood,http://www.villageoflinwood.com/ +Nebraska,Brown County,Long Pine,http://www.cityoflongpine.org/ +Nebraska,Cass County,Louisville,https://www.louisvillenebraska.com +Nebraska,Sherman County,Loup City,http://www.loupcity.com/ +Nebraska,Burt County,Lyons,https://lyonscity.nebraska.gov/ +Nebraska,Madison County,Madison,http://madison-ne.com/ +Nebraska,Lancaster County,Malcolm,http://www.malcolm.ne.gov +Nebraska,Cass County,Manley,https://ManleyNebraska.com +Nebraska,Red Willow County,McCook,http://www.cityofmccook.com +Nebraska,York County,McCool Junction,http://www.mccooljunction-ne.com/ +Nebraska,Marietta Township,Mead,http://www.meadnebraska.net/ +Nebraska,Seward County,Milford,http://www.milfordne.gov/ +Nebraska,Scotts Bluff County,Minatare,http://cityofminatare.com/ +Nebraska,Kearney County,Minden,http://www.mindennebraska.org/ +Nebraska,Scotts Bluff County,Mitchell,http://www.mitchellcity.net +Nebraska,Scotts Bluff County,Morrill,http://www.villageofmorrill.com +Nebraska,Hooker County,Mullen,http://www.mullennebraska.org/ +Nebraska,Cass County,Murdock,http://www.MurdockNebraska.com +Nebraska,Cass County,Murray,http://www.MurrayNebraska.com +Nebraska,Otoe County,Nebraska City,http://nebraskacityne.gov +Nebraska,Cass County,Nehawka,http://www.NehawkaNebraska.com +Nebraska,Antelope County,Neligh,http://www.neligh.org +Nebraska,Nuckolls County,Nelson,http://www.cityofnelson.com/ +Nebraska,Madison County,Newman Grove,http://www.ci.newman-grove.ne.us/index.asp +Nebraska,Knox County,Niobrara,http://www.niobrarane.com/ +Nebraska,Madison County,Norfolk,http://www.ci.norfolk.ne.us/ +Nebraska,Lincoln County,North Platte,http://www.ci.north-platte.ne.us +Nebraska,Burt County,Oakland,http://www.ci.oakland.ne.us/ +Nebraska,Gage County,Odell,http://odell-nebraska.us +Nebraska,Keith County,Ogallala,http://www.ogallala-ne.gov/ +Nebraska,Franklin Township,Ohiowa,https://www.ci.ohiowa.ne.us/ +Nebraska,Douglas County,Omaha,http://www.cityofomaha.org +Nebraska,Holt County,O'Neill,http://www.cityofoneillnebraska.com/ +Nebraska,Valley County,Ord,http://www.ordnebraska.com/ +Nebraska,Polk County,Osceola,http://osceolanebraska.com/ +Nebraska,Garden County,Oshkosh,https://www.oshkoshnebraska.com/ +Nebraska,Pierce County,Osmond,https://www.ci.osmond.ne.us/ +Nebraska,Lancaster County,Panama,http://lancaster.ne.gov/panama/ +Nebraska,Sarpy County,Papillion,http://www.papillion.org +Nebraska,Pawnee County,Pawnee City,http://www.pawneecity.com/ +Nebraska,Nemaha County,Peru,http://www.perunebraska.org +Nebraska,Pierce County,Pierce,https://piercenebraska.com/ +Nebraska,Pierce County,Plainview,http://www.plainview-ne.com/ +Nebraska,Cass County,Plattsmouth,http://www.plattsmouth.org/ +Nebraska,Dixon County,Ponca,http://www.ci.ponca.ne.us/ +Nebraska,Douglas County,Ralston,http://cityofralston.com/ +Nebraska,Cedar County,Randolph,http://www.ci.randolph.ne.us/ +Nebraska,Buffalo County,Ravenna,http://www.myravenna.com/ +Nebraska,Lancaster County,Raymond,http://lancaster.ne.gov/raymond/ +Nebraska,Webster County,Red Cloud,http://www.visitredcloud.com/ +Nebraska,Reading Township,Rising City,http://www.risingcity.com +Nebraska,Buffalo County,Riverdale,http://www.68870.com +Nebraska,Sheridan County,Rushville,https://rushvillene.com/ +Nebraska,Colfax County,Schuyler,https://schuylernebraska.net// +Nebraska,Scotts Bluff County,Scottsbluff,http://www.scottsbluff.org/ +Nebraska,Dodge County,Scribner,https://www.scribner-ne.gov +Nebraska,Seward County,Seward,http://www.cityofsewardne.com/ +Nebraska,Polk County,Shelby,http://www.ci.shelby.ne.us/ +Nebraska,Buffalo County,Shelton,http://villageofshelton.com/ +Nebraska,Cheyenne County,Sidney,http://www.cityofsidney.org +Nebraska,Cass County,South Bend,http://SouthBendNebraska.com +Nebraska,Dakota County,South Sioux City,http://www.southsiouxcity.org/ +Nebraska,Boyd County,Spencer,http://www.spencerne.net/ +Nebraska,Sarpy County,Springfield,http://www.SpringfieldNebraska.com/ +Nebraska,Keya Paha County,Springview,http://www.springview-ne.com/ +Nebraska,Boone County,St. Edward,https://stedwardne.com/ +Nebraska,Howard County,St. Paul,http://www.stpaulnebraska.com/ +Nebraska,Stanton County,Stanton,http://www.stanton.net/ +Nebraska,Logan County,Stapleton,https://www.stapleton-ne.com/ +Nebraska,Johnson County,Sterling,http://www.ci.sterling.ne.us/ +Nebraska,Polk County,Stromsburg,http://www.stromsburgnebraska.com/ +Nebraska,Nuckolls County,Superior,https://cityofsuperior.org/ +Nebraska,Otoe County,Syracuse,http://www.syracusene.com/ +Nebraska,Loup County,Taylor,https://www.taylorne.com/ +Nebraska,Johnson County,Tecumseh,http://www.tecumsehne.com +Nebraska,Burt County,Tekamah,http://www.tekamah.net/ +Nebraska,Thomas County,Thedford,https://thedfordnebraska.net/ +Nebraska,Hitchcock County,Trenton,http://www.villageoftrenton.net/ +Nebraska,Logan Township,Uehling,http://www.uehlingne.org +Nebraska,Otoe County,Unadilla,http://www.UnadillaNebraska.com +Nebraska,Cass County,Union,http://www.UnionNebraska.com +Nebraska,Cherry County,Valentine,http://www.heartcity.com/ +Nebraska,Douglas County,Valley,http://www.valleyne.org/ +Nebraska,Knox County,Verdigre,http://www.verdigre.org +Nebraska,Saunders County,Wahoo,http://www.wahoo.ne.us/ +Nebraska,Dixon County,Wakefield,http://www.ci.wakefield.ne.us/ +Nebraska,Douglas County,Waterloo,https://www.waterloone.com/ +Nebraska,Lancaster County,Waverly,http://www.citywaverly.com/ +Nebraska,Wayne County,Wayne,http://www.cityofwayne.org/ +Nebraska,Cass County,Weeping Water,http://WeepingWaterNebraska.com +Nebraska,Cuming County,West Point,http://www.ci.west-point.ne.us/ +Nebraska,Chapman Township,Weston,http://www.weston.ne.us/ +Nebraska,Saline County,Wilber,http://www.wilberchamberofcommerce.com/ +Nebraska,Cuming County,Wisner,http://www.ci.wisner.ne.us +Nebraska,Hall County,Wood River,http://woodriverne.com/ +Nebraska,Gage County,Wymore,http://www.wymorebluesprings.com +Nebraska,Cedar County,Wynot,http://www.wynotnebraska.com/ +Nebraska,York County,York,https://www.cityofyork.net// +Nebraska,Union Township,Yutan,http://www.cityofyutan.com +Nevada,Clark County,Boulder City,http://www.bcnv.org +Nevada,Lincoln County,Caliente,http://www.cityofcaliente.com/ +Nevada,Elko County,Carlin,http://www.explorecarlinnv.com +Nevada,Elko County,Carson City,http://www.carson.org/home +Nevada,Elko County,Elko,http://www.ci.elko.nv.us +Nevada,White Pine County,Ely,https://www.cityofelynv.gov/ +Nevada,Churchill County,Fallon,http://www.cityoffallon.com +Nevada,Lyon County,Fernley,http://www.cityoffernley.org +Nevada,Clark County,Henderson,http://www.cityofhenderson.com +Nevada,Pershing County,Lovelock,http://www.cityoflovelock.com +Nevada,Clark County,Mesquite,http://www.Mesquitenv.gov +Nevada,Clark County,North Las Vegas,http://www.CityOfNorthLasVegas.com +Nevada,Regional Transportation Commission of Washoe County,Reno,http://reno.gov +Nevada,Regional Transportation Commission of Washoe County,Sparks,http://cityofsparks.us +Nevada,Elko County,West Wendover,http://www.westwendovercity.com/ +Nevada,Humboldt County,Winnemucca,http://www.winnemuccacity.org/ +Nevada,Lyon County,Yerington,http://www.yerington.net +New Hampshire,Sullivan County,Acworth,http://acworthnh.net +New Hampshire,Carroll County,Albany,http://www.albanynh.org +New Hampshire,Grafton County,Alexandria,http://www.alexandrianh.com +New Hampshire,Merrimack County,Allenstown,http://www.allenstownnh.gov +New Hampshire,Cheshire County,Alstead,http://www.alsteadnh.org +New Hampshire,Belknap County,Alton,http://www.alton.nh.gov +New Hampshire,Hillsborough County,Amherst,http://www.amherstnh.gov +New Hampshire,Merrimack County,Andover,http://andover-nh.gov +New Hampshire,Hillsborough County,Antrim,http://www.antrimnh.org +New Hampshire,Grafton County,Ashland,http://ashlandnh.org +New Hampshire,Rockingham County,Atkinson,http://www.town-atkinsonnh.com +New Hampshire,Rockingham County,Auburn,http://www.auburnnh.us +New Hampshire,Belknap County,Barnstead,http://www.barnstead.org +New Hampshire,Strafford County,Barrington,http://www.barrington.nh.gov +New Hampshire,Carroll County,Bartlett,http://www.townofbartlettnh.org +New Hampshire,Grafton County,Bath,http://www.bath-nh.org +New Hampshire,Hillsborough County,Bedford,http://www.bedfordnh.org +New Hampshire,Belknap County,Belmont,http://www.belmontnh.org +New Hampshire,Hillsborough County,Bennington,http://www.townofbennington.com +New Hampshire,Grafton County,Benton,http://www.tobentonnh.org +New Hampshire,Coös County,Berlin,http://www.berlinnh.gov +New Hampshire,Grafton County,Bethlehem,http://www.bethlehemnh.org +New Hampshire,Merrimack County,Boscawen,http://www.townofboscawen.org +New Hampshire,Merrimack County,Bow,http://www.bownh.gov +New Hampshire,Merrimack County,Bradford,http://www.bradfordnh.org +New Hampshire,Rockingham County,Brentwood,http://www.brentwoodnh.gov +New Hampshire,Grafton County,Bridgewater,http://www.bridgewater-nh.com +New Hampshire,Grafton County,Bristol,http://www.townofbristolnh.org +New Hampshire,Carroll County,Brookfield,http://www.brookfieldnh.org +New Hampshire,Hillsborough County,Brookline,http://brooklinenh.us +New Hampshire,Grafton County,Campton,http://www.camptonnh.org +New Hampshire,Grafton County,Canaan,http://www.canaannh.org +New Hampshire,Rockingham County,Candia,http://www.candianh.org +New Hampshire,Merrimack County,Canterbury,http://www.canterbury-nh.org +New Hampshire,Coös County,Carroll,https://carrollnh.org/ +New Hampshire,Belknap County,Center Harbor,http://www.centerharbornh.org +New Hampshire,Sullivan County,Charlestown,http://www.charlestown-nh.gov +New Hampshire,Carroll County,Chatham,http://chathamnh.org +New Hampshire,Rockingham County,Chester,http://www.chesternh.org +New Hampshire,Cheshire County,Chesterfield,http://www.chesterfield.nh.gov +New Hampshire,Merrimack County,Chichester,http://www.chichesternh.org +New Hampshire,Sullivan County,Claremont,http://www.claremontnh.com +New Hampshire,Coös County,Colebrook,http://www.colebrooknh.org +New Hampshire,Coös County,Columbia,http://www.columbianh.org +New Hampshire,Merrimack County,Concord,http://www.concordnh.gov +New Hampshire,Carroll County,Conway,http://www.conwaynh.org +New Hampshire,Sullivan County,Cornish,http://www.cornishnh.net +New Hampshire,Sullivan County,Croydon,http://croydon-nh.com +New Hampshire,Coös County,Dalton,http://townofdalton.com +New Hampshire,Merrimack County,Danbury,http://www.townofdanburynh.com +New Hampshire,Rockingham County,Danville,http://www.townofdanville.org +New Hampshire,Rockingham County,Deerfield,http://www.townofdeerfieldnh.com +New Hampshire,Hillsborough County,Deering,http://www.deering.nh.us +New Hampshire,Rockingham County,Derry,http://www.derrynh.org +New Hampshire,Grafton County,Dorchester,http://townofdorchester.org +New Hampshire,Strafford County,Dover,http://www.dover.nh.gov +New Hampshire,Cheshire County,Dublin,http://www.townofdublin.org +New Hampshire,Coös County,Dummer,http://dummernh.com +New Hampshire,Merrimack County,Dunbarton,http://www.dunbartonnh.org +New Hampshire,Strafford County,Durham,http://www.ci.durham.nh.us +New Hampshire,Rockingham County,East Kingston,http://www.eknh.org +New Hampshire,Grafton County,Easton,http://easton-nh.org +New Hampshire,Carroll County,Eaton,http://www.eatonnh.org +New Hampshire,Carroll County,Effingham,http://www.effinghamnh.net +New Hampshire,Carroll County,Eidelweiss,http://www.vdoe-nh.org +New Hampshire,Grafton County,Enfield,http://www.enfield.nh.us +New Hampshire,Rockingham County,Epping,http://www.townofepping.com +New Hampshire,Merrimack County,Epsom,http://www.epsomnh.org +New Hampshire,Rockingham County,Exeter,http://www.exeternh.gov +New Hampshire,Strafford County,Farmington,http://www.farmington.nh.us +New Hampshire,Cheshire County,Fitzwilliam,http://www.fitzwilliam-nh.gov +New Hampshire,Hillsborough County,Francestown,http://www.francestownnh.org +New Hampshire,Grafton County,Franconia,http://www.franconianh.org +New Hampshire,Merrimack County,Franklin,http://www.franklinnh.org +New Hampshire,Carroll County,Freedom,http://www.townoffreedom.net +New Hampshire,Rockingham County,Fremont,http://www.fremont.nh.gov +New Hampshire,Belknap County,Gilford,http://www.gilfordnh.org +New Hampshire,Belknap County,Gilmanton,http://www.gilmantonnh.org +New Hampshire,Cheshire County,Gilsum,https://gilsum-nh.gov +New Hampshire,Hillsborough County,Goffstown,http://www.goffstown.com +New Hampshire,Coös County,Gorham,http://www.gorhamnh.org +New Hampshire,Sullivan County,Goshen,http://www.goshennh.org +New Hampshire,Grafton County,Grafton,http://www.townofgraftonnh.com +New Hampshire,Sullivan County,Grantham,http://www.granthamnh.net +New Hampshire,Hillsborough County,Greenfield,http://www.greenfield-nh.gov +New Hampshire,Rockingham County,Greenland,http://www.greenland-nh.com +New Hampshire,Hillsborough County,Greenville,http://www.greenvillenh.org +New Hampshire,Grafton County,Groton,http://www.grotonnh.org +New Hampshire,Rockingham County,Hampstead,http://www.hampsteadnh.us +New Hampshire,Rockingham County,Hampton,http://hamptonnh.gov +New Hampshire,Rockingham County,Hampton Beach,http://www.hamptonbeach.org +New Hampshire,Rockingham County,Hampton Falls,http://www.hamptonfalls.org +New Hampshire,Hillsborough County,Hancock,http://www.hancocknh.org +New Hampshire,Grafton County,Hanover,http://www.hanovernh.org +New Hampshire,Cheshire County,Harrisville,http://www.harrisvillenh.org +New Hampshire,Carroll County,Hart's Location,http://www.hartslocation.com +New Hampshire,Grafton County,Haverhill,http://www.haverhill-nh.com +New Hampshire,Grafton County,Hebron,http://www.hebronnh.org +New Hampshire,Merrimack County,Henniker,http://www.henniker.org +New Hampshire,Merrimack County,Hill,http://www.townofhillnh.org +New Hampshire,Hillsborough County,Hillsborough,http://www.town.hillsborough.nh.us +New Hampshire,Cheshire County,Hinsdale,http://www.town.hinsdale.nh.us +New Hampshire,Grafton County,Holderness,http://www.holderness-nh.gov +New Hampshire,Hillsborough County,Hollis,http://www.hollisnh.org +New Hampshire,Merrimack County,Hooksett,http://www.hooksett.org +New Hampshire,Merrimack County,Hopkinton,http://www.hopkinton-nh.gov +New Hampshire,Hillsborough County,Hudson,http://www.hudsonnh.gov +New Hampshire,Carroll County,Jackson,http://www.jackson-nh.org +New Hampshire,Cheshire County,Jaffrey,http://www.townofjaffrey.com +New Hampshire,Coos County,Jefferson,http://www.jeffersonnh.org +New Hampshire,Cheshire County,Keene,https://keenenh.gov +New Hampshire,Rockingham County,Kensington,http://www.town.kensington.nh.us +New Hampshire,Rockingham County,Kingston,http://www.kingstonnh.org +New Hampshire,Belknap County,Laconia,http://www.cityoflaconianh.org +New Hampshire,Coös County,Lancaster,http://www.lancasternh.org +New Hampshire,Grafton County,Landaff,http://www.landaffnh.org +New Hampshire,Sullivan County,Langdon,http://langdonnh.org +New Hampshire,Grafton County,Lebanon,http://LebanonNH.gov +New Hampshire,Strafford County,Lee,http://www.leenh.org +New Hampshire,Sullivan County,Lempster,http://www.lempsternh.org +New Hampshire,Grafton County,Lincoln,http://www.lincolnnh.org +New Hampshire,Grafton County,Lisbon,http://www.lisbonnh.org +New Hampshire,Hillsborough County,Litchfield,http://www.litchfield-nh.gov +New Hampshire,Grafton County,Littleton,http://www.townoflittleton.org +New Hampshire,Rockingham County,Londonderry,http://www.londonderrynh.org +New Hampshire,Merrimack County,Loudon,http://www.loudonnh.org +New Hampshire,Grafton County,Lyman,http://www.lymannh.org +New Hampshire,Grafton County,Lyme,http://www.lymenh.gov +New Hampshire,Hillsborough County,Lyndeborough,http://town.lyndeborough.nh.us +New Hampshire,Strafford County,Madbury,http://www.townofmadbury.com +New Hampshire,Carroll County,Madison,http://www.madison-nh.org +New Hampshire,Hillsborough County,Manchester,http://www.manchesternh.gov +New Hampshire,Cheshire County,Marlborough,http://www.marlboroughnh.org +New Hampshire,Cheshire County,Marlow,http://www.marlownh.gov +New Hampshire,Hillsborough County,Mason,http://masonnh.us +New Hampshire,Belknap County,Meredith,http://www.meredithnh.org +New Hampshire,Hillsborough County,Merrimack,http://www.merrimacknh.gov +New Hampshire,Strafford County,Middleton,http://www.middletonnh.gov +New Hampshire,Coos County,Milan,http://www.townofmilan.org +New Hampshire,Hillsborough County,Milford,http://www.milford.nh.gov +New Hampshire,Strafford County,Milton,http://www.miltonnh-us.com +New Hampshire,Grafton County,Monroe,http://www.monroenh.org +New Hampshire,Hillsborough County,Mont Vernon,http://www.montvernonnh.us +New Hampshire,Carroll County,Moultonborough,http://www.moultonboroughnh.gov +New Hampshire,Hillsborough County,Nashua,http://www.nashuanh.gov +New Hampshire,Cheshire County,Nelson,http://www.townofnelson.org +New Hampshire,Hillsborough County,New Boston,http://www.newbostonnh.gov +New Hampshire,Rockingham County,New Castle,http://www.newcastlenh.org +New Hampshire,Strafford County,New Durham,http://www.newdurhamnh.us +New Hampshire,Belknap County,New Hampton,http://www.new-hampton.nh.us +New Hampshire,Hillsborough County,New Ipswich,http://www.townofnewipswich.org +New Hampshire,Merrimack County,New London,http://newlondon.nh.gov +New Hampshire,Merrimack County,Newbury,http://www.newburynh.org +New Hampshire,Rockingham County,Newfields,http://www.newfieldsnh.gov +New Hampshire,Rockingham County,Newington,http://www.newington.nh.us +New Hampshire,Rockingham County,Newmarket,http://www.newmarketnh.gov +New Hampshire,Sullivan County,Newport,http://www.newportnh.gov +New Hampshire,Rockingham County,Newton,http://www.newton-nh.gov +New Hampshire,Carroll County,North Conway,http://www.conwaynh.org +New Hampshire,Rockingham County,North Hampton,http://www.northhampton-nh.gov +New Hampshire,Merrimack County,Northfield,http://www.northfieldnh.org +New Hampshire,Coös County,Northumberland,http://www.northumberlandnh.org +New Hampshire,Rockingham County,Northwood,http://www.northwoodnh.org +New Hampshire,Rockingham County,Nottingham,http://www.nottingham-nh.gov +New Hampshire,Grafton County,Orange,http://orangenh.us +New Hampshire,Grafton County,Orford,http://www.orfordnh.us +New Hampshire,Carroll County,Ossipee,http://www.ossipee.org +New Hampshire,Hillsborough County,Pelham,http://www.pelhamweb.com +New Hampshire,Merrimack County,Pembroke,http://www.pembroke-nh.com +New Hampshire,Hillsborough County,Peterborough,http://www.townofpeterborough.com +New Hampshire,Grafton County,Piermont,http://townofpiermontnh.org +New Hampshire,Coös County,Pittsburg,http://www.pittsburg-nh.com +New Hampshire,Merrimack County,Pittsfield,http://www.pittsfieldnh.gov +New Hampshire,Sullivan County,Plainfield,https://www.plainfieldnh.org/ +New Hampshire,Rockingham County,Plaistow,http://www.plaistow.com +New Hampshire,Grafton County,Plymouth,http://www.plymouth-nh.org +New Hampshire,Rockingham County,Portsmouth,http://cityofportsmouth.com +New Hampshire,Coös County,Randolph,http://randolph.nh.gov +New Hampshire,Rockingham County,Raymond,http://www.raymondnh.gov +New Hampshire,Cheshire County,Richmond,http://www.richmond.nh.gov +New Hampshire,Cheshire County,Rindge,http://rindgenh.org +New Hampshire,Strafford County,Rochester,http://www.rochesternh.net +New Hampshire,Strafford County,Rollinsford,http://www.rollinsford.nh.us +New Hampshire,Cheshire County,Roxbury,http://www.roxburynh.org +New Hampshire,Grafton County,Rumney,http://www.rumneynh.org +New Hampshire,Rockingham County,Rye,http://www.town.rye.nh.us +New Hampshire,Rockingham County,Salem,http://www.townofsalemnh.org +New Hampshire,Merrimack County,Salisbury,http://www.salisburynh.org +New Hampshire,Belknap County,Sanbornton,http://www.sanborntonnh.org +New Hampshire,Rockingham County,Sandown,http://www.sandown.us +New Hampshire,Carroll County,Sandwich,http://sandwichnh.org +New Hampshire,Rockingham County,Seabrook,http://www.seabrooknh.info +New Hampshire,Hillsborough County,Sharon,http://www.sharonnh.org +New Hampshire,Coös County,Shelburne,http://www.townofshelburnenh.com +New Hampshire,Strafford County,Somersworth,http://www.somersworth.com +New Hampshire,Rockingham County,South Hampton,http://www.southhamptonnh.org +New Hampshire,Sullivan County,Springfield,http://www.springfieldnh.org +New Hampshire,Coös County,Stark,http://townofstark.com +New Hampshire,Cheshire County,Stoddard,http://www.stoddardnh.org +New Hampshire,Strafford County,Strafford,http://strafford.nh.gov +New Hampshire,Coös County,Stratford,http://www.stratfordnh.org +New Hampshire,Rockingham County,Stratham,http://www.strathamnh.gov +New Hampshire,Grafton County,Sugar Hill,http://www.sugarhillnh.org +New Hampshire,Cheshire County,Sullivan,http://townofsullivannh.com +New Hampshire,Sullivan County,Sunapee,http://www.town.sunapee.nh.us +New Hampshire,Cheshire County,Surry,http://www.surry.nh.gov +New Hampshire,Merrimack County,Sutton,http://www.sutton-nh.org +New Hampshire,Cheshire County,Swanzey,http://www.swanzeynh.gov +New Hampshire,Carroll County,Tamworth,http://www.tamworthnh.org +New Hampshire,Hillsborough County,Temple,http://www.templenh.org +New Hampshire,Grafton County,Thornton,http://www.townofthornton.org +New Hampshire,Belknap County,Tilton,http://www.tiltonnh.org +New Hampshire,Cheshire County,Troy,http://www.troy-nh.us +New Hampshire,Carroll County,Tuftonboro,http://www.tuftonboro.org +New Hampshire,Sullivan County,Unity,http://www.townofunitynh.org +New Hampshire,Carroll County,Wakefield,http://www.wakefieldnh.com +New Hampshire,Cheshire County,Walpole,http://www.walpolenh.us +New Hampshire,Merrimack County,Warner,http://www.warner.nh.us +New Hampshire,Grafton County,Warren,http://warren-nh.com +New Hampshire,Sullivan County,Washington,http://www.washingtonnh.org +New Hampshire,Grafton County,Waterville Valley,http://www.watervillevalley.org +New Hampshire,Hillsborough County,Weare,http://www.weare.nh.gov +New Hampshire,Merrimack County,Webster,http://www.webster-nh.gov +New Hampshire,Grafton County,Wentworth,http://www.wentworth-nh.org +New Hampshire,Cheshire County,Westmoreland,http://www.westmorelandnh.com +New Hampshire,Coös County,Whitefield,http://www.whitefieldnh.org +New Hampshire,Merrimack County,Wilmot,http://www.wilmotnh.org +New Hampshire,Hillsborough County,Wilton,http://www.wiltonnh.gov +New Hampshire,Cheshire County,Winchester,http://www.winchester-nh.gov +New Hampshire,Rockingham County,Windham,http://www.windhamnh.gov +New Hampshire,Hillsborough County,Windsor,http://windsornh.org +New Hampshire,Carroll County,Wolfeboro,http://www.wolfeboronh.us +New Hampshire,Grafton County,Woodstock,http://www.woodstocknh.org +New Jersey,Monmouth County,Aberdeen Township,https://www.aberdeennj.org/ +New Jersey,Atlantic County,Absecon,https://www.abseconnj.gov/ +New Jersey,Burlington County,Alexandria Township,https://www.alexandrianj.gov/ +New Jersey,Camden County,Allamuchy Township,https://allamuchynj.org/ +New Jersey,Bergen County,Allendale,https://www.allendalenj.gov/ +New Jersey,Monmouth County,Allenhurst,https://www.allenhurstnj.org/ +New Jersey,Monmouth County,Allentown,https://www.allentownboronj.com/ +New Jersey,Bergen County,Alloway Township,https://www.allowaytownship.com +New Jersey,Warren County,Alpha,https://www.alphaboronj.org/ +New Jersey,Bergen County,Alpine,http://www.alpinenj07620.org +New Jersey,File:Flag of Sussex County,Andover,http://www.andoverboroughnj.org +New Jersey,File:Flag of Sussex County,Andover Township,https://www.andovertwp.org +New Jersey,Monmouth County,Asbury Park,https://www.cityofasburypark.com +New Jersey,Atlantic County,Atlantic City,https://www.cityofatlanticcity.org/ +New Jersey,Monmouth County,Atlantic Highlands,https://www.ahnj.com +New Jersey,Camden County,Audubon,https://www.audubonnj.com +New Jersey,Camden County,Audubon Park,http://www.audubonparknj.org/ +New Jersey,Cumberland County,Avalon,https://www.avalonboro.net/ +New Jersey,Monmouth County,Avon-by-the-Sea,https://www.avonbytheseanj.com +New Jersey,Cumberland County,Barnegat Light,http://www.barnegatlight.org/ +New Jersey,Middlesex County,Barnegat Township,http://www.barnegat.net +New Jersey,Camden County,Barrington,https://www.barringtonboro.com/ +New Jersey,Burlington County,Bass River Township,http://www.bassriver-nj.org/ +New Jersey,Camden County,Bay Head,https://www.bayheadnj.org +New Jersey,Camden County,Bayonne,https://www.bayonnenj.org/ +New Jersey,Monmouth County,Beach Haven,https://www.beachhaven-nj.gov +New Jersey,Bergen County,Beachwood,https://www.beachwoodusa.com +New Jersey,Camden County,Bedminster,https://www.bedminster.us +New Jersey,Essex County,Belleville,https://www.bellevillenj.org +New Jersey,Camden County,Bellmawr,https://www.bellmawr.com +New Jersey,Monmouth County,Belmar,https://www.belmar.com +New Jersey,Atlantic County,Belvidere,https://www.belviderenj.net/ +New Jersey,Bergen County,Bergenfield,https://www.bergenfield.com +New Jersey,Union County,Berkeley Heights,https://www.berkeleyheights.gov/ +New Jersey,Middlesex County,Berkeley Township,https://www.twp.berkeley.nj.us +New Jersey,Camden County,Berlin,https://www.berlinnj.org +New Jersey,Camden County,Berlin Township,https://www.berlintwp.com +New Jersey,Monmouth County,Bernards Township,https://www.bernards.org +New Jersey,File:Flag of Sussex County,Bernardsville,https://www.bernardsvilleboro.org +New Jersey,File:Flag of Sussex County,Bethlehem Township,https://bethlehemnj.org/ +New Jersey,Burlington County,Beverly,http://www.thecityofbeverly.com/ +New Jersey,Monmouth County,Blairstown,https://www.blairstowntownship.org/ +New Jersey,Monmouth County,Bloomfield,https://www.bloomfieldtwpnj.com +New Jersey,Passaic County,Bloomingdale,http://www.bloomingdalenj.net +New Jersey,Hunterdon County,Bloomsbury,https://www.bloomsburyborough.com/ +New Jersey,Bergen County,Bogota,https://www.bogotaonline.org/ +New Jersey,Morris County,Boonton,https://www.boonton.org +New Jersey,Cumberland County,Boonton Township,https://www.boontontownship.com +New Jersey,Burlington County,Bordentown,https://www.cityofbordentown.com +New Jersey,Burlington County,Bordentown Township,http://www.bordentowntownship.com +New Jersey,Bergen County,Bound Brook,https://www.boundbrook-nj.org/ +New Jersey,Monmouth County,Bradley Beach,https://www.bradleybeachnj.gov +New Jersey,Bergen County,Branchburg,https://www.branchburg.nj.us/ +New Jersey,File:Flag of Sussex County,Branchville,https://www.branchville.us +New Jersey,Camden County,Brick Township,https://www.bricktownship.net/ +New Jersey,Cumberland County,Bridgeton,https://www.cityofbridgeton.com +New Jersey,Somerset County,Bridgewater Township,http://www.bridgewaternj.gov +New Jersey,Monmouth County,Brielle,https://www.briellenj.gov/ +New Jersey,Atlantic County,Brigantine,https://www.brigantinebeach.org/ +New Jersey,Camden County,Brooklawn,https://brooklawn-nj.com/ +New Jersey,Atlantic County,Buena,http://www.buenaboro.org +New Jersey,Atlantic County,Buena Vista Township,https://buenavistanj.com/ +New Jersey,Burlington County,Burlington,https://www.burlingtonnj.us +New Jersey,Burlington County,Burlington Township,http://www.twp.burlington.nj.us +New Jersey,File:Flag of Sussex County,Butler,http://www.butlerborough.com +New Jersey,File:Flag of Sussex County,Byram Township,https://www.byramtwp.org/ +New Jersey,Passaic County,Caldwell,https://www.caldwell-nj.com/ +New Jersey,Hunterdon County,Califon,https://www.califonboro.org/ +New Jersey,Camden County,Camden,http://www.ci.camden.nj.us +New Jersey,Cape May County,Cape May,https://www.capemaycity.com +New Jersey,Bergen County,Cape May Point,https://www.capemaypoint.org/ +New Jersey,Bergen County,Carlstadt,https://www.carlstadtnj.us +New Jersey,Camden County,Carneys Point Township,http://carneyspointtwp.org/ +New Jersey,Middlesex County,Carteret,https://www.carteret.net/ +New Jersey,Bergen County,Cedar Grove,https://www.cedargrovenj.org +New Jersey,Bergen County,Chatham Borough,https://www.chathamborough.org +New Jersey,Bergen County,Chatham Township,https://www.chathamtownship-nj.gov +New Jersey,Camden County,Cherry Hill,https://www.chnj.gov +New Jersey,Camden County,Chesilhurst,https://www.chesilhurstgov.net +New Jersey,Monmouth County,Chester Borough,https://www.chesterborough.org +New Jersey,Atlantic County,Chester Township,https://www.chestertownship.org +New Jersey,Burlington County,Chesterfield Township,https://www.chesterfieldtwpnj.gov/ +New Jersey,Burlington County,Cinnaminson Township,http://www.cinnaminsonnj.org +New Jersey,Union County,Clark,https://www.ourclark.com +New Jersey,Morris County,Clayton,https://www.claytonnj.com +New Jersey,Camden County,Clementon,https://www.clementon-nj.com/ +New Jersey,Bergen County,Cliffside Park,https://www.cliffsideparknj.gov +New Jersey,Passaic County,Clifton,https://www.cliftonnj.org +New Jersey,Hunterdon County,Clinton,https://www.clintonnj.gov/ +New Jersey,Monmouth County,Clinton Township,https://clintontwpnj.gov/ +New Jersey,Bergen County,Closter,https://www.closterboro.com/ +New Jersey,Camden County,Collingswood,http://www.collingswood.com +New Jersey,Monmouth County,Colts Neck Township,https://www.colts-neck.nj.us +New Jersey,Cumberland County,Commercial Township,https://www.commercialtwp.com +New Jersey,Atlantic County,Corbin City,http://www.corbincitynj.com/ +New Jersey,Middlesex County,Cranbury,https://www.cranburytownship.org +New Jersey,Union County,Cranford,https://www.cranfordnj.org +New Jersey,Bergen County,Cresskill,https://www.cresskillboro.com +New Jersey,Monmouth County,Deal,http://www.dealborough.com/ +New Jersey,Cumberland County,Deerfield Township,http://www.deerfieldtownship.org +New Jersey,Burlington County,Delanco Township,http://www.delancotownship.com +New Jersey,Monmouth County,Delaware Township,https://www.delawaretwpnj.org/ +New Jersey,Burlington County,Delran Township,https://www.delrantownship.org +New Jersey,Bergen County,Demarest,https://www.demarestnj.org +New Jersey,Passaic County,Dennis Township,https://www.dennistwp.org +New Jersey,Union County,Denville Township,https://www.denvillenj.org/ +New Jersey,Bergen County,Deptford Township,https://www.deptford-nj.org/ +New Jersey,Bergen County,Dover,https://www.dover.nj.us +New Jersey,Cumberland County,Downe Township,https://www.downetwpnj.org +New Jersey,Bergen County,Dumont,https://www.dumontnj.gov/ +New Jersey,Middlesex County,Dunellen,https://www.dunellen-nj.gov/ +New Jersey,Monmouth County,Eagleswood Township,https://www.eagleswoodtwpnj.us/ +New Jersey,Camden County,East Amwell Township,https://www.eastamwelltownship.com +New Jersey,Middlesex County,East Brunswick,https://www.eastbrunswick.org/ +New Jersey,Camden County,East Greenwich Township,https://www.eastgreenwichnj.com/ +New Jersey,Passaic County,East Hanover Township,https://www.easthanovertownship.com +New Jersey,Atlantic County,East Newark,https://www.boroughofeastnewark.com +New Jersey,Passaic County,East Orange,https://www.eastorange-nj.gov/ +New Jersey,Bergen County,East Rutherford,https://www.eastrutherfordnj.net/ +New Jersey,Mercer County,East Windsor Township,https://www.east-windsor.nj.us/ +New Jersey,Cumberland County,Eastampton Township,https://www.eastampton.com +New Jersey,Monmouth County,Eatontown,https://www.eatontownnj.com +New Jersey,Bergen County,Edgewater,https://www.edgewaternj.org +New Jersey,Passaic County,Edgewater Park,http://www.edgewaterpark-nj.com +New Jersey,Middlesex County,Edison,https://www.edisonnj.org/ +New Jersey,Atlantic County,Egg Harbor City,http://www.eggharborcity.org +New Jersey,Atlantic County,Egg Harbor Township,https://www.ehtgov.org +New Jersey,Union County,Elizabeth,https://www.elizabethnj.org/ +New Jersey,Union County,Elk Township,https://www.elktownshipnj.gov +New Jersey,Burlington County,Elmer,https://www.elmerboroughnj.com +New Jersey,Bergen County,Elmwood Park,https://www.elmwoodparknj.us/ +New Jersey,Hunterdon County,Elsinboro Township,https://www.elsinborotownship.com/ +New Jersey,Bergen County,Emerson,https://www.emersonnj.org/ +New Jersey,Bergen County,Englewood,http://www.cityofenglewood.org +New Jersey,Bergen County,Englewood Cliffs,http://www.englewoodcliffsnj.org/ +New Jersey,Monmouth County,Englishtown,https://englishtownnj.com/ +New Jersey,File:Flag of Sussex County,Essex Fells,http://www.essexfellsboro.com/ +New Jersey,Atlantic County,Estell Manor,http://www.estellmanor.org/ +New Jersey,Middlesex County,Evesham Township,https://evesham-nj.org/ +New Jersey,Mercer County,Ewing Township,https://www.ewingnj.org +New Jersey,Monmouth County,Fair Haven,https://www.fairhavennj.org +New Jersey,Bergen County,Fair Lawn,https://www.fairlawn.org +New Jersey,File:Flag of Sussex County,Fairfield Township,https://www.fairfieldnj.org/ +New Jersey,Cumberland County,Fairfield Township,http://www.fairfieldtownshipnj.org/ +New Jersey,Bergen County,Fairview,https://www.fairviewborough.com +New Jersey,Union County,Fanwood,https://www.fanwoodnj.org/ +New Jersey,Somerset County,Far Hills,https://www.farhillsnj.org/ +New Jersey,Monmouth County,Farmingdale,http://www.farmingdaleborough.org/ +New Jersey,Hunterdon County,Flemington,https://www.historicflemington.com +New Jersey,Monmouth County,Florence Township,https://www.florence-nj.gov/ +New Jersey,Bergen County,Florham Park,https://www.fpboro.net/ +New Jersey,Atlantic County,Folsom,http://www.folsomborough.com/ +New Jersey,Bergen County,Fort Lee,https://www.fortleenj.org/ +New Jersey,File:Flag of Sussex County,Frankford Township,https://www.frankfordtownship.org/ +New Jersey,File:Flag of Sussex County,Franklin,https://www.franklinborough.org/ +New Jersey,Bergen County,Franklin Lakes,https://www.franklinlakes.org/ +New Jersey,Somerset County,Franklin Township,https://www.franklintwpnj.org +New Jersey,Bergen County,Franklin Township,https://www.franklintownship.com +New Jersey,Bergen County,Franklin Township,https://www.franklin-twp.org +New Jersey,Cumberland County,Franklin Township,https://www.franklintwpwarren.org/ +New Jersey,File:Flag of Sussex County,Fredon Township,https://www.fredonnj.gov/ +New Jersey,Monmouth County,Freehold Borough,https://www.freeholdboroughnj.gov/ +New Jersey,Monmouth County,Freehold Township,https://www.twp.freehold.nj.us +New Jersey,File:Flag of Sussex County,Frelinghuysen Township,https://www.frelinghuysen-nj.us/ +New Jersey,Burlington County,Frenchtown,https://www.frenchtownboro.com/ +New Jersey,Atlantic County,Galloway Township,https://www.gtnj.org +New Jersey,Bergen County,Garfield,https://www.garfieldnj.org +New Jersey,Union County,Garwood,https://www.garwood.org +New Jersey,Camden County,Gibbsboro,https://www.gibbsborotownhall.com +New Jersey,Union County,Glassboro,https://www.glassboro.org/ +New Jersey,Monmouth County,Glen Gardner,https://www.glengardner.org/ +New Jersey,Essex County,Glen Ridge,https://www.glenridgenj.org +New Jersey,Bergen County,Glen Rock,https://www.glenrocknj.net/ +New Jersey,Camden County,Gloucester City,http://www.cityofgloucester.org/ +New Jersey,Camden County,Gloucester Township,https://www.glotwp.com +New Jersey,Bergen County,Green Brook Township,https://www.greenbrooktwp.org +New Jersey,File:Flag of Sussex County,Green Township,http://www.greentwp.com +New Jersey,Cumberland County,Greenwich Township,https://www.greenwichtownship.org/ +New Jersey,Bergen County,Greenwich Township,https://www.greenwichtwp.com/ +New Jersey,Cumberland County,Greenwich Township,https://www.historicgreenwichnj.org +New Jersey,Bergen County,Guttenberg,https://www.guttenbergnj.org +New Jersey,Bergen County,Hackensack,https://www.hackensack.org +New Jersey,Warren County,Hackettstown,https://www.hackettstown.net +New Jersey,Camden County,Haddon Heights,https://www.haddonhts.com +New Jersey,Camden County,Haddon Township,https://www.haddontwp.com/ +New Jersey,Camden County,Haddonfield,https://www.haddonfieldnj.org/ +New Jersey,Bergen County,Hainesport Township,https://www.hainesporttownship.com +New Jersey,Passaic County,Haledon,https://www.haledonboronj.com +New Jersey,File:Flag of Sussex County,Hamburg,https://www.hamburgnj.org/ +New Jersey,Middlesex County,Hamilton Township,https://www.hamiltonnj.com/ +New Jersey,Atlantic County,Hamilton Township,https://www.townshipofhamilton.com +New Jersey,Atlantic County,Hammonton,https://www.townofhammonton.org/ +New Jersey,Hunterdon County,Hampton,https://www.hamptonboro.org/ +New Jersey,File:Flag of Sussex County,Hampton Township,https://www.hamptontownshipnj.info/ +New Jersey,Morris County,Hanover Township,https://www.hanovertownship.com +New Jersey,Camden County,Harding Township,https://www.hardingnj.org/ +New Jersey,Hunterdon County,Hardwick Township,https://www.hardwicktwp.com/ +New Jersey,File:Flag of Sussex County,Hardyston Township,https://www.hardyston.com +New Jersey,Atlantic County,Harmony Township,http://www.harmonytwp-nj.gov +New Jersey,Bergen County,Harrington Park,http://www.harringtonparknj.gov/ +New Jersey,Hudson County,Harrison,https://townofharrison.com/ +New Jersey,Union County,Harrison Township,https://www.harrisontwp.us +New Jersey,Bergen County,Harvey Cedars,https://www.harveycedars.org +New Jersey,Bergen County,Hasbrouck Heights,https://hasbrouck-heightsnj.org/ +New Jersey,Bergen County,Haworth,https://www.haworthnj.org +New Jersey,Passaic County,Hawthorne,https://www.hawthornenj.org/ +New Jersey,Monmouth County,Hazlet,https://www.hazlettwp.org +New Jersey,Middlesex County,Helmetta,https://www.helmettaboro.com +New Jersey,File:Flag of Sussex County,High Bridge,https://www.highbridge.org +New Jersey,Middlesex County,Highland Park,https://www.hpboro.com +New Jersey,Monmouth County,Highlands,https://www.highlandsborough.org +New Jersey,Mercer County,Hightstown,https://www.hightstownborough.com +New Jersey,Union County,Hillsborough Township,http://www.hillsborough-nj.org +New Jersey,Bergen County,Hillsdale,https://www.hillsdalenj.org +New Jersey,Bergen County,Hillside,https://www.hillsidenj.us/ +New Jersey,Camden County,Hi-Nella,https://www.hinellaboro.org +New Jersey,Hudson County,Hoboken,https://hobokennj.gov +New Jersey,Bergen County,Ho-Ho-Kus,https://www.hhkborough.com/ +New Jersey,Salem County,Holland Township,https://www.hollandtownshipnj.gov +New Jersey,Monmouth County,Holmdel Township,https://www.holmdeltownship.com/ +New Jersey,File:Flag of Sussex County,Hopatcong,https://www.hopatcong.org +New Jersey,Monmouth County,Hope Township,https://www.hopetwp-nj.us/ +New Jersey,Mercer County,Hopewell,https://www.hopewellboro-nj.us/ +New Jersey,Bergen County,Hopewell Township,https://www.hopewelltwp.org +New Jersey,Cumberland County,Hopewell Township,http://www.hopewelltwp-nj.com +New Jersey,Monmouth County,Howell Township,https://www.twp.howell.nj.us +New Jersey,Cumberland County,Independence Township,http://www.independencenj.com +New Jersey,Monmouth County,Interlaken,https://www.interlakenboro.com +New Jersey,Camden County,Irvington,https://www.irvington.net +New Jersey,Hunterdon County,Island Heights,https://www.islandheightsborough.gov/ +New Jersey,Union County,Jackson Township,https://www.jacksontwpnj.net +New Jersey,Middlesex County,Jamesburg,https://www.jamesburgborough.org/ +New Jersey,Atlantic County,Jefferson Township,https://www.jeffersontownship.net +New Jersey,Hudson County,Jersey City,https://www.jerseycitynj.gov +New Jersey,Monmouth County,Keansburg,https://www.keansburgnj.gov/ +New Jersey,Union County,Kearny,https://www.kearnynj.org +New Jersey,Union County,Kenilworth,https://www.kenilworthborough.com +New Jersey,Monmouth County,Keyport,https://www.keyportonline.com/ +New Jersey,Camden County,Kingwood Township,https://www.kingwoodtownship.com +New Jersey,Burlington County,Kinnelon,https://www.kinnelonboro.org/ +New Jersey,Camden County,Knowlton Township,http://www.knowlton-nj.com +New Jersey,Bergen County,Lacey Township,http://www.laceytownship.org +New Jersey,File:Flag of Sussex County,Lafayette Township,https://www.lafayettetwp.org +New Jersey,Monmouth County,Lake Como,http://www.lakecomonj.org +New Jersey,Bergen County,Lakehurst,https://www.lakehurst-nj.gov/ +New Jersey,Ocean County,Lakewood Township,https://www.lakewoodnj.gov/ +New Jersey,Hunterdon County,Lambertville,https://www.lambertvillenj.org +New Jersey,Camden County,Laurel Springs,https://www.laurelsprings-nj.com +New Jersey,Atlantic County,Lavallette,https://www.lavallette.org +New Jersey,Camden County,Lawnside,https://www.lawnside.net/ +New Jersey,Bergen County,Lawrence Township,https://www.lawrencetwp.com +New Jersey,Cumberland County,Lawrence Township,https://www.lawrencetwpcumberlandnj.com +New Jersey,Hunterdon County,Lebanon,https://www.lebanonboro.com +New Jersey,Cumberland County,Lebanon Township,https://www.lebanontownship.net +New Jersey,Bergen County,Leonia,https://www.leonianj.gov +New Jersey,Bergen County,Liberty Township,https://www.libertytownship.org/ +New Jersey,Bergen County,Lincoln Park,https://www.lincolnpark.org +New Jersey,Union County,Linden,https://linden-nj.gov/ +New Jersey,Camden County,Lindenwold,https://www.lindenwoldnj.gov/ +New Jersey,Atlantic County,Linwood,http://www.linwoodcity.org +New Jersey,Burlington County,Little Egg Harbor Township,http://www.leht.com/ +New Jersey,Passaic County,Little Falls,https://www.lfnj.com/ +New Jersey,Bergen County,Little Ferry,http://www.littleferrynj.org +New Jersey,Monmouth County,Little Silver,https://www.littlesilver.org +New Jersey,Monmouth County,Livingston,https://www.livingstonnj.org/ +New Jersey,Monmouth County,Loch Arbour,https://www.locharbournj.us +New Jersey,Bergen County,Lodi,http://www.lodi-nj.org +New Jersey,Morris County,Logan Township,https://www.logan-twp.org +New Jersey,Monmouth County,Long Beach Township,https://www.longbeachtownship.com +New Jersey,Monmouth County,Long Branch,https://www.visitlongbranch.com/ +New Jersey,Camden County,Long Hill Township,https://www.longhillnj.gov +New Jersey,Atlantic County,Longport,https://www.longportnj.gov/ +New Jersey,Bergen County,Lopatcong Township,https://www.lopatcongtwp.com/ +New Jersey,Monmouth County,Lower Alloways Creek Township,https://www.lowerallowayscreek-nj.gov/ +New Jersey,Hudson County,Lower Township,https://www.townshipoflower.org/ +New Jersey,Monmouth County,Lumberton,https://www.lumbertontwp.com +New Jersey,Bergen County,Lyndhurst,https://www.lyndhurstnj.org +New Jersey,Burlington County,Madison,https://www.rosenet.org/ +New Jersey,Camden County,Magnolia,https://www.magnolia-nj.org/ +New Jersey,Bergen County,Mahwah,https://www.mahwahtwp.org +New Jersey,Monmouth County,Manalapan Township,https://mtnj.org/ +New Jersey,Monmouth County,Manasquan,https://www.manasquan-nj.gov +New Jersey,Middlesex County,Manchester Township,https://www.manchestertwp.com +New Jersey,Salem County,Mannington Township,https://www.manningtontwp.com +New Jersey,Passaic County,Mansfield Township,https://www.mansfieldtwp.com/ +New Jersey,Essex County,Mansfield Township,https://mansfieldtownship-nj.gov/ +New Jersey,Bergen County,Mantoloking,https://www.mantoloking.org +New Jersey,Gloucester County,Mantua Township,https://mantuatownship.com/ +New Jersey,Bergen County,Manville,https://www.manvillenj.org/ +New Jersey,Monmouth County,Maple Shade Township,https://www.mapleshade.com +New Jersey,Essex County,Maplewood,https://www.maplewoodnj.gov/ +New Jersey,Atlantic County,Margate City,https://www.margate-nj.com +New Jersey,Monmouth County,Marlboro Township,https://www.marlboro-nj.gov +New Jersey,Monmouth County,Matawan,https://www.matawanborough.com/ +New Jersey,Cumberland County,Maurice River Township,https://www.mauricerivertwp.org +New Jersey,Bergen County,Maywood,https://www.maywoodnj.com +New Jersey,Passaic County,Medford,https://www.medfordtownship.com +New Jersey,Burlington County,Medford Lakes,https://www.medfordlakes.com +New Jersey,Bergen County,Mendham Borough,https://www.mendhamnj.org +New Jersey,Morris County,Mendham Township,https://www.mendhamtownship.org +New Jersey,Camden County,Merchantville,https://www.merchantvillenj.gov/ +New Jersey,Middlesex County,Metuchen,http://www.metuchennj.org +New Jersey,Atlantic County,Middle Township,https://www.middletownship.com +New Jersey,Middlesex County,Middlesex,https://www.middlesexboro-nj.gov/ +New Jersey,Monmouth County,Middletown Township,http://www.middletownnj.org +New Jersey,Bergen County,Midland Park,https://www.midlandparknj.org/ +New Jersey,Cumberland County,Milford,https://www.milford-nj.us +New Jersey,Hudson County,Millburn,https://www.twp.millburn.nj.us +New Jersey,Atlantic County,Millstone,https://www.millstoneboro.org +New Jersey,Monmouth County,Millstone Township,https://www.millstonenj.gov +New Jersey,Middlesex County,Milltown,https://www.milltownnj.org +New Jersey,Cumberland County,Millville,http://www.millvillenj.gov/ +New Jersey,Hunterdon County,Mine Hill Township,https://www.minehill.com +New Jersey,Monmouth County,Monmouth Beach,https://www.monmouthbeach.us +New Jersey,Middlesex County,Monroe Township,https://www.monroetwp.com +New Jersey,Mercer County,Monroe Township,https://www.monroetownshipnj.org +New Jersey,File:Flag of Sussex County,Montague Township,https://www.montaguenj.org +New Jersey,Bergen County,Montclair,https://www.montclairnjusa.org +New Jersey,Union County,Montgomery Township,https://www.montgomery.nj.us +New Jersey,Bergen County,Montvale,https://www.montvale.org +New Jersey,Bergen County,Montville,https://www.montvillenj.org/ +New Jersey,Bergen County,Moonachie,https://www.moonachie.us +New Jersey,Burlington County,Moorestown,https://www.moorestown.nj.us/ +New Jersey,Cumberland County,Morris Plains,https://www.morrisplainsboro.org/ +New Jersey,Union County,Morris Township,https://www.morristwp.com +New Jersey,Bergen County,Morristown,https://www.townofmorristown.org/ +New Jersey,Monmouth County,Mount Arlington,https://www.mountarlingtonnj.org +New Jersey,Camden County,Mount Ephraim,https://www.mountephraim-nj.com/ +New Jersey,Burlington County,Mount Holly,https://www.twp.mountholly.nj.us/ +New Jersey,Middlesex County,Mount Laurel,https://www.mountlaurel.com +New Jersey,Bergen County,Mount Olive Township,https://www.mountolivetwpnj.org +New Jersey,Atlantic County,Mountain Lakes,https://www.mtnlakes.org +New Jersey,Union County,Mountainside,https://www.mountainside-nj.com +New Jersey,Atlantic County,Mullica Township,https://www.mullicatownship.org +New Jersey,Cumberland County,National Park,https://www.nationalparknj.com/ +New Jersey,Monmouth County,Neptune City,https://www.neptunecitynj.com +New Jersey,Monmouth County,Neptune Township,https://www.neptunetownship.org +New Jersey,File:Flag of Sussex County,Netcong,https://www.netcong.org +New Jersey,Middlesex County,New Brunswick,https://www.cityofnewbrunswick.org +New Jersey,Passaic County,New Hanover Township,https://www.newhanovertwp.com/ +New Jersey,Bergen County,New Milford,https://www.newmilfordboro.com +New Jersey,Union County,New Providence,https://www.newprov.org/ +New Jersey,Essex County,Newark,https://www.newarknj.gov/ +New Jersey,Atlantic County,Newfield,https://www.newfieldborough.org +New Jersey,Sussex County,Newton,https://www.newtontownhall.com/ +New Jersey,Bergen County,North Arlington,https://www.narlington.org +New Jersey,Camden County,North Bergen,https://www.northbergen.org +New Jersey,Middlesex County,North Brunswick,https://www.northbrunswicknj.gov/ +New Jersey,Bergen County,North Caldwell,https://www.northcaldwell.org +New Jersey,Passaic County,North Haledon,https://www.northhaledon.com +New Jersey,File:Flag of Sussex County,North Hanover Township,https://www.northhanovertwp.com/ +New Jersey,Union County,North Plainfield,https://northplainfield-nj.gov/ +New Jersey,File:Flag of Sussex County,North Wildwood,https://www.northwildwood.com +New Jersey,Atlantic County,Northfield,http://www.cityofnorthfield.org +New Jersey,Bergen County,Northvale,https://www.boroughofnorthvale.com +New Jersey,Bergen County,Norwood,https://www.norwoodboro.org +New Jersey,Essex County,Nutley,https://www.nutleynj.org/ +New Jersey,Bergen County,Oakland,https://www.oakland-nj.org +New Jersey,Camden County,Oaklyn,https://www.oaklyn-nj.net +New Jersey,Bergen County,Ocean City,http://www.ocnj.us/ +New Jersey,Monmouth County,Ocean Gate,http://www.oceangatenjgov.com/ +New Jersey,Monmouth County,Ocean Township,http://www.oceantwp.org +New Jersey,Bergen County,Ocean Township,https://www.twpoceannj.gov/ +New Jersey,Monmouth County,Oceanport,https://www.oceanportboro.com +New Jersey,File:Flag of Sussex County,Ogdensburg,https://www.ogdensburgnj.org/ +New Jersey,Middlesex County,Old Bridge Township,https://www.oldbridge.com +New Jersey,Bergen County,Old Tappan,https://www.oldtappan.net +New Jersey,Mercer County,Oldmans Township,https://www.oldmanstownship.com +New Jersey,Bergen County,Oradell,https://www.oradell.org +New Jersey,Bergen County,Orange,http://www.ci.orange.nj.us +New Jersey,Middlesex County,Oxford Township,http://www.oxfordtwpnj.org +New Jersey,Bergen County,Palisades Park,https://www.mypalisadespark.com +New Jersey,Burlington County,Palmyra,https://www.boroughofpalmyra.com +New Jersey,Bergen County,Paramus,https://www.paramusborough.org +New Jersey,Bergen County,Park Ridge,https://www.parkridgeboro.com +New Jersey,Union County,Parsippany–Troy Hills,https://www.parsippany.net +New Jersey,Passaic County,Passaic,https://www.cityofpassaic.com/ +New Jersey,Passaic County,Paterson,https://www.patersonnj.gov +New Jersey,Cumberland County,Paulsboro,https://www.paulsboronj.org/ +New Jersey,Atlantic County,Peapack and Gladstone,http://www.peapackgladstone.org/ +New Jersey,Burlington County,Pemberton,https://www.pembertonborough.us +New Jersey,Cumberland County,Pemberton Township,https://www.pemberton-twp.com +New Jersey,Mercer County,Pennington,https://www.penningtonboro.org +New Jersey,Hunterdon County,Penns Grove,https://www.pennsgrove-nj.org/ +New Jersey,Camden County,Pennsauken Township,http://www.twp.pennsauken.nj.us +New Jersey,Bergen County,Pennsville Township,https://www.pennsville.org +New Jersey,Middlesex County,Pequannock Township,https://www.peqtwp.org/ +New Jersey,Middlesex County,Perth Amboy,https://www.perthamboynj.org/ +New Jersey,Warren County,Phillipsburg,http://www.phillipsburgnj.org +New Jersey,Monmouth County,Pilesgrove Township,http://www.pilesgrovenj.org +New Jersey,Camden County,Pine Beach,http://www.pinebeachborough.us +New Jersey,Camden County,Pine Hill,https://www.pinehillboronj.com +New Jersey,Middlesex County,Piscataway,https://www.piscatawaynj.org +New Jersey,Morris County,Pitman,https://www.pitman.org +New Jersey,Bergen County,Pittsgrove Township,https://www.pittsgrovetownship.com +New Jersey,Union County,Plainfield,https://www.plainfieldnj.gov/ +New Jersey,Middlesex County,Plainsboro Township,https://www.plainsboronj.com/ +New Jersey,Atlantic County,Pleasantville,http://www.pleasantville-nj.org +New Jersey,File:Flag of Sussex County,Plumsted Township,https://www.plumsted.org +New Jersey,Burlington County,Pohatcong Township,http://www.pohatcongtwp.org/ +New Jersey,Monmouth County,Point Pleasant,https://www.ptboro.com +New Jersey,Burlington County,Point Pleasant Beach,https://www.pointpleasantbeach.org +New Jersey,Passaic County,Pompton Lakes,https://www.pomptonlakes-nj.gov +New Jersey,Atlantic County,Port Republic,https://www.portrepublicnj.org/ +New Jersey,Mercer County,Princeton,https://www.princetonnj.gov +New Jersey,Passaic County,Prospect Park,https://www.prospectpark.net +New Jersey,Atlantic County,Quinton Township,http://www.quintonnj.com/ +New Jersey,Union County,Rahway,http://www.cityofrahway.com +New Jersey,Bergen County,Ramsey,https://www.ramseynj.com +New Jersey,Monmouth County,Randolph,https://www.randolphnj.org +New Jersey,File:Flag of Sussex County,Raritan,https://www.raritanboro.org +New Jersey,Union County,Raritan Township,https://www.raritan-township.com +New Jersey,Bergen County,Readington Township,https://www.readingtontwpnj.gov/ +New Jersey,Monmouth County,Red Bank,https://www.redbanknj.org +New Jersey,Bergen County,Ridgefield,https://www.ridgefieldnj.gov/ +New Jersey,Bergen County,Ridgefield Park,https://www.ridgefieldpark.org +New Jersey,Bergen County,Ridgewood,https://www.ridgewoodnj.net/ +New Jersey,Passaic County,Ringwood,http://www.ringwoodnj.net +New Jersey,Bergen County,River Edge,https://www.riveredgenj.org +New Jersey,Bergen County,River Vale,https://www.rivervalenj.org/ +New Jersey,Hunterdon County,Riverdale,https://www.riverdalenj.gov +New Jersey,File:Flag of Sussex County,Riverside Township,https://www.riversidetwp.org/ +New Jersey,Burlington County,Riverton,https://www.riverton-nj.com +New Jersey,Union County,Robbinsville Township,https://www.robbinsville-twp.org +New Jersey,Bergen County,Rochelle Park,https://www.rochelleparknj.gov +New Jersey,Bergen County,Rockaway,https://www.rockawayborough.com +New Jersey,Bergen County,Rockaway Township,https://www.rockawaytownship.org/ +New Jersey,Bergen County,Rockleigh,https://www.rockleighnj.org/ +New Jersey,Cumberland County,Rocky Hill,https://www.rockyhill-nj.gov +New Jersey,Monmouth County,Roosevelt,https://rooseveltnj.us/ +New Jersey,Passaic County,Roseland,https://www.roselandnj.org +New Jersey,Union County,Roselle,https://www.boroughofroselle.com +New Jersey,Union County,Roselle Park,https://www.rosellepark.net +New Jersey,Union County,Roxbury,https://www.roxburynj.us +New Jersey,Monmouth County,Rumson,https://www.rumsonnj.gov/ +New Jersey,Camden County,Runnemede,https://www.runnemedenj.org/ +New Jersey,Bergen County,Rutherford,https://www.rutherfordboronj.com/ +New Jersey,Bergen County,Saddle Brook,https://www.saddlebrooknj.us +New Jersey,Bergen County,Saddle River,https://www.saddleriver.org +New Jersey,Salem County,Salem,https://www.cityofsalemnj.org +New Jersey,File:Flag of Sussex County,Sandyston Township,https://www.sandystontownship.com +New Jersey,Middlesex County,Sayreville,http://www.sayreville.com +New Jersey,Union County,Scotch Plains,https://www.scotchplainsnj.gov/ +New Jersey,Monmouth County,Sea Bright,https://www.seabrightnj.org +New Jersey,Monmouth County,Sea Girt,https://www.seagirtboro.com +New Jersey,Camden County,Sea Isle City,http://www.seaislecitynj.us +New Jersey,Ocean County,Seaside Heights,https://www.seaside-heightsnj.org/ +New Jersey,Hunterdon County,Seaside Park,https://www.seasideparknj.org/ +New Jersey,Hudson County,Secaucus,https://www.secaucusnj.gov +New Jersey,Bergen County,Shamong Township,https://www.shamong.net +New Jersey,Cumberland County,Shiloh,https://www.shilohborough.com/ +New Jersey,Atlantic County,Ship Bottom,https://www.shipbottom.org +New Jersey,Monmouth County,Shrewsbury,http://www.shrewsburyboro.com +New Jersey,Monmouth County,Shrewsbury Township,http://www.townshipofshrewsbury.com/ +New Jersey,Camden County,Somerdale,https://www.somerdale-nj.com/ +New Jersey,Atlantic County,Somers Point,http://www.somerspointgov.org +New Jersey,Somerset County,Somerville,https://www.somervillenj.org +New Jersey,Middlesex County,South Amboy,https://www.southamboynj.gov/ +New Jersey,Hunterdon County,South Bound Brook,https://www.sbbnj.com/ +New Jersey,Middlesex County,South Brunswick,https://www.southbrunswicknj.gov/ +New Jersey,Bergen County,South Hackensack,https://www.southhackensacknj.org +New Jersey,File:Flag of Sussex County,South Harrison Township,https://www.southharrison-nj.org +New Jersey,Bergen County,South Orange,https://www.southorange.org +New Jersey,Middlesex County,South Plainfield,http://www.southplainfieldnj.com/ +New Jersey,Middlesex County,South River,https://www.southrivernj.org +New Jersey,File:Flag of Sussex County,South Toms River,https://www.southtomsriver.org/ +New Jersey,Monmouth County,Southampton Township,https://www.southamptonnj.org +New Jersey,File:Flag of Sussex County,Sparta,https://www.spartanj.org +New Jersey,Middlesex County,Spotswood,https://www.spotswoodboro.com +New Jersey,Monmouth County,Spring Lake,https://www.springlakeboro.org +New Jersey,Monmouth County,Spring Lake Heights,https://www.springlakehts.com +New Jersey,Union County,Springfield Township,https://springfield-nj.us/ +New Jersey,Burlington County,Springfield Township,https://www.springfieldtownshipnj.org/ +New Jersey,Bergen County,Stafford Township,https://www.twp.stafford.nj.us +New Jersey,File:Flag of Sussex County,Stanhope,https://www.stanhopenj.gov/ +New Jersey,File:Flag of Sussex County,Stillwater Township,https://www.stillwatertownshipnj.com +New Jersey,Burlington County,Stockton,http://www.stocktonboronj.us/ +New Jersey,Monmouth County,Stone Harbor,https://www.stoneharbornj.org/ +New Jersey,Cumberland County,Stow Creek Township,https://stowcreektwp.org/ +New Jersey,Camden County,Stratford,https://www.stratfordnj.org +New Jersey,Union County,Summit,https://www.cityofsummit.org/ +New Jersey,Cumberland County,Surf City,https://surfcitynj.org/ +New Jersey,File:Flag of Sussex County,Sussex,https://www.sussexboro.com +New Jersey,Gloucester County,Swedesboro,https://www.historicswedesboro.com/ +New Jersey,Bergen County,Tabernacle Township,https://www.townshipoftabernacle-nj.gov +New Jersey,Camden County,Tavistock,https://www.tavistocknj.org/ +New Jersey,Bergen County,Teaneck,https://www.TeaneckNJ.gov +New Jersey,Bergen County,Tenafly,https://www.tenaflynj.org +New Jersey,Bergen County,Teterboro,https://www.teterboronj.org/ +New Jersey,Bergen County,Tewksbury Township,https://www.tewksburytwp.net +New Jersey,Monmouth County,Tinton Falls,https://www.tintonfalls.com +New Jersey,Middlesex County,Toms River,https://www.tomsrivertownship.com/ +New Jersey,Passaic County,Totowa,http://www.TotowaNJ.org +New Jersey,Mercer County,Trenton,https://www.trentonnj.org/ +New Jersey,File:Flag of Sussex County,Tuckerton,https://www.tuckertonborough.com +New Jersey,Monmouth County,Union Beach,http://www.ubnj.net +New Jersey,Passaic County,Union City,https://www.ucnj.com/ +New Jersey,Union County,Union Township,https://www.uniontownship.com/ +New Jersey,Bergen County,Union Township,https://www.uniontwp-hcnj.gov +New Jersey,Cumberland County,Upper Deerfield Township,https://upperdeerfield.com/ +New Jersey,Monmouth County,Upper Freehold Township,http://www.uftnj.com +New Jersey,File:Flag of Sussex County,Upper Pittsgrove Township,http://www.upperpittsgrovenj.org +New Jersey,Bergen County,Upper Saddle River,https://www.usrtoday.org +New Jersey,Camden County,Upper Township,https://www.uppertownship.com +New Jersey,Atlantic County,Ventnor City,https://www.ventnorcity.org/ +New Jersey,File:Flag of Sussex County,Vernon Township,https://www.vernontwp.com/ +New Jersey,Essex County,Verona,https://www.veronanj.org +New Jersey,Hunterdon County,Victory Gardens,https://www.victorygardensnj.gov/ +New Jersey,Cumberland County,Vineland,https://www.vinelandcity.org/ +New Jersey,Camden County,Voorhees Township,https://www.voorheesnj.com +New Jersey,Bergen County,Waldwick,https://www.waldwicknj.org/ +New Jersey,Monmouth County,Wall Township,https://www.wallnj.com +New Jersey,Bergen County,Wallington,https://www.wallingtonnj.org +New Jersey,File:Flag of Sussex County,Walpack Township,https://www.twp.walpack.nj.us +New Jersey,Passaic County,Wanaque,https://www.wanaqueborough.com/ +New Jersey,File:Flag of Sussex County,Wantage Township,https://www.wantagetwp.com +New Jersey,Middlesex County,Warren Township,https://www.warrennj.org +New Jersey,Warren County,Washington,http://www.washingtonboro-nj.gov/ +New Jersey,Essex County,Washington Township,https://www.twp.washington.nj.us/ +New Jersey,Bergen County,Washington Township,https://www.wtmorris.org/ +New Jersey,Bergen County,Washington Township,https://www.twpofwashington.us/ +New Jersey,Bergen County,Washington Township,http://www.washington-twp-warren.org +New Jersey,Cumberland County,Washington Township,https://www.wtbcnj.org +New Jersey,Bergen County,Watchung,https://www.watchungnj.gov/ +New Jersey,Camden County,Waterford Township,https://www.waterfordtwp.org +New Jersey,Passaic County,Wayne,https://www.waynetownship.com +New Jersey,Hudson County,Weehawken,https://www.weehawken-nj.us/ +New Jersey,Warren County,Wenonah,https://www.boroughofwenonah.com/ +New Jersey,Cumberland County,West Amwell Township,https://www.westamwelltwp.org/ +New Jersey,Passaic County,West Caldwell,https://www.westcaldwell.com +New Jersey,Monmouth County,West Cape May,https://www.westcapemay.us/ +New Jersey,Gloucester County,West Deptford Township,https://www.westdeptford.com +New Jersey,Monmouth County,West Long Branch,https://www.westlongbranch.org +New Jersey,Passaic County,West Milford,http://www.westmilford.org/ +New Jersey,Monmouth County,West New York,https://www.westnewyorknj.org/ +New Jersey,Essex County,West Orange,https://www.westorange.org/ +New Jersey,File:Flag of Sussex County,West Wildwood,https://www.westwildwood.org +New Jersey,Union County,West Windsor,http://www.westwindsornj.org +New Jersey,Atlantic County,Westampton,https://www.westamptonnj.gov +New Jersey,Union County,Westfield,https://www.westfieldnj.gov/ +New Jersey,Burlington County,Westville,https://westville-nj.com/ +New Jersey,Bergen County,Westwood,https://www.westwoodnj.gov/ +New Jersey,Atlantic County,Weymouth Township,https://www.weymouthnj.org +New Jersey,Monmouth County,Wharton,https://www.whartonnj.com +New Jersey,Monmouth County,White Township,https://www.white-township.com/ +New Jersey,Cape May County,Wildwood,https://www.wildwoodnj.org/ +New Jersey,Bergen County,Wildwood Crest,https://www.wildwoodcrest.org +New Jersey,Bergen County,Willingboro Township,https://www.willingborotwp.org/ +New Jersey,Union County,Winfield Township,https://www.winfield-nj.org +New Jersey,Camden County,Winslow Township,https://www.winslowtownship.com/ +New Jersey,Camden County,Woodbine,http://www.boroughofwoodbine.net +New Jersey,Middlesex County,Woodbridge Township,https://www.twp.woodbridge.nj.us/ +New Jersey,Burlington County,Woodbury,https://www.woodbury.nj.us +New Jersey,Bergen County,Woodbury Heights,https://bwhnj.com/ +New Jersey,Bergen County,Woodcliff Lake,https://www.wclnj.com +New Jersey,Passaic County,Woodland Park,http://www.wpnj.us/ +New Jersey,Hunterdon County,Woodland Township,https://www.woodlandtownship.org +New Jersey,Camden County,Woodlynne,https://www.woodlynnenj.org/ +New Jersey,Bergen County,Wood-Ridge,https://www.njwoodridge.org +New Jersey,File:Flag of Sussex County,Woodstown,https://www.historicwoodstown.org +New Jersey,Bergen County,Woolwich Township,https://www.woolwichtwp.org +New Jersey,Cumberland County,Wrightstown,https://www.wrightstownborough.com +New Jersey,Bergen County,Wyckoff,https://www.wyckoff-nj.com/ +New Mexico,Otero County,Alamogordo,http://ci.alamogordo.nm.us/ +New Mexico,Bernalillo County,Albuquerque,https://cabq.gov +New Mexico,Colfax County,Angel Fire,http://www.afgov.com +New Mexico,Doña Ana County,Anthony,https://www.cityofanthonynm.com/ +New Mexico,Eddy County,Artesia,http://www.artesianm.gov +New Mexico,San Juan County,Aztec,http://www.aztecnm.gov/ +New Mexico,Grant County,Bayard,http://www.cityofbayardnm.com +New Mexico,Valencia County,Belen,http://www.belen-nm.gov/ +New Mexico,San Juan County,Bloomfield,http://www.bloomfieldnm.gov/ +New Mexico,Valencia County,Bosque Farms,http://www.bosquefarmsnm.gov +New Mexico,Lincoln County,Capitan,http://villageofcapitan.org +New Mexico,Eddy County,Carlsbad,http://www.cityofcarlsbadnm.com +New Mexico,Lincoln County,Carrizozo,http://www.townofcarrizozo.com/ +New Mexico,Rio Arriba County,Chama,http://chamavillage.com/ +New Mexico,Colfax County,Cimarron,http://villageofcimarron.net +New Mexico,Union County,Clayton,http://www.claytonnm.org +New Mexico,Curry County,Clovis,http://www.cityofclovis.org +New Mexico,Luna County,Columbus,http://www.historicvillageofcolumbus.org/index.html +New Mexico,Lincoln County,Corona,http://www.villageofcorona.com +New Mexico,Sandoval County,Corrales,http://www.corrales-nm.org/ +New Mexico,Luna County,Deming,http://cityofdeming.org +New Mexico,Colfax County,Eagle Nest,http://www.eaglenest.org +New Mexico,Santa Fe County,Edgewood,http://www.edgewood-nm.gov +New Mexico,Sierra County,Elephant Butte,http://cityofelephantbutte.com/ +New Mexico,Rio Arriba County,Espanola,http://www.cityofespanola.org/ +New Mexico,Lea County,Eunice,http://www.cityofeunice.org +New Mexico,San Juan County,Farmington,http://www.fmtn.org/ +New Mexico,McKinley County,Gallup,http://www.gallupnm.gov/ +New Mexico,Cibola County,Grants,https://www.cityofgrants.net/ +New Mexico,Doña Ana County,Hatch,http://www.villageofhatch.org/ +New Mexico,Lea County,Hobbs,http://www.hobbsnm.org +New Mexico,Grant County,Hurley,http://www.townofhurley.us +New Mexico,Lea County,Jal,http://www.cityofjal.us +New Mexico,Sandoval County,Jemez Springs,http://www.jemezsprings.org +New Mexico,San Juan County,Kirtland,http://kirtlandnm.org +New Mexico,Doña Ana County,Las Cruces,http://www.las-cruces.org +New Mexico,San Miguel County,Las Vegas,http://www.lasvegasnm.gov +New Mexico,Valencia County,Los Lunas,http://www.loslunasnm.gov/ +New Mexico,Bernalillo County,Los Ranchos de Albuquerque,http://losranchosnm.gov +New Mexico,Eddy County,Loving,http://villageofloving.org +New Mexico,Lea County,Lovington,http://lovington.org +New Mexico,Doña Ana County,Mesilla,http://mesillanm.gov +New Mexico,Torrance County,Moriarty,http://www.cityofmoriarty.org/ +New Mexico,Torrance County,Mountainair,http://mountainairnm.gov +New Mexico,Roosevelt County,Portales,http://www.portalesnm.org +New Mexico,Taos County,Questa,http://questa-nm.com/ +New Mexico,Colfax County,Raton,http://ratonnm.gov +New Mexico,Taos County,Red River,http://www.redriver.org/ +New Mexico,Valencia County,Rio Communities,http://www.riocommunities.net +New Mexico,Sandoval County,Rio Rancho,http://www.ci.rio-rancho.nm.us +New Mexico,Chaves County,Roswell,http://www.roswell-nm.gov +New Mexico,Lincoln County,Ruidoso,http://ruidoso-nm.gov +New Mexico,Lincoln County,Ruidoso Downs,http://ruidosodowns.us +New Mexico,Grant County,Santa Clara,http://www.villageofsantaclara.org +New Mexico,Santa Fe County,Santa Fe,https://santafenm.gov +New Mexico,Guadalupe County,Santa Rosa,http://santarosanm.org +New Mexico,Grant County,Silver City,http://www.townofsilvercity.org +New Mexico,Socorro County,Socorro,http://www.socorronm.gov +New Mexico,Doña Ana County,Sunland Park,http://www.sunlandpark-nm.gov/ +New Mexico,Taos County,Taos,http://www.taosgov.com/ +New Mexico,Taos County,Taos Ski Valley,http://www.skitaos.com/ +New Mexico,Lea County,Tatum,http://townoftatum.org +New Mexico,Bernalillo County,Tijeras,https://www.tijerasnm.gov/ +New Mexico,Sierra County,Truth or Consequences,http://torcnm.org/ +New Mexico,Quay County,Tucumcari,http://www.cityoftucumcari.com +New Mexico,Otero County,Tularosa,http://www.villageoftularosa.com +New Mexico,Mora County,Wagon Mound,http://sangres.com/newmexico/mora/wagonmound.htm +New York,Jefferson County,Adams,http://www.townofadams.com +New York,Jefferson County,Adams (village),http://villageofadams.com +New York,Steuben County,Addison,https://www.townofaddison.info/default.html +New York,Chenango County,Afton,http://www.townofafton.com/ +New York,Chenango County,Afton (village),http://villageofaftonny.com +New York,Rockland County,Airmont,http://www.airmont.org +New York,Erie County,Akron,http://www.erie.gov/akron/ +New York,Albany County,Albany,https://www.albanyny.gov/ +New York,Orleans County,Albion (town),http://www.townofalbion.com +New York,Orleans County,Albion (village),http://vil.albion.ny.us +New York,Erie County,Alden,http://alden.erie.gov +New York,Erie County,Alden (village),http://www2.erie.gov/village_alden +New York,Genesee County,Alexander (village),http://www.townofalexander.com/village/ +New York,Jefferson County,Alexandria,http://townofalexandria.org +New York,Jefferson County,Alexandria Bay,http://www.villageofalexandriabay.com +New York,Allegany County,Alfred,http://townofalfred.com +New York,Allegany County,Alfred (village),http://www.alfredny.org +New York,Cattaraugus County,Allegany (town),http://allegany.org/town.php?Town%20of%20Allegany +New York,Cattaraugus County,Allegany (village),http://www.allegany.org +New York,Allegany County,Almond,http://www.almondny.us +New York,Allegany County,Almond (village),http://almondny.com/ +New York,Albany County,Altamont,https://www.altamontvillage.org/ +New York,Erie County,Amherst,http://www.amherst.ny.us +New York,Allegany County,Amity,http://www.townofamity-ny.com +New York,Suffolk County,Amityville,http://amityville.com +New York,Montgomery County,Amsterdam (city),http://www.amsterdamny.gov +New York,Montgomery County,Amsterdam (town),http://www.townofamsterdam.org/ +New York,Allegany County,Andover,http://www.townofandoverny.com/ +New York,Allegany County,Andover (village),http://www.andoverny.org/ +New York,Allegany County,Angelica,http://angelicany.org +New York,Allegany County,Angelica (village),http://www.angelicany.com +New York,Erie County,Angola,http://www.villageofangola.org +New York,Jefferson County,Antwerp (village),http://villageofantwerp.net +New York,Wyoming County,Arcade (village),http://www.villageofarcade.org +New York,Wayne County,Arcadia,https://townarcadia.digitaltowpath.org/ +New York,Westchester County,Ardsley,http://www.ardsleyvillage.com/ +New York,Washington County,Argyle,http://townofargyleny.com/ +New York,Washington County,Argyle (village),http://www.argyle-village.org/ +New York,Chemung County,Ashland,http://townofashland.net +New York,Greene County,Athens (village),http://www.visithistoricathens.com +New York,Nassau County,Atlantic Beach,http://www.villageofatlanticbeach.com/ +New York,Wyoming County,Attica (town),http://www.townofattica.net/ +New York,Wyoming County,Attica (village),http://www.attica.org +New York,Cayuga County,Auburn,http://www.auburnny.gov +New York,Cayuga County,Aurelius,http://www.cayugacounty.us/aurelius +New York,Cayuga County,Aurora,http://auroranewyork.us +New York,Erie County,Aurora,http://townofaurora.com +New York,Livingston County,Avon,http://www.avon-ny.org +New York,Livingston County,Avon (village),http://avon-ny.org +New York,Suffolk County,Babylon,https://www.townofbabylon.com/ +New York,Suffolk County,Babylon (village),https://www.villageofbabylonny.gov/ +New York,Chenango County,Bainbridge,http://bainbridgeny.org +New York,Onondaga County,Baldwinsville,http://www.baldwinsville.org +New York,Saratoga County,Ballston,http://www.townofballstonny.org/ +New York,Saratoga County,Ballston Spa,http://www.villageofballstonspa.org/ +New York,Niagara County,Barker,https://www.villageofbarker.org/ +New York,Tioga County,Barton,http://townofbarton.org/ +New York,Genesee County,Batavia,http://www.batavianewyork.com/ +New York,Steuben County,Bath,http://www.townofbathny.org +New York,Nassau County,Baxter Estates,http://www.baxterestates.org +New York,Nassau County,Bayville,http://bayvilleny.gov +New York,Dutchess County,Beacon,http://www.cityofbeacon.org +New York,Suffolk County,Belle Terre,http://www.belleterre.us +New York,Suffolk County,Bellerose,http://www.bellerosevillage.org +New York,Suffolk County,Bellport,http://www.bellportvillageny.gov/ +New York,Allegany County,Belmont,http://belmontny.org +New York,Chautauqua County,Bemus Point,http://bemuspointny.org +New York,Yates County,Benton,https://www.townofbenton.us/ +New York,Genesee County,Bergen (village),http://www.villageofbergen.com +New York,Broome County,Binghamton,http://www.binghamton-ny.gov +New York,Jefferson County,Black River,http://www.blackriverny.org +New York,Erie County,Blasdell,http://www.blasdell.org +New York,Ontario County,Bloomfield,http://www.bloomfieldny.org/ +New York,Orange County,Blooming Grove,http://www.townofbloominggroveny.com/ +New York,Sullivan County,Bloomingburg,https://bloomingburg.us/ +New York,Allegany County,Bolivar,http://www.townofbolivar.com +New York,Oneida County,Boonville (village),http://www.village.boonville.ny.us +New York,Erie County,Brant,http://www.brantny.com +New York,Putnam County,Brewster,http://www.brewstervillage-ny.gov/ +New York,Westchester County,Briarcliff Manor,http://www.briarcliffmanor.org +New York,Suffolk County,Brightwaters,http://www.villageofbrightwaters.com +New York,Fulton County,Broadalbin,http://www.townofbroadalbinny.org +New York,Monroe County,Brockport,http://www.brockportny.org/ +New York,Chautauqua County,Brocton,http://www.brocton.org +New York,Chautauqua County,Bronxville,http://villageofbronxville.com +New York,Suffolk County,Brookhaven,https://www.brookhavenny.gov/ +New York,Nassau County,Brookville,http://www.villageofbrookville.com +New York,Jefferson County,Brownville,http://townofbrownville.com +New York,Jefferson County,Brownville (village),http://www.villageofbrownvilleny.com +New York,Cayuga County,Brutus,http://www.townofbrutus.org +New York,Westchester County,Buchanan,http://www.villageofbuchanan.com +New York,Erie County,Buffalo,https://www.buffalony.gov/ +New York,Allegany County,Burns,http://townofburnsny.com +New York,Chautauqua County,Busti,http://www.townofbusti.com +New York,Livingston County,Caledonia,http://www.townofcaledoniany.com +New York,Livingston County,Caledonia (village),http://villageofcaledoniany.org +New York,Washington County,Cambridge,http://townofcambridgeny.org/ +New York,Washington County,Cambridge (village),http://www.cambridgeny.gov/ +New York,Onondaga County,Camillus,https://www.townofcamillus.com/ +New York,Ontario County,Canandaigua (city),http://canandaigua.govoffice.com +New York,Allegany County,Canaseraga,http://www.canaseragany.org +New York,Madison County,Canastota,http://www.canastota.com +New York,Tioga County,Candor (village),http://www.tiogacountyny.com/towns-villages/candor-village-of.html +New York,St. Lawrence County,Canton,https://cantonny.gov/ +New York,St. Lawrence County,Canton (village),http://www.cantonnewyork.us/ +New York,Jefferson County,Cape Vincent,http://www.townofcapevincent.org +New York,Jefferson County,Cape Vincent (village),http://www.villageofcapevincent.org +New York,Jefferson County,Carthage,http://www.villageofcarthageny.com +New York,Chautauqua County,Cassadaga,http://www.cassadaganewyork.org +New York,Wyoming County,Castile (village),http://www.castileny.com +New York,Rensselaer County,Castleton-on-Hudson,http://www.castleton-on-hudson.org/ +New York,Lewis County,Castorland,http://castorland.racog.org +New York,Cayuga County,Cato (town),http://www.cayugacounty.us/townofcato +New York,Cayuga County,Cato (village),http://villageofcatony.com +New York,Greene County,Catskill (town),http://www.townofcatskillny.gov +New York,Greene County,Catskill (village),http://www.villageofcatskill.net +New York,Cattaraugus County,Cattaraugus,http://cattaraugusny.org +New York,Cayuga County,Cayuga,http://www.villagecayugany.com +New York,Tompkins County,Cayuga Heights,http://www.cayuga-heights.ny.us/ +New York,Madison County,Cazenovia,https://towncazenovia.digitaltowpath.org:10079/content +New York,Nassau County,Cedarhurst,http://www.cedarhurst.gov +New York,Chautauqua County,Celoron,http://celoronny.org +New York,Oswego County,Central Square,https://www.villageofcentralsquare-ny.us/ +New York,Oswego County,Centre Island,http://centreisland.org +New York,Jefferson County,Champion,http://champion.racog.org +New York,Clinton County,Champlain,http://www.townofchamplain.com +New York,Clinton County,Champlain (village),http://www.vchamplain.com +New York,Chautauqua County,Charlotte,http://charlotteny.org +New York,Franklin County,Chateaugay (town),http://www.chateaugayny.org +New York,Columbia County,Chatham (town),http://www.chathamnewyork.us +New York,Columbia County,Chatham (village),http://villageofchatham.com +New York,Chautauqua County,Chautauqua,http://townofchautauqua.com +New York,Erie County,Cheektowaga (town),http://www.tocny.org +New York,Otsego County,Cherry Valley,http://www.cherryvalleyny.us/ +New York,Orange County,Chester,http://chester-ny.gov/ +New York,Orange County,Chester (village),http://www.villageofchesterny.com/ +New York,Rockland County,Chestnut Ridge,http://www.chestnutridgevillage.org +New York,Madison County,Chittenango,http://www.chittenango.org/ +New York,Monroe County,Churchville,http://www.churchville.net/ +New York,Onondaga County,Cicero,http://www.ciceronewyork.net/ +New York,Monroe County,Clarkson,http://www.clarksonny.org/ +New York,Rockland County,Clarkstown,https://www.clarkstown.gov/ +New York,Columbia County,Claverack,http://townofclaverack.com +New York,Onondaga County,Clay,https://www.townofclay.org/ +New York,Jefferson County,Clayton,http://townofclayton.com +New York,Jefferson County,Clayton (village),http://www.villageofclayton.com +New York,Oswego County,Cleveland,http://www.villageofcleveland-ny.us/ +New York,Ontario County,Clifton Springs,http://www.cliftonspringsny.org/ +New York,Oneida County,Clinton,https://villageclinton.digitaltowpath.org:10037/content +New York,Wayne County,Clyde,http://www.clydeny.com +New York,Schoharie County,Cobleskill (town),https://www4.schohariecounty-ny.gov/government/town-of-cobleskill/ +New York,Schoharie County,Cobleskill (village),https://www.cobleskillvillage.com/ +New York,Albany County,Coeymans,http://www.coeymans.org/ +New York,Albany County,Cohoes,https://www.ci.cohoes.ny.us/ +New York,Putnam County,Cold Spring,http://coldspringny.gov +New York,Erie County,Collins,http://www.townofcollins.com +New York,Albany County,Colonie,http://www.colonie.org/ +New York,Albany County,Colonie (village),http://www.colonievillage.org +New York,Erie County,Concord,http://www.townofconcordny.com +New York,Oswego County,Constantia (town),http://townconstantia.org +New York,Otsego County,Cooperstown,http://www.cooperstownny.org/ +New York,Genesee County,Corfu,http://www.corfuny.com +New York,Saratoga County,Corinth,http://www.townofcorinthny.com/ +New York,Saratoga County,Corinth (village),http://www.villageofcorinthny.com/ +New York,Steuben County,Corning (city),http://cityofcorning.com +New York,Orange County,Cornwall,http://www.cornwallny.com/ +New York,Orange County,Cornwall-on-Hudson,http://cornwall-on-hudson.org/ +New York,Cortland County,Cortland,http://cortland.org +New York,Westchester County,Cortlandt,http://townofcortlandt.com +New York,Cortland County,Cortlandville,http://cortlandville.org +New York,Cortland County,Cove Neck,http://www.coveneck.org +New York,Seneca County,Covert,http://www.townofcovert.org/ +New York,Greene County,Coxsackie,https://coxsackie.org/ +New York,Greene County,Coxsackie (village),http://villageofcoxsackie.com +New York,Lewis County,Croghan (town),http://www.townofcroghan.com +New York,Lewis County,Croghan (village),http://www.croghanny.org +New York,Westchester County,Croton-on-Hudson,http://www.crotononhudson-ny.gov/ +New York,Allegany County,Cuba (village),http://www.cubany.org +New York,Clinton County,Dannemora (town),http://townofdannemora.com +New York,Clinton County,Dannemora (village),http://www.villageofdannemora.com +New York,Livingston County,Dansville,http://www.dansvilleny.us +New York,Cattaraugus County,Dayton,http://daytonny.org +New York,Schenectady County,Delanson,http://www.delanson.net +New York,Cattaraugus County,Delevan,http://delevanny.org +New York,Delaware County,Delhi,http://www.townofdelhiny.com +New York,Delaware County,Delhi (village),http://villageofdelhi.com +New York,Lewis County,Denmark,https://towndenmark.digitaltowpath.org:10792/content/ +New York,Erie County,Depew,http://www.villageofdepew.org +New York,Broome County,Deposit (village),http://villageofdeposit.org +New York,Suffolk County,Dering Harbor,http://deringharborvillage.org +New York,Madison County,DeRuyter,https://www.deruyternygov.us/ +New York,Madison County,DeRuyter (village),http://www.deruyternygov.us/ +New York,Onondaga County,DeWitt,http://www.townofdewitt.com/ +New York,Jefferson County,Dexter,http://villageofdexterny.com +New York,Broome County,Dickinson,http://www.townofdickinson.com +New York,Westchester County,Dobbs Ferry,http://www.dobbsferry.com +New York,Herkimer County,Dolgeville,http://www.villageofdolgeville.org +New York,Tompkins County,Dryden,http://www.dryden.ny.us +New York,Tompkins County,Dryden (village),http://www.dryden-ny.org +New York,Schenectady County,Duanesburg,http://www.duanesburg.net/ +New York,Yates County,Dunkirk,http://www.dunkirktoday.com/ +New York,Madison County,Earlville,http://www.villageofearlville.com +New York,Aurora,East Aurora,http://www.east-aurora.ny.us +New York,Ontario County,East Bloomfield,http://www.townofeastbloomfield.org/ +New York,Suffolk County,East Hampton (town),http://ehamptonny.gov +New York,Suffolk County,East Hampton (village),http://www.easthamptonvillage.org +New York,Nassau County,East Hills,http://www.villageofeasthills.org +New York,Rensselaer County,East Nassau,http://villageofeastnassau.org/content +New York,Monroe County,East Rochester,http://www.eastrochester.org/ +New York,Monroe County,East Rockaway,http://www.villageofeastrockaway.org +New York,Onondaga County,East Syracuse,http://www.villageofeastsyracuse.com +New York,Onondaga County,East Williston,http://www.eastwilliston.org +New York,Westchester County,Eastchester (town),http://www.eastchester.org +New York,Genesee County,Elba,http://elbanewyork.com/ +New York,Genesee County,Elba (village),http://elbanewyork.com +New York,Onondaga County,Elbridge,http://townofelbridge.com/ +New York,Onondaga County,Elbridge (village),http://www.villageofelbridge.com +New York,Chautauqua County,Ellery,http://elleryny.org +New York,Chautauqua County,Ellicott,http://townofellicott.com +New York,Cattaraugus County,Ellicottville,http://www.ellicottvillegov.com +New York,Cattaraugus County,Ellicottville (village),http://www.ellicottvillegov.com +New York,Chemung County,Elmira,http://www.cityofelmira.net/ +New York,Chemung County,Elmira (town),http://www.townofelmira.com +New York,Chemung County,Elmira Heights,http://elmiraheights.org +New York,Westchester County,Elmsford,http://www.elmsfordny.org +New York,Broome County,Endicott,http://www.endicottny.com +New York,Steuben County,Erwin,http://www.erwinny.org +New York,Schoharie County,Esperance (town),https://www4.schohariecounty-ny.gov/government/town-of-esperance/ +New York,Schoharie County,Esperance (village),http://www.schohariecounty-ny.gov/CountyWebSite/villesp/index.jsp +New York,Erie County,Evans,http://www.townofevans.org +New York,Cayuga County,Fair Haven,https://www.cayugacounty.us/620/Fair-Haven-Village +New York,Monroe County,Fairport,http://www.village.fairport.ny.us/ +New York,Chautauqua County,Falconer,http://falconerny.org +New York,Sullivan County,Fallsburg,http://www.townoffallsburg.com +New York,Nassau County,Farmingdale,http://www.farmingdalevillage.com +New York,Seneca County,Fayette,http://townoffayetteny.org/ +New York,Onondaga County,Fayetteville,http://www.fayettevilleny.gov +New York,Dutchess County,Fishkill,http://vofishkill.us +New York,Dutchess County,Fishkill (town),http://www.fishkill-ny.gov +New York,Delaware County,Fleischmanns,http://www.fleischmannsny.com/ +New York,Delaware County,Floral Park,http://www.fpvillage.org +New York,Orange County,Florida,http://www.villageoffloridany.org/%7C +New York,Nassau County,Flower Hill,http://www.villageflowerhill.org +New York,Montgomery County,Fonda,https://villagefonda.digitaltowpath.org:10193/content +New York,Washington County,Fort Ann,https://www.townoffortannny.com/ +New York,Washington County,Fort Ann (village),http://www.fortann.us/ +New York,Washington County,Fort Edward (town),http://www.fortedwardnewyork.net +New York,Washington County,Fort Edward (village),http://villageoffortedward.com//index.asp +New York,Montgomery County,Fort Plain,http://www.villageoffortplain.com/ +New York,Herkimer County,Frankfort (town),http://www.townoffrankfort.com +New York,Herkimer County,Frankfort (village),http://www.herkimercounty.org/content/CommunityCategories/Home/:item=1&field=groups;/content/CommunityGroups/View/7Village +New York,Cattaraugus County,Franklinville (town),http://franklinvilleny.org +New York,Cattaraugus County,Franklinville (village),http://www.franklinvilleny.org +New York,Chautauqua County,Fredonia,https://www.villageoffredoniany.com/ +New York,Chautauqua County,Freeport,http://www.freeportny.com +New York,Tompkins County,Freeville,http://freevilleny.org +New York,Oswego County,Fulton,http://cityoffulton.com +New York,Montgomery County,Fultonville,http://fultonville.org/ +New York,Wyoming County,Gainesville (village),http://www.wyomingco.net/towns/villageofgainesville.htm +New York,Wayne County,Galen,http://townofgalen.org/ +New York,Nassau County,Garden City,http://www.gardencityny.net +New York,Livingston County,Geneseo,http://www.geneseony.org +New York,Ontario County,Geneva,http://www.geneva.ny.us +New York,Herkimer County,German Flatts,http://germanflatts.org +New York,Chautauqua County,Gerry,http://www.gerryny.us +New York,Columbia County,Ghent,http://townofghent.org +New York,Otsego County,Gilbertsville,http://gilbertsville.com/ +New York,Nassau County,Glen Cove,https://glencoveny.gov/ +New York,Warren County,Glens Falls,http://www.cityofglensfalls.com +New York,Schenectady County,Glenville,http://www.townofglenville.org +New York,Fulton County,Gloversville,http://www.cityofgloversville.com +New York,Orange County,Goshen (village),https://www.villageofgoshen-ny.gov/ +New York,Cattaraugus County,Gowanda,http://villageofgowanda.com +New York,Rockland County,Grand View-on-Hudson,https://www.gvoh-ny.gov/ +New York,Washington County,Great Neck (village),http://greatneckvillage.org +New York,Nassau County,Great Neck Estates,http://www.vgne.com +New York,Nassau County,Great Neck Plaza,http://www.greatneckplaza.net +New York,Albany County,Green Island,http://www.villageofgreenisland.com/ +New York,Westchester County,Greenburgh,http://www.greenburghny.com +New York,Chenango County,Greene,http://nygreene.com +New York,Chenango County,Greene (village),http://nygreene.com/villageofgreene.htm +New York,Suffolk County,Greenport,http://www.villageofgreenport.org +New York,Washington County,Greenwich (town),http://www.greenwichny.org/ +New York,Washington County,Greenwich (village),http://www.villageofgreenwich.org +New York,Tompkins County,Groton (town),http://townofgrotonny.org/ +New York,Tompkins County,Groton (village),http://www.grotonny.org/village +New York,Albany County,Guilderland,https://www.townofguilderland.org/ +New York,Montgomery County,Hagaman,http://www.co.montgomery.ny.us/web/municipal/hagaman/ +New York,Erie County,Hamburg,https://townofhamburgny.gov +New York,Erie County,Hamburg (village),http://www.villagehamburg.com +New York,Madison County,Hamilton,http://www.townofhamiltonny.org +New York,Madison County,Hamilton (village),http://hamilton-ny.gov +New York,St. Lawrence County,Hammond,https://townofhammondny.com/ +New York,Steuben County,Hammondsport,https://hammondsport.us/ +New York,Delaware County,Hancock,http://www.hancockny.org +New York,Delaware County,Hancock (village),http://villageofhancockny.com +New York,Oswego County,Hannibal,https://hannibalny.org/ +New York,Chautauqua County,Hanover,http://hanoverny.com +New York,Chautauqua County,Harmony,http://thetownofharmony.com +New York,Franklin County,Harrietstown,http://www.harrietstown.org +New York,Orange County,Harriman,https://www.villageofharriman.org/ +New York,Westchester County,Harrison,http://www.harrison-ny.gov +New York,Westchester County,Hastings-on-Hudson,http://hastingsgov.org/ +New York,Rockland County,Haverstraw,http://www.townofhaverstraw.org/ +New York,Rockland County,Haverstraw (village),http://www.voh-ny.com/ +New York,Suffolk County,Head of the Harbor,http://www.villagehohny.org +New York,Nassau County,Hempstead,https://www.hempsteadny.gov/ +New York,Suffolk County,Hempstead (village),http://villageofhempstead.org +New York,Herkimer County,Herkimer (town),http://townofherkimer.org +New York,Herkimer County,Herkimer (village),http://village.herkimer.ny.us +New York,St. Lawrence County,Heuvelton,http://www.heuveltonny.us/ +New York,St. Lawrence County,Hewlett Bay Park,https://hewlettbayparkny.gov/ +New York,Nassau County,Hewlett Harbor,http://www.hewlettharbor.org +New York,Nassau County,Hewlett Neck,http://hewlettneck.org/ +New York,Orange County,Highland Falls,http://www.highlandfallsny.org/ +New York,Orange County,Highlands,http://highlands-ny.gov/ +New York,Rockland County,Hillburn,http://www.hillburn.org/ +New York,Monroe County,Hilton,http://www.hiltonny.org/ +New York,Delaware County,Hobart,http://www.hobartny.net +New York,Oneida County,Holland Patent,https://villagehollandpatent.digitaltowpath.org:10039/content +New York,Orleans County,Holley,http://www.villageofholley.org/ +New York,Cortland County,Homer,http://www.townofhomer.org +New York,Cortland County,Homer (village),http://www.homerny.org +New York,Monroe County,Honeoye Falls,http://www.villageofhoneoyefalls.org/ +New York,Rensselaer County,Hoosick Falls,http://www.villageofhoosickfalls.com/ +New York,Steuben County,Hornell,https://www.cityofhornell.com/ +New York,Chemung County,Horseheads,http://townofhorseheads.org +New York,Chemung County,Horseheads (village),http://horseheads.org +New York,Jefferson County,Hounsfield,http://townofhounsfield-ny.org +New York,Chemung County,Hudson,http://www.cityofhudson.org +New York,Washington County,Hudson Falls,https://www.villageofhudsonfalls.com/ +New York,Greene County,Hunter (village),http://villageofhunterny.org +New York,Suffolk County,Huntington,http://huntingtonny.gov +New York,Suffolk County,Huntington Bay,http://www.huntingtonbay.org +New York,Herkimer County,Ilion,http://ilionny.com +New York,Seneca County,Interlaken,http://www.interlaken-ny.us/ +New York,Cayuga County,Ira,http://www.cayugacounty.us/ira +New York,Westchester County,Irvington,http://www.irvingtonny.gov/ +New York,Nassau County,Island Park,http://www.villageofislandpark.com +New York,Suffolk County,Islandia,http://www.newvillageofislandia.com +New York,Suffolk County,Islip,https://www.islipny.gov +New York,Tompkins County,Ithaca,http://www.cityofithaca.org +New York,Tompkins County,Ithaca (town),http://www.town.ithaca.ny.us +New York,Chautauqua County,Jamestown,http://www.jamestownny.net/ +New York,Sullivan County,Jeffersonville,http://villageofjeffersonvilleny.com/ +New York,Yates County,Jerusalem,http://jerusalem-ny.org/index.htm +New York,Broome County,Johnson City,http://www.villageofjc.com +New York,Fulton County,Johnstown (city),http://cityofjohnstown.ny.gov +New York,Onondaga County,Jordan,https://villageofjordan.org/ +New York,Erie County,Kenmore,http://www.villageofkenmore.org +New York,Erie County,Kensington,http://vok-ny.com +New York,Columbia County,Kinderhook (town),http://www.kinderhook-ny.gov +New York,Columbia County,Kinderhook (village),http://villageofkinderhook.org +New York,Columbia County,Kings Point,http://www.villageofkingspoint.org +New York,Ulster County,Kingston,https://kingston-ny.gov +New York,Oneida County,Kirkland,https://townkirkland.digitaltowpath.org:10014/content +New York,Lackawanna County,Lackawanna,http://www.lackawannany.gov +New York,Warren County,Lake George (village),https://villagelakegeorge.digitaltowpath.org:10062/content +New York,Suffolk County,Lake Grove,http://lakegroveny.gov +New York,Essex County,Lake Placid,http://villageoflakeplacid.ny.gov +New York,Essex County,Lake Success,http://www.villageoflakesuccess.com +New York,Chautauqua County,Lakewood,http://lakewoodny.com +New York,Erie County,Lancaster,http://lancasterny.gov/ +New York,Erie County,Lancaster (village),http://www.lancastervillage.org +New York,Tompkins County,Lansing,http://www.lansingtown.com/ +New York,Tompkins County,Lansing (village),http://www.vlansing.org +New York,Westchester County,Larchmont,https://villageoflarchmont.org/ +New York,Westchester County,Lattingtown,http://villageoflattingtown.org +New York,Nassau County,Laurel Hollow,http://www.laurelhollow.org +New York,Otsego County,Laurens (village),http://www.otsegocounty.com/depts/pln/documents/VillageofLaurens.pdf +New York,Nassau County,Lawrence,http://www.villageoflawrence.org +New York,Jefferson County,Le Ray,http://www.townofleray.org +New York,Genesee County,Le Roy,http://www.leroyny.org/ +New York,Genesee County,Le Roy (village),http://www.leroyny.org/html/village_of_leroy.html/ +New York,Cayuga County,Ledyard,https://www.townofledyard.com/ +New York,Livingston County,Leicester,http://www.townofleicester.org +New York,Livingston County,Leicester (village),http://www.villageofleicester.org +New York,Madison County,Lenox,http://lenoxny.com/ +New York,Niagara County,Lewiston,https://www.townoflewiston.us/ +New York,Niagara County,Lewiston (town),https://www.townoflewiston.us/ +New York,Sullivan County,Liberty,http://www.townofliberty.org +New York,Livingston County,Lima,http://www.lima-ny.org +New York,Livingston County,Lima (village),http://villageoflima.us +New York,Suffolk County,Lindenhurst,http://www.villageoflindenhurstny.gov +New York,Herkimer County,Little Falls (city),http://www.cityoflittlefalls.net +New York,Cattaraugus County,Little Valley,http://littlevalleyny.org +New York,Cattaraugus County,Little Valley (village),http://www.villageoflittlevalley.org +New York,Onondaga County,Liverpool,http://www.villageofliverpool.org +New York,Livingston County,Livonia,http://www.livoniany.org +New York,Livingston County,Livonia (village),http://www.livoniany.org +New York,Suffolk County,Lloyd Harbor,https://www.lloydharbor.org/ +New York,Niagara County,Lockport (city),http://lockportny.gov +New York,Seneca County,Lodi,http://www.lodiny.com/ +New York,Seneca County,Lodi (village),http://lodiny.com/village/ +New York,Seneca County,Long Beach,http://www.longbeachny.org +New York,Lewis County,Lowville,http://lowville.racog.org +New York,Lewis County,Lowville (village),http://villageoflowville.org +New York,Jefferson County,Lyme,http://www.townoflyme.com +New York,Lewis County,Lynbrook,http://www.lynbrookvillage.net +New York,Onondaga County,Lysander,http://www.townoflysander.org +New York,Franklin County,Malone,http://www.malonetown.com +New York,Franklin County,Malone (village),http://villageofmalone-ny.com +New York,Saratoga County,Malta,http://www.malta-town.org/ +New York,Franklin County,Malverne,http://www.malvernevillage.org +New York,Sullivan County,Mamakating,http://www.mamakating.org +New York,Westchester County,Mamaroneck,http://www.townofmamaroneck.org/ +New York,Ontario County,Manchester,https://manchesterny.org/ +New York,Ontario County,Manchester (village),http://www.villageofmanchester.org/ +New York,Herkimer County,Manheim,http://www.townofmanheim.org +New York,Onondaga County,Manlius,http://www.townofmanlius.org +New York,Onondaga County,Manlius (village),http://www.manliusvillage.org +New York,Nassau County,Manorhaven,http://www.manorhaven.org +New York,Onondaga County,Marcellus,https://marcellusny.com/ +New York,Cortland County,Marcellus (village),http://villageofmarcellus.com +New York,Delaware County,Margaretville,http://www.margaretville.com +New York,Nassau County,Massapequa Park,https://masspk.com/ +New York,St. Lawrence County,Massena,https://massena.us/ +New York,St. Lawrence County,Massena (village),https://massena.us/ +New York,Nassau County,Matinecock,http://www.matinecockvillage.org +New York,Orange County,Maybrook,http://villageofmaybrook.com/ +New York,Fulton County,Mayfield,http://mayfieldny.org +New York,Chautauqua County,Mayville,http://villageofmayville.com +New York,Saratoga County,Mechanicville,http://www.mechanicville.com/ +New York,Orleans County,Medina,http://www.villagemedina.org +New York,Albany County,Menands,http://www.villageofmenands.com +New York,Monroe County,Mendon,http://www.townofmendon.org/ +New York,Cayuga County,Mentz,http://townofmentz.com +New York,Oswego County,Mexico,https://mexicony.net/town_of_mexico/ +New York,Oswego County,Mexico (village),https://mexicony.net/village_of_mexico/ +New York,Schoharie County,Middleburgh,https://www4.schohariecounty-ny.gov/ +New York,Schoharie County,Middleburgh (village),http://www.schohariecounty-ny.gov/CountyWebSite/villmid/index.jsp +New York,Niagara County,Middleport,http://villageofmiddleport.org/ +New York,Delaware County,Middletown,http://middletowndelawarecountyny.org +New York,Orange County,Middletown,https://www.middletown-ny.com +New York,Otsego County,Mill Neck,http://millneckvillage.com +New York,Dutchess County,Millbrook,http://www.villageofmillbrookny.com/ +New York,Dutchess County,Millerton,http://www.villageofmillerton.net +New York,Yates County,Milo,http://www.townofmilo.com/ +New York,Saratoga County,Milton (town),http://www.townofmiltonny.org +New York,Montgomery County,Minden,http://townofminden.org/ +New York,Nassau County,Mineola,http://www.mineola-ny.gov +New York,Onondaga County,Minoa,http://www.villageofminoa.com +New York,Herkimer County,Mohawk,http://mohawk-ny.org +New York,Orange County,Monroe,https://monroeny.org/ +New York,Orange County,Monroe (village),http://www.villageofmonroe.org/ +New York,Rockland County,Montebello,http://www.villageofmontebello.org/ +New York,Orange County,Montgomery (town),https://www.townofmontgomery.com/ +New York,Orange County,Montgomery (village),http://www.villageofmontgomery.org/ +New York,Sullivan County,Monticello,http://www.villageofmonticello.com/ +New York,Schuyler County,Montour Falls,https://www.villageofmontourfalls.com/ +New York,Cayuga County,Moravia,http://www.cayugacounty.us/townofmoravia +New York,Cayuga County,Moravia (village),http://www.cayugacounty.us/villageofmoravia +New York,Saratoga County,Moreau,http://www.townofmoreau.org/ +New York,Madison County,Morrisville,https://www.morrisvilleny.com/ +New York,Orange County,Mount Hope,https://townofmounthope.org/ +New York,Westchester County,Mount Kisco,http://www.mountkiscony.gov/ +New York,Livingston County,Mount Morris,http://townofmtmorris.com +New York,Livingston County,Mount Morris (village),http://townofmtmorris.com/ +New York,Westchester County,Mount Pleasant,https://www.mtpleasantny.com/ +New York,Westchester County,Mount Vernon,http://cmvny.com +New York,Nassau County,Munsey Park,http://www.munseypark.org +New York,Nassau County,Muttontown,http://www.villageofmuttontown.com +New York,Rensselaer County,Nassau (town),http://townofnassau.org/ +New York,Putnam County,Nelsonville,http://villageofnelsonville.org/ +New York,Cattaraugus County,New Albion,http://www.cattaraugusny.org +New York,Chenango County,New Berlin,http://www.townofnewberlin.org +New York,Chenango County,New Berlin (village),http://thevillageofnewberlin.org +New York,Lewis County,New Bremen,http://townofnewbremen.weebly.com +New York,Oneida County,New Hartford,https://www.townofnewhartfordny.gov +New York,Oneida County,New Hartford (village),http://www.villageofnewhartford.com +New York,Rockland County,New Hempstead,http://www.newhempstead.org/ +New York,Rockland County,New Hyde Park,http://www.vnhp.org +New York,Ulster County,New Paltz,http://www.townofnewpaltz.org +New York,Ulster County,New Paltz (village),http://www.villageofnewpaltz.org/ +New York,Westchester County,New Rochelle,http://www.newrochelleny.com/ +New York,Albany County,New Scotland,http://www.townofnewscotland.com/ +New York,Rockland County,New Square,http://www.newsquare.us/ +New York,Oneida County,New York Mills,http://www.nymills.com +New York,Wayne County,Newark,http://www.villageofnewark.com +New York,Tioga County,Newark Valley (village),http://villagenv.com/ +New York,Orange County,Newburgh,http://www.cityofnewburgh-ny.gov/ +New York,Herkimer County,Newport,http://townofnewport.net +New York,Herkimer County,Newport (village),http://www.villageofnewportny.org +New York,Erie County,Newstead,http://www.erie.gov/newstead +New York,Niagara County,Niagara Falls,https://niagarafallsusa.org/ +New York,Tioga County,Nichols (village),http://www.tiogacountyny.com/towns-villages/nichols-village-of.html +New York,Suffolk County,Nissequogue,http://nissequogueny.gov +New York,Erie County,North Collins,http://www.northcollinsny.org +New York,Erie County,North Collins (village),http://www.villageofnorthcollins.org +New York,Livingston County,North Dansville,http://www.northdansville.org +New York,Dutchess County,North East,http://www.townofnortheastny.gov +New York,Essex County,North Elba,http://www.northelba.org +New York,Suffolk County,North Haven,http://northhavenny.us +New York,Nassau County,North Hempstead,https://www.northhempsteadny.gov/ +New York,Nassau County,North Hills,http://www.villagenorthhills.com +New York,Onondaga County,North Syracuse,http://northsyracuseny.org +New York,Niagara County,North Tonawanda,http://www.northtonawanda.org/ +New York,Fulton County,Northampton,http://www.townofnorthampton.com +New York,Suffolk County,Northport,http://northportny.gov +New York,Northampton,Northville,http://www.villageofnorthville.com +New York,Chenango County,Norwich,http://www.norwichnewyork.net +New York,Livingston County,Nunda,http://town.nunda.ny.us +New York,Livingston County,Nunda (village),http://www.villageofnunda.org +New York,Rockland County,Nyack,http://www.nyack-ny.gov/ +New York,Genesee County,Oakfield (town),https://townofoakfieldny.com/ +New York,Genesee County,Oakfield (village),http://www.oakfield.govoffice.com +New York,Suffolk County,Ocean Beach,http://www.villageofoceanbeach.org +New York,Monroe County,Ogden,http://www.ogdenny.com/ +New York,St. Lawrence County,Ogdensburg,http://www.ogdensburg.org/ +New York,Nassau County,Old Brookville,http://www.oldbrookville.net +New York,Suffolk County,Old Field,http://www.oldfieldny.org +New York,Nassau County,Old Westbury,http://www.villageofoldwestbury.org +New York,Cattaraugus County,Olean,http://www.cityofolean.org +New York,Madison County,Oneida,http://www.oneidacity.com +New York,Otsego County,Oneonta,http://www.oneonta.ny.us +New York,Fulton County,Oppenheim,http://townofoppenheim.com +New York,Rockland County,Orangetown,https://www.orangetown.com +New York,Erie County,Orchard Park (town),http://www.orchardparkny.org +New York,Erie County,Orchard Park (village),http://orchardparkvillage.org +New York,Oneida County,Oriskany,http://www.oriskany.org/ +New York,Westchester County,Ossining (town),http://www.townofossining.com/ +New York,Westchester County,Ossining (village),http://villageofossining.org +New York,Oswego County,Oswego,http://www.oswegony.org/ +New York,Otsego County,Otego (town),https://townofotego.com/ +New York,Otsego County,Otsego,http://townofotsego.com/ +New York,Seneca County,Ovid (town),https://www.townofovid.net/ +New York,Tioga County,Owego,http://www.townofowego.com +New York,Tioga County,Owego (village),http://www.villageofowego.com/ +New York,Chenango County,Oxford,http://townofoxfordny.com +New York,Chenango County,Oxford (village),http://villageofoxfordny.com +New York,Nassau County,Oyster Bay (town),https://www.oysterbaytown.com/ +New York,Chenango County,Oyster Bay Cove,http://www.oysterbaycove.net +New York,Steuben County,Painted Post,http://villageofpaintedpost.com/ +New York,Wayne County,Palmyra (town),http://www.palmyrany.com/ +New York,Wayne County,Palmyra (village),http://www.palmyrany.com +New York,Chautauqua County,Panama,http://www.panamany.org +New York,Oneida County,Paris,https://townparis.digitaltowpath.org:10026/content +New York,Oswego County,Parish,https://townofparish-ny.us/ +New York,Monroe County,Parma,http://www.parmany.org/ +New York,Suffolk County,Patchogue,http://www.patchoguevillage.org +New York,Dutchess County,Pawling (town),http://www.pawling.org +New York,Dutchess County,Pawling (village),http://www.villageofpawling.org +New York,Dutchess County,Peekskill,http://www.cityofpeekskill.com/ +New York,Westchester County,Pelham,http://www.townofpelham.com/ +New York,Westchester County,Pelham (village),http://www.pelhamgov.com +New York,Westchester County,Pelham Manor,http://www.pelhammanor.org/ +New York,Yates County,Penn Yan,http://www.villageofpennyan.com +New York,Monroe County,Perinton,http://www.perinton.org +New York,Wyoming County,Perry,https://www.townofperry.com +New York,Wyoming County,Perry (village),http://www.villageofperry.com +New York,Cattaraugus County,Persia,http://persiany.org +New York,Ontario County,Phelps,http://www.phelpsny.com/ +New York,Jefferson County,Philadelphia,http://townofphiladelphiany.com +New York,Jefferson County,Philadelphia (village),http://townofphiladelphiany.com/ +New York,Putnam County,Philipstown,http://philipstown.com/ +New York,Columbia County,Philmont,http://www.philmont.org +New York,Oswego County,Phoenix,http://villageofphoenix-ny.gov/ +New York,Rockland County,Piermont,http://piermont-ny.org/ +New York,Monroe County,Pittsford,http://www.townofpittsford.org/ +New York,Monroe County,Pittsford (village),http://villageofpittsford.org +New York,Rensselaer County,Pittstown,https://townpittstown.digitaltowpath.org:10800/content +New York,Nassau County,Plandome,https://www.villageofplandome.org/ +New York,Nassau County,Plandome Heights,http://www.plandomeheights-ny.gov +New York,Nassau County,Plandome Manor,http://plandomemanor.com +New York,Clinton County,Plattsburgh (city),http://www.cityofplattsburgh-ny.gov/ +New York,Westchester County,Pleasantville,http://www.pleasantville-ny.gov +New York,Herkimer County,Poland,http://www.herkimercounty.org/content/CommunityCategories/Home/:item=1&field=groups;/content/CommunityGroups/View/22 +New York,Chautauqua County,Pomfret,http://townofpomfretny.org +New York,Rockland County,Pomona,https://www.pomonavillage.com/ +New York,Suffolk County,Poquott,http://www.villageofpoquott.com +New York,Cayuga County,Port Byron,http://www.cayugacounty.us/towns/portbyron/Local-Government +New York,Westchester County,Port Chester,http://portchesterny.com +New York,Dickinson,Port Dickinson,http://www.portdickinsonny.us +New York,Suffolk County,Port Jefferson,http://www.portjeff.com +New York,Orange County,Port Jervis,https://www.portjervisny.gov +New York,Nassau County,Port Washington North,http://www.portwashingtonnorth.org +New York,Niagara County,Porter,https://www.townofporter.net +New York,Chautauqua County,Portland,http://townofportland.org +New York,Cattaraugus County,Portville,https://www.portvilleny.net/ +New York,Cattaraugus County,Portville (village),http://www.portvilleny.net +New York,St. Lawrence County,Potsdam,https://potsdamny.us/ +New York,St. Lawrence County,Potsdam (village),http://vi.potsdam.ny.us/content +New York,Dutchess County,Poughkeepsie,http://www.cityofpoughkeepsie.com +New York,Dutchess County,Poughkeepsie (town),http://www.townofpoughkeepsie.com +New York,Oswego County,Pulaski,https://villagepulaski.digitaltowpath.org:10789/content +New York,Suffolk County,Quogue,http://www.villageofquogue.com +New York,Rockland County,Ramapo,http://www.ramapo.org/ +New York,Albany County,Ravena,http://www.villageofravena.com +New York,Wayne County,Red Creek,http://www.wolcottny.org/village-of-red-creek.html +New York,Dutchess County,Red Hook,http://redhook.org +New York,Dutchess County,Red Hook (village),http://redhooknyvillage.org +New York,Oneida County,Remsen (village),http://www.villageofremsen.org +New York,Rensselaer County,Rensselaer,http://www.rensselaerny.gov/ +New York,Dutchess County,Rhinebeck (town),https://www.rhinebeckny.gov/ +New York,Dutchess County,Rhinebeck (village),http://www.rhinebecknyvillage.org +New York,Allegany County,Richburg,http://richburgny.org +New York,Otsego County,Richfield Springs,http://villageofrichfieldsprings-ny.org/ +New York,Oswego County,Richland,https://www.townofrichland.org/ +New York,Schoharie County,Richmondville,https://www4.schohariecounty-ny.gov/government/town-of-richmondville/ +New York,Schoharie County,Richmondville (village),http://www.schohariecounty-ny.gov/CountyWebSite/villric/index.jsp +New York,Monroe County,Riga,https://www.townofriga.com/ +New York,Monroe County,Rochester,https://www.cityofrochester.gov +New York,Monroe County,Rockville Centre,http://www.rvcny.gov/ +New York,Oneida County,Rome,http://romenewyork.com/ +New York,Seneca County,Romulus,http://www.romulustown.com/ +New York,Nassau County,Roslyn,http://www.roslynny.gov/ +New York,Nassau County,Roslyn Estates,http://www.villageofroslynestates.com +New York,Nassau County,Roslyn Harbor,http://www.roslynharbor.org +New York,Saratoga County,Round Lake,http://www.roundlakevillage.org/ +New York,Clinton County,Rouses Point,http://www.rousespointny.com +New York,Yates County,Rushville,http://www.villageofrushville.com +New York,Yates County,Russell Gardens,http://www.russellgardens.com +New York,Herkimer County,Russia,http://townofrussia.com +New York,Westchester County,Rye,http://www.ryeny.gov/ +New York,Westchester County,Rye (town),http://www.townofryeny.com +New York,Westchester County,Rye Brook,http://www.ryebrook.org +New York,Jefferson County,Saddle Rock,http://saddlerockny.gov +New York,Suffolk County,Sag Harbor,http://sagharborny.gov +New York,Suffolk County,Sagaponack,http://www.sagaponackvillage.org +New York,Cattaraugus County,Salamanca (city),http://www.salmun.com +New York,Onondaga County,Salina,http://salina.ny.us +New York,Suffolk County,Saltaire,http://www.saltaire.org +New York,Nassau County,Sands Point,https://www.sandspoint.gov/ +New York,Clinton County,Saranac,http://www.townofsaranac.com +New York,Franklin County,Saranac Lake,http://www.saranaclakeny.gov +New York,Saratoga County,Saratoga,http://www.townofsaratoga.com/}Town%20website +New York,Saratoga County,Saratoga Springs,http://www.saratoga-springs.org/ +New York,Ulster County,Saugerties (village),http://village.saugerties.ny.us/content +New York,Westchester County,Scarsdale,http://www.scarsdale.com/ +New York,Rensselaer County,Schaghticoke (town),http://www.townofschaghticoke.org +New York,Schenectady County,Schenectady,http://www.cityofschenectady.com/ +New York,Rensselaer County,Schodack,http://www.schodack.org/ +New York,Schoharie County,Schoharie,https://www4.schohariecounty-ny.gov/government/town-of-schoharie/ +New York,Schoharie County,Schoharie (village),http://www.schohariecounty-ny.gov/CountyWebSite/villsch/index.jsp +New York,Oswego County,Schroeppel,http://townofschroeppel.com/ +New York,Saratoga County,Schuylerville,http://www.villageofschuylerville.org/ +New York,Glenville,Scotia,http://www.villageofscotia.org +New York,Monroe County,Scottsville,http://www.scottsvilleny.org/ +New York,Monroe County,Sea Cliff,http://www.seacliff-ny.gov +New York,Seneca County,Seneca Falls,http://www.senecafalls.com/ +New York,Suffolk County,Shelter Island,http://www.shelterislandtown.us +New York,Chenango County,Sherburne,http://www.sherburne.org +New York,Chenango County,Sherburne (village),http://www.sherburne.org +New York,Chautauqua County,Sherman,http://shermanny.org +New York,Chautauqua County,Sherman (village),http://shermanny.org +New York,Oneida County,Sherrill,http://www.sherrillny.org +New York,Suffolk County,Shoreham,https://shorehamvillage.org/ +New York,Ontario County,Shortsville,http://villageofshortsvilleny.us/ +New York,Delaware County,Sidney,https://townofsidney.com/ +New York,Delaware County,Sidney (village),http://villageofsidney.org +New York,Chautauqua County,Silver Creek,http://silvercreekny.com +New York,Wyoming County,Silver Springs,http://www.wyomingco.net/towns/villageofsilversprings.htm +New York,Chautauqua County,Sinclairville,http://sinclairvilleny.org/ +New York,Onondaga County,Skaneateles (town),http://townofskaneateles.com +New York,Chautauqua County,Skaneateles (village),http://www.villageofskaneateles.com +New York,Westchester County,Sleepy Hollow,http://www.sleepyhollowny.gov/ +New York,Erie County,Sloan,http://ns.villageofsloan.org +New York,Rockland County,Sloatsburg,http://www.sloatsburgny.com +New York,Suffolk County,Smithtown,https://www.smithtownny.gov/ +New York,Wayne County,Sodus,https://www.townofsodus.net/ +New York,Wayne County,Sodus (village),http://villageofsodus.org/ +New York,Wayne County,Sodus Point,http://www.soduspoint.info/ +New York,Onondaga County,Solvay,http://villageofsolvay.com +New York,Orange County,South Blooming Grove,http://www.villageofsouthbloominggrove.com/ +New York,Cattaraugus County,South Dayton,http://www.southdaytonny.org +New York,Cattaraugus County,South Floral Park,http://www.southfloralpark.org +New York,Saratoga County,South Glens Falls,http://www.sgfny.com/ +New York,Rockland County,South Nyack,http://southnyack.ny.gov +New York,Suffolk County,Southampton,http://www.southamptontownny.gov +New York,Suffolk County,Southampton (village),http://www.southamptonvillage.org +New York,Putnam County,Southeast,http://www.southeast-ny.gov +New York,Suffolk County,Southold (town),http://southoldtownny.gov +New York,Livingston County,Sparta,http://www.sparta-ny.org +New York,Hamilton County,Speculator,https://www.villageofspeculator.com/ +New York,Tioga County,Spencer (village),http://villageofspencer.com +New York,Monroe County,Spencerport,http://www.vil.spencerport.ny.us/ +New York,Rockland County,Spring Valley,http://www.villagespringvalley.org +New York,Cayuga County,Springport,https://sites.google.com/site/springportny/home +New York,Erie County,Springville,http://www.villageofspringvilleny.com +New York,Essex County,St. Armand,http://townofstarmand.com +New York,Delaware County,Stamford,http://townofstamfordny.us +New York,Delaware County,Stamford (village),http://www.stamfordny.com +New York,Cayuga County,Sterling,http://www.cayugacounty.us/sterling +New York,Delaware County,Stewart Manor,http://stewartmanor.org +New York,Saratoga County,Stillwater,https://www.stillwaterny.org/ +New York,Rockland County,Suffern,http://www.suffernny.gov/ +New York,Madison County,Sullivan,http://www.townofsullivan.org +New York,Monroe County,Sweden,http://www.townofsweden.org/ +New York,Onondaga County,Syracuse,https://www.syr.gov/ +New York,Greene County,Tannersville,http://www.tannersvilleny.org +New York,Westchester County,Tarrytown,http://www.tarrytowngov.com +New York,Jefferson County,Theresa,http://www.townoftheresany.com +New York,Jefferson County,Theresa (village),http://www.villageoftheresany.com +New York,Jefferson County,Thomaston,http://www.villageofthomaston.org +New York,Dutchess County,Tivoli,http://www.tivoliny.org +New York,Erie County,Tonawanda (city),http://www.tonawandacity.com/ +New York,Erie County,Tonawanda (town),http://www.tonawanda.ny.us +New York,Oneida County,Trenton,https://towntrenton.digitaltowpath.org:10031/content +New York,Rensselaer County,Troy,http://www.troyny.gov/ +New York,Tompkins County,Trumansburg,http://www.trumansburg-ny.gov +New York,Westchester County,Tuckahoe (village),http://www.tuckahoe.com/ +New York,Onondaga County,Tully (village),http://villageoftully.org +New York,Franklin County,Tupper Lake (town),http://www.tupperlakeny.gov +New York,Franklin County,Tupper Lake (village),http://www.tupperlakeny.gov +New York,Orange County,Tuxedo,http://www.tuxedogov.org +New York,Orange County,Tuxedo Park,http://www.tuxedopark-ny.gov/ +New York,Otsego County,Unadilla,http://www.townofunadilla.org/ +New York,Broome County,Union,http://www.townofunion.com +New York,Cayuga County,Union Springs,http://unionspringsny.com +New York,Orange County,Unionville,http://www.unionvilleny.org/ +New York,Orange County,Upper Brookville,http://www.upperbrookville.org +New York,Rockland County,Upper Nyack,http://uppernyack-ny.us/ +New York,Oneida County,Utica,http://www.cityofutica.com +New York,Columbia County,Valatie,http://www.valatievillage.com +New York,Rensselaer County,Valley Stream,http://www.vsvny.org +New York,Onondaga County,Van Buren,http://www.townofvanburen.com +New York,Oneida County,Vernon,https://townofvernon.com/ +New York,Chemung County,Veteran,https://townofveteran.org/ +New York,Ontario County,Victor,http://www.victorny.org +New York,Saratoga County,Victory,http://www.villageofvictory.org +New York,Oneida County,Vienna,https://townvienna.digitaltowpath.org:10024/content +New York,Suffolk County,Village of the Branch,http://www.villageofthebranch.net +New York,Albany County,Voorheesville,http://www.villageofvoorheesville.com/ +New York,Orange County,Walden,http://www.villageofwalden.org/ +New York,Delaware County,Walton (town),http://townofwalton.org +New York,Delaware County,Walton (village),http://villageofwalton.com +New York,Dutchess County,Wappinger,http://www.townofwappingerny.gov +New York,Dutchess County,Wappingers Falls,http://www.wappingersfallsny.gov +New York,Wyoming County,Warsaw (village),http://www.villageofwarsaw.org/ +New York,Orange County,Warwick,http://www.townofwarwick.org +New York,Orange County,Warwick (village),https://villageofwarwick.org/ +New York,Dutchess County,Washington,http://www.washingtonny.org +New York,Orange County,Washingtonville,http://www.washingtonville-ny.gov +New York,Saratoga County,Waterford (village),http://www.waterfordny.org/ +New York,Seneca County,Waterloo (town),http://town.waterlootown.org/ +New York,Seneca County,Waterloo (village),http://www.waterloony.com/ +New York,Jefferson County,Watertown (city),http://www.watertown-ny.gov +New York,Oneida County,Waterville,http://www.watervilleny.com +New York,Albany County,Watervliet,http://www.watervliet.com +New York,Schuyler County,Watkins Glen,http://www.watkinsglen.us/ +New York,Tioga County,Waverly,http://villageofwaverly.com/ +New York,Ulster County,Wawarsing,https://www.townofwawarsing.net/ +New York,Monroe County,Webster,http://www.ci.webster.ny.us +New York,Monroe County,Webster (village),http://www.villageofwebster.com +New York,Cayuga County,Weedsport,http://villageofweedsport.org +New York,Ashland,Wellsburg,http://villageofwellsburg.com +New York,Allegany County,Wellsville,http://townofwellsvilleny.org +New York,Allegany County,Wellsville (village),http://wellsvilleny.com +New York,Rockland County,Wesley Hills,http://www.wesleyhills.org/ +New York,Suffolk County,West Hampton Dunes,http://whdunes.org +New York,Rockland County,West Haverstraw,http://www.westhaverstraw.org +New York,Herkimer County,West Winfield,http://www.westwinfield.org +New York,Herkimer County,Westbury,http://www.villageofwestbury.org +New York,Chautauqua County,Westfield,http://www.townofwestfield.org +New York,Chautauqua County,Westfield (village),http://www.villageofwestfield.org +New York,Suffolk County,Westhampton Beach,http://westhamptonbeach.org +New York,Monroe County,Wheatland,http://www.townofwheatland.org/ +New York,Westchester County,White Plains,http://www.cityofwhiteplains.com +New York,Oneida County,Whitesboro,https://villagewhitesboro.digitaltowpath.org:10045/content +New York,Oneida County,Whitestown,http://www.whitestown.net/ +New York,Broome County,Whitney Point,http://www.whitneypoint.org +New York,Erie County,Williamsville,http://www.walkablewilliamsville.com +New York,Erie County,Williston Park,http://www.villageofwillistonpark.org +New York,Jefferson County,Wilna,http://townofwilna.com +New York,Broome County,Windsor,http://www.windsorny.org +New York,Broome County,Windsor (village),http://www.villageofwindsor.org +New York,Herkimer County,Winfield (town),http://www.townofwinfieldny.org +New York,Wayne County,Wolcott (town),http://www.townofwolcottny.org/ +New York,Wayne County,Wolcott (village),http://www.wolcottny.org/ +New York,Orange County,Woodbury,http://www.townofwoodbury.com/home.shtml +New York,Sullivan County,Woodsburgh,http://www.woodsburghny.com +New York,Wyoming County,Wyoming,http://www.middleburyny.com/ +New York,Orleans County,Yates,https://townofyates.org/ +New York,Westchester County,Yonkers,http://www.yonkersny.gov/ +New York,Cattaraugus County,Yorkshire (town),http://yorkshireny.org +New York,Niagara County,Youngstown,http://www.youngstownnewyork.us/ +North Carolina,Wake County,Apex,http://www.apexnc.org/ +North Carolina,Randolph County,Asheboro,https://www.asheboronc.gov/ +North Carolina,Buncombe County,Asheville,http://www.ashevillenc.gov +North Carolina,Alamance County,Burlington,http://www.BurlingtonNC.gov +North Carolina,Orange County,Carrboro,http://townofcarrboro.org +North Carolina,Cumberland County,Cary,https://www.carync.gov/ +North Carolina,Orange County,Chapel Hill,http://www.townofchapelhill.org +North Carolina,Mecklenburg County,Charlotte,http://charlottenc.gov +North Carolina,Johnston County,Clayton,http://www.townofclaytonnc.org +North Carolina,Forsyth County,Clemmons,http://clemmons.org +North Carolina,Cabarrus County,Concord,http://www.concordnc.gov +North Carolina,Mecklenburg County,Cornelius,http://www.cornelius.org +North Carolina,Durham County,Durham,http://durhamnc.gov/ +North Carolina,Cumberland County,Fayetteville,http://www.ci.fayetteville.nc.us +North Carolina,Wake County,Fuquay-Varina,http://www.fuquay-varina.org +North Carolina,Wake County,Garner,http://www.garnernc.gov +North Carolina,Gaston County,Gastonia,http://www.cityofgastonia.com +North Carolina,Wayne County,Goldsboro,http://www.goldsboronc.gov/ +North Carolina,Guilford County,Greensboro,http://www.greensboro-nc.gov +North Carolina,Pitt County,Greenville,http://www.greenvillenc.gov/ +North Carolina,Catawba County,Hickory,http://www.hickorync.gov +North Carolina,Guilford County,High Point,http://www.highpointnc.gov +North Carolina,Wake County,Holly Springs,http://www.hollyspringsnc.us +North Carolina,Mecklenburg County,Huntersville,http://www.huntersville.org +North Carolina,Union County,Indian Trail,http://www.indiantrail.org/ +North Carolina,Onslow County,Jacksonville,http://www.ci.jacksonville.nc.us +North Carolina,Cabarrus County,Kannapolis,http://kannapolisnc.gov +North Carolina,Forsyth County,Kernersville,http://toknc.com +North Carolina,Lenoir County,Kinston,http://www.ci.kinston.nc.us +North Carolina,Wake County,Knightdale,http://www.knightdalenc.gov +North Carolina,Brunswick County,Leland,http://www.townofleland.com +North Carolina,Davidson County,Lexington,http://www.lexingtonnc.gov +North Carolina,Mecklenburg County,Matthews,http://www.matthewsnc.gov +North Carolina,Mecklenburg County,Mint Hill,http://www.minthill.com +North Carolina,Union County,Monroe,http://www.monroenc.org +North Carolina,Iredell County,Mooresville,http://www.mooresvillenc.gov +North Carolina,Wake County,Morrisville,http://www.townofmorrisville.org/ +North Carolina,Craven County,New Bern,http://newbernnc.gov +North Carolina,Wake County,Raleigh,http://raleighnc.gov +North Carolina,Edgecombe County,Rocky Mount,http://www.rockymountnc.gov +North Carolina,Rowan County,Salisbury,http://www.salisburync.gov +North Carolina,Lee County,Sanford,http://www.sanfordnc.net +North Carolina,Cleveland County,Shelby,http://www.cityofshelby.com +North Carolina,Iredell County,Statesville,http://www.statesvillenc.net +North Carolina,Davidson County,Thomasville,http://www.thomasville-nc.gov +North Carolina,Wake County,Wake Forest,http://www.wakeforestnc.gov/ +North Carolina,Union County,Waxhaw,http://www.waxhaw.com/ +North Carolina,New Hanover County,Wilmington,http://www.wilmingtonnc.gov +North Carolina,Wilson County,Wilson,http://wilsonnc.org +North Carolina,Forsyth County,Winston-Salem,http://www.cityofws.org +North Dakota,McKenzie County,Alexander,https://www.cityofalexandernd.com/ +North Dakota,Morton County,Almont,http://www.sims-almont.us/ +North Dakota,McHenry County,Anamoose,http://anamoose.com/ +North Dakota,Cass County,Argusville,http://www.cityofargusville.com +North Dakota,McKenzie County,Arnegard,https://www.arnegardnd.com/ +North Dakota,McIntosh County,Ashley,https://www.ashley-nd.com/ +North Dakota,Golden Valley County,Beach,http://www.beachnd.com/ +North Dakota,Stark County,Belfield,http://www.cityofbelfield.com/ +North Dakota,Ward County,Berthold,https://berthold-nd.gov/ +North Dakota,Mercer County,Beulah,https://www.beulahnd.org/ +North Dakota,Burleigh County,Bismarck,http://www.bismarcknd.gov +North Dakota,Bottineau County,Bottineau,https://bottineau.govoffice.com/ +North Dakota,Burke County,Bowbells,http://www.bowbellsnd.com/ +North Dakota,Bowman County,Bowman,https://bowmannd.com/ +North Dakota,Cass County,Buffalo,http://www.buffalond.com/ +North Dakota,Ward County,Burlington,https://www.burlingtonnd.gov/ +North Dakota,Traill County,Buxton,http://www.buxtonnd.com +North Dakota,Towner County,Cando,http://www.candond.com/ +North Dakota,Foster County,Carrington,https://www.carringtonnd.com/ +North Dakota,Cass County,Casselton,http://www.casselton.com/ +North Dakota,Pembina County,Cavalier,http://www.cavaliernd.com/ +North Dakota,Oliver County,Center,https://www.centernd.net/ +North Dakota,Griggs County,Cooperstown,https://www.cooperstownnd.com/ +North Dakota,Divide County,Crosby,https://dividecountynd.hosted.civiclive.com/cities/city_of_crosby +North Dakota,Ramsey County,Devils Lake,http://www.devilslakend.com/ +North Dakota,Stark County,Dickinson,http://www.dickinsongov.com/ +North Dakota,Pembina County,Drayton,http://draytonnd.com/ +North Dakota,Dunn County,Dunn Center,https://www.cityofdunncenter.com/ +North Dakota,Rolette County,Dunseith,https://dunseithnd.com/city.html +North Dakota,LaMoure County,Edgeley,http://www.edgeley.com/ +North Dakota,Walsh County,Edinburg,http://www.edinburgnd.com/ +North Dakota,Grant County,Elgin,http://www.elginnorthdakota.com/ +North Dakota,Dickey County,Ellendale,http://www.ellendalend.com +North Dakota,Grand Forks County,Emerado,http://www.cityofemerado.com/ +North Dakota,Ransom County,Enderlin,http://enderlinnd.com/ +North Dakota,Williams County,Epping,https://epping.govoffice.com/ +North Dakota,Cass County,Fargo,https://www.fargond.gov/ +North Dakota,Wells County,Fessenden,http://fessendennd.com/ +North Dakota,Steele County,Finley,https://finleynd.com/ +North Dakota,Sargent County,Forman,https://www.formannd.com/ +North Dakota,Cass County,Frontier,http://www.frontier-nd.com/ +North Dakota,Logan County,Gackle,http://www.gacklend.com/ +North Dakota,McLean County,Garrison,http://www.garrisonnd.com/ +North Dakota,Morton County,Glen Ullin,http://www.glen-ullin.com/ +North Dakota,Golden Valley County,Golva,https://www.beachnd.com/2150/Golva +North Dakota,Walsh County,Grafton,https://www.graftongov.com +North Dakota,Grand Forks County,Grand Forks,http://www.grandforksgov.com/ +North Dakota,Williams County,Grenora,https://www.cityofgrenora.com/ +North Dakota,Sargent County,Gwinner,https://www.gwinnernd.com/ +North Dakota,Dunn County,Halliday,https://www.cityofhalliday.com/ +North Dakota,Ramsey County,Hampden,http://hampden.wordpress.com/ +North Dakota,Richland County,Hankinson,http://www.hankinsonnd.com +North Dakota,Griggs County,Hannaford,http://www.hannafordnd.com/ +North Dakota,Wells County,Harvey,https://harveynd.com/ +North Dakota,Cass County,Harwood,http://www.cityofharwood.com/ +North Dakota,Traill County,Hatton,http://www.hattonnd.com/ +North Dakota,Emmons County,Hazelton,http://hazeltonnorthdakota.com/ +North Dakota,Mercer County,Hazen,https://www.hazennd.org/ +North Dakota,Morton County,Hebron,http://www.hebronnd.org/ +North Dakota,Adams County,Hettinger,https://www.hettingernd.com/ +North Dakota,Traill County,Hillsboro,http://www.hillsboro-nd.com/ +North Dakota,Steele County,Hope,https://www.hopend.com/ +North Dakota,Cass County,Horace,http://www.cityofhorace.com +North Dakota,Cass County,Hunter,https://www.cityofhunter.com/ +North Dakota,Stutsman County,Jamestown,http://www.jamestownnd.gov/ +North Dakota,Ward County,Kenmare,http://www.kenmarend.com/ +North Dakota,Stutsman County,Kensal,http://kensalnd.com +North Dakota,Dunn County,Killdeer,https://www.killdeer.com/ +North Dakota,Cass County,Kindred,http://cityofkindrednd.com/ +North Dakota,LaMoure County,Kulm,https://www.kulmnd.com/ +North Dakota,Nelson County,Lakota,https://www.lakota-nd.com/ +North Dakota,LaMoure County,LaMoure,https://www.lamourend.com/ +North Dakota,Cavalier County,Langdon,https://www.cityoflangdon.com/ +North Dakota,Grand Forks County,Larimore,http://www.larimorend.com/ +North Dakota,Benson County,Leeds,http://www.leedsnorthdakota.com/ +North Dakota,Grant County,Leith,https://www.pbs.org/independentlens/documentaries/welcome-to-leith/ +North Dakota,Cass County,Leonard,http://www.leonardnd.com/ +North Dakota,Richland County,Lidgerwood,https://www.cityoflidgerwoodnd.com/ +North Dakota,Burleigh County,Lincoln,http://www.cityoflincolnnd.com/ +North Dakota,Emmons County,Linton,https://lintonnd.org/ +North Dakota,Ransom County,Lisbon,https://cityoflisbon.net/ +North Dakota,Ward County,Makoti,http://www.makotind.com/ +North Dakota,Morton County,Mandan,http://www.cityofmandan.com/ +North Dakota,Cass County,Mapleton,http://www.mapletonnd.com/ +North Dakota,Slope County,Marmarth,http://www.marmarth.org/ +North Dakota,McLean County,Max,http://www.maxnd.com/ +North Dakota,Traill County,Mayville,http://www.mayvilleportland.com/ +North Dakota,Sheridan County,McClusky,http://mccluskynd.com/ +North Dakota,Nelson County,McVille,http://www.mcville.com/ +North Dakota,Stutsman County,Medina,https://www.medinand.com/ +North Dakota,Billings County,Medora,https://medorand.com/ +North Dakota,McLean County,Mercer,http://www.mercernd.org/ +North Dakota,Nelson County,Michigan City,http://www.michigannd.com/ +North Dakota,Sargent County,Milnor,https://www.milnornd.com/ +North Dakota,Benson County,Minnewaukan,https://www.minnewaukan.com/ +North Dakota,Ward County,Minot,http://www.minotnd.org +North Dakota,Walsh County,Minto,https://cityofminto.com/ +North Dakota,Renville County,Mohall,https://mohallndak.com/ +North Dakota,Hettinger County,Mott,http://www.discovermott.com/ +North Dakota,Logan County,Napoleon,http://www.napoleonnd.com/ +North Dakota,Hettinger County,New England,https://ndnewengland.com/ +North Dakota,Grant County,New Leipzig,https://newleipzig.com/ +North Dakota,Eddy County,New Rockford,https://www.cityofnewrockford.com/ +North Dakota,Morton County,New Salem,http://www.newsalem-nd.com/ +North Dakota,Mountrail County,New Town,https://www.citynewtownnd.com/ +North Dakota,Grand Forks County,Northwood,http://www.discovernorthwood.com/ +North Dakota,Dickey County,Oakes,https://oakesnd.com/ +North Dakota,Cass County,Oxbow,http://www.oxbownd.com +North Dakota,Cass County,Page,http://www.pagend.com/ +North Dakota,Walsh County,Park River,https://www.cityofparkriver.com/ +North Dakota,Mountrail County,Parshall,https://www.parshallnd.com/ +North Dakota,Nelson County,Pekin,http://www.pekinnd.com/ +North Dakota,Pembina County,Pembina,http://cityofpembina.org +North Dakota,Kidder County,Pettibone,http://www.pettibone.us +North Dakota,Mercer County,Pick City,http://www.pickcitynd.com/ +North Dakota,Mountrail County,Plaza,http://www.plazand.com/ +North Dakota,Traill County,Portland,http://www.mayvilleportland.com/ +North Dakota,Burke County,Powers Lake,https://www.powerslakend.com/ +North Dakota,Williams County,Ray,https://www.raynd.com/ +North Dakota,Cass County,Reile's Acres,http://www.reilesacresnd.org +North Dakota,Traill County,Reynolds,http://www.reynoldsnd.com/ +North Dakota,Stark County,Richardton,http://www.richardtonnd.com/ +North Dakota,McLean County,Riverdale,https://www.riverdalenorthdakota.com/ +North Dakota,Rolette County,Rolette,http://www.rolettend.com/ +North Dakota,Rolette County,Rolla,http://www.ndrolla.com/ +North Dakota,Mountrail County,Ross,https://cityofross.com/ +North Dakota,Pierce County,Rugby,https://www.cityofrugbynd.com/ +North Dakota,Ward County,Ryder,http://www.rydernd.com/ +North Dakota,Renville County,Sherwood,http://sherwoodnd.com/main.htm +North Dakota,Mountrail County,Stanley,http://www.stanleynd.com +North Dakota,Mercer County,Stanton,http://www.stantonnd.com/ +North Dakota,Kidder County,Steele,http://www.steelend.com/ +North Dakota,Emmons County,Strasburg,https://strasburgnd.govoffice3.com/ +North Dakota,Ward County,Surrey,http://www.surreynd.org/ +North Dakota,Stark County,Taylor,http://cityoftaylornd.net/ +North Dakota,Grand Forks County,Thompson,http://www.cityofthompsonnd.com/ +North Dakota,Williams County,Tioga,http://www.tiogand.net/ +North Dakota,Nelson County,Tolna,http://www.cityoftolna.com/ +North Dakota,Cass County,Tower City,http://www.towercitynd.com/ +North Dakota,McHenry County,Towner,http://www.townernd.com/ +North Dakota,McLean County,Turtle Lake,https://www.turtlelakend.org/ +North Dakota,McLean County,Underwood,http://www.underwoodnd.org/ +North Dakota,Barnes County,Valley City,http://www.valleycity.us +North Dakota,McHenry County,Velva,https://velvand.com/ +North Dakota,Richland County,Wahpeton,http://www.wahpeton.com +North Dakota,Pembina County,Walhalla,http://walhalland.org/index.html +North Dakota,McLean County,Washburn,https://www.washburnnd.com/ +North Dakota,McKenzie County,Watford City,http://www.cityofwatfordcity.com/ +North Dakota,Cass County,West Fargo,http://www.westfargond.gov/ +North Dakota,Bottineau County,Westhope,https://www.westhopend.com/ +North Dakota,Williams County,Williston,http://www.cityofwilliston.com/ +North Dakota,McLean County,Wilton,http://www.wiltonnd.org/ +North Dakota,Barnes County,Wimbledon,https://wimbledonnd.com/ +North Dakota,McIntosh County,Wishek,https://wishek-nd.com/ +North Dakota,Richland County,Wyndmere,https://cityofwyndmere.com/ +North Dakota,Mercer County,Zap,http://www.wrtc.com/zapnd/ +Ohio,Huntington Township,Aberdeen,https://thevillageofaberdeenoh.com/ +Ohio,Liberty Township,Ada,https://www.adaoh.org/ +Ohio,Miami Township,Addyston,http://www.addystonohio.org +Ohio,Summit County,Akron,https://www.akronohio.gov/ +Ohio,Licking County,Alexandria,http://www.alexandriaoh.org +Ohio,Stark County,Alliance,http://www.cityofalliance.com +Ohio,Amanda Township,Amanda,http://villageofamanda.com +Ohio,Hamilton County,Amberley,http://www.amberleyvillage.org +Ohio,Ames Township,Amesville,http://www.amesvilleohio.org/ +Ohio,Lorain County,Amherst,http://www.amherstohio.org/ +Ohio,Ashtabula County,Andover,http://www.andovervillage.com/ +Ohio,Shelby County,Anna,https://villageofannaoh.com/ +Ohio,Brown Township,Ansonia,http://www.ansoniaohio.us/index.htm +Ohio,Carryall Township,Antwerp,http://www.antwerpohio.com/ +Ohio,Wayne County,Apple Creek,https://www.apple-creek.org/ +Ohio,Hancock County,Arcadia,https://villageofarcadia.com/ +Ohio,Darke County,Arcanum,http://villageofarcanum.com/ +Ohio,German Township,Archbold,http://www.Archbold.com +Ohio,Hancock County,Arlington,https://villageofarlington.com/ +Ohio,Hamilton County,Arlington Heights,http://www.ahohio.org +Ohio,Ashland County,Ashland,https://www.ashland-ohio.com/ +Ohio,Ashtabula County,Ashtabula,http://www.cityofashtabula.com/ +Ohio,Harrison Township,Ashville,http://ashvilleohio.gov +Ohio,Athens County,Athens,https://www.ci.athens.oh.us/ +Ohio,Seneca County,Attica,http://www.atticaohio.us/ +Ohio,Portage County,Aurora,http://www.auroraoh.com/ +Ohio,Lorain County,Avon,https://www.cityofavon.com/ +Ohio,Lorain County,Avon Lake,https://www.avonlake.org/ +Ohio,Bucks Township,Baltic,https://www.villageofbaltic.org/ +Ohio,Fairfield County,Baltimore,http://www.baltimoreohio.org +Ohio,Summit County,Barberton,https://www.cityofbarberton.com/ +Ohio,Belmont County,Barnesville,http://www.barnesvilleohio.com/ +Ohio,Batavia Township,Batavia,http://bataviavillage.org/ +Ohio,Cuyahoga County,Bay Village,http://www.cityofbayvillage.com/ +Ohio,Sugar Creek Township,Beach City,http://www.beachcityohio.org +Ohio,Cuyahoga County,Beachwood,https://www.beachwoodohio.com/ +Ohio,Greene County,Beavercreek,https://www.beavercreekohio.gov/ +Ohio,Richland Township,Beaverdam,http://www.beaverdamoh.com +Ohio,Cuyahoga County,Bedford,http://www.bedfordoh.gov +Ohio,Cuyahoga County,Bedford Heights,https://www.bedfordheights.gov/ +Ohio,Pultney Township,Bellaire,http://bellaireoh.com/ +Ohio,Greene County,Bellbrook,http://www.cityofbellbrook.org +Ohio,Richland Township,Belle Center,http://bellecenterohio.com +Ohio,Logan County,Bellefontaine,http://www.ci.bellefontaine.oh.us +Ohio,Seneca County,Bellevue,http://thenewcityofbellevue.com +Ohio,Richland County,Bellville,https://villageofbellville.com/ +Ohio,Washington County,Belpre,https://www.cityofbelpre.com/ +Ohio,Cuyahoga County,Bentleyville,http://www.villageofbentleyville.com +Ohio,Cuyahoga County,Berea,https://www.cityofberea.org/ +Ohio,Lucas County,Berkey,http://www.berkeyohio.org +Ohio,Berlin Township,Berlin Heights,http://villageofberlinheights.com/ +Ohio,Tate Township,Bethel,https://bethel-oh.gov/ +Ohio,Franklin County,Bexley,http://www.bexley.org/ +Ohio,Clinton County,Blanchester,https://www.blanvillage.com/ +Ohio,Hamilton County,Blue Ash,http://www.blueash.com +Ohio,Richland Township,Bluffton,https://www.bluffton-ohio.com/ +Ohio,Summit County,Boston Heights,http://www.villageofbostonheights.com/ +Ohio,Shelby County,Botkins,http://www.botkinsohio.com +Ohio,Wood County,Bowling Green,https://www.bgohio.org +Ohio,Miami County,Bradford,http://www.bradfordoh.com/ +Ohio,Cuyahoga County,Bratenahl,http://www.bratenahl.org/ +Ohio,Cuyahoga County,Brecksville,http://www.brecksville.oh.us/ +Ohio,Sugar Creek Township,Brewster,https://www.brewsterohio.com/ +Ohio,Franklin County,Brice,http://www.briceohio.com +Ohio,Cuyahoga County,Broadview Heights,https://www.broadview-heights.org/ +Ohio,Cuyahoga County,Brook Park,https://www.cityofbrookpark.com/ +Ohio,Cuyahoga County,Brooklyn,http://www.brooklynohio.gov/ +Ohio,Cuyahoga County,Brooklyn Heights,http://www.brooklynhts.org/ +Ohio,Montgomery County,Brookville,http://www.brookvilleohio.com/ +Ohio,Medina County,Brunswick,https://www.brunswick.oh.us/ +Ohio,Williams County,Bryan,http://www.cityofbryan.com/ +Ohio,Licking County,Buckeye Lake,http://buckeyelakevillage.com/ +Ohio,Bucyrus Township,Bucyrus,http://www.cityofbucyrusoh.us/ +Ohio,Wayne County,Burbank,http://villageofburbankohio.com/ +Ohio,Geauga County,Burton,http://www.villageofburton.org +Ohio,Jackson Township,Byesville,http://byesvilleoh.gov/ +Ohio,Harrison County,Cadiz,http://www.villageofcadiz.com/ +Ohio,Claridon Township,Caledonia,http://www.caledonia-village.com +Ohio,Guernsey County,Cambridge,http://www.cambridgeoh.org/ +Ohio,Mahoning County,Campbell,http://www.campbellohio.gov/ +Ohio,Stark County,Canal Fulton,http://www.cityofcanalfulton-oh.gov/ +Ohio,Franklin County,Canal Winchester,http://www.canalwinchesterohio.gov +Ohio,Mahoning County,Canfield,http://www.ci.canfield.oh.us/ +Ohio,Stark County,Canton,https://www.cantonohio.gov/ +Ohio,Cardington Township,Cardington,http://www.cardington.org/ +Ohio,Crawford Township,Carey,http://www.careyohio.org/ +Ohio,Warren County,Carlisle,http://www.carlisleoh.org/ +Ohio,Center Township,Carrollton,http://www.villageofcarrollton.com +Ohio,Margaretta Township,Castalia,https://www.villageofcastalia.com +Ohio,Greene County,Cedarville,https://www.cedarville.us/ +Ohio,Center Township,Celina,http://www.ci.celina.oh.us/ +Ohio,Hilliar Township,Centerburg,http://www.centerburgoh.org +Ohio,Montgomery County,Centerville,https://www.centervilleohio.gov/ +Ohio,Cuyahoga County,Chagrin Falls,http://www.chagrin-falls.org/ +Ohio,Geauga County,Chardon,http://www.chardon.cc/ +Ohio,Hamilton County,Cheviot,http://www.cheviot.org/ +Ohio,Ross County,Chillicothe,http://ci.chillicothe.oh.us/ +Ohio,Jackson Township,Christiansburg,http://www.christiansburgohio.org +Ohio,Hamilton County,Cincinnati,http://cincinnati-oh.gov +Ohio,Hamilton County,Circleville,http://ci.circleville.oh.us/ +Ohio,Montgomery County,Clayton,http://www.clayton.oh.us/ +Ohio,Cuyahoga County,Cleveland,https://www.clevelandohio.gov/ +Ohio,Cuyahoga County,Cleveland Heights,https://www.clevelandheights.gov +Ohio,Miami Township,Cleves,http://www.cleves.org +Ohio,Summit County,Clinton,http://clintonvillageohio.com/ +Ohio,Sandusky County,Clyde,https://clydeohio.org +Ohio,Butler Township,Coldwater,http://www.villageofcoldwater.com +Ohio,Beaver Township,Columbiana,http://www.columbianaohio.gov +Ohio,Franklin County,Columbus,http://www.columbus.gov +Ohio,Putnam County,Columbus Grove,http://www.columbusgrove.org/ +Ohio,Ashtabula County,Conneaut,http://www.conneautohio.gov/ +Ohio,Tully Township,Convoy,http://www.villageofconvoy.com/ +Ohio,Trumbull County,Cortland,http://www.cityofcortland.org +Ohio,Coshocton County,Coshocton,http://www.cityofcoshocton.com/ +Ohio,Milton Township,Craig Beach,https://www.craigbeachvillage.com/ +Ohio,Jackson Township,Crestline,http://www.crestlineoh.com/ +Ohio,Wayne County,Creston,https://crestonvillage.org/ +Ohio,Perry County,Crooksville,http://www.crooksville.com/ +Ohio,Summit County,Cuyahoga Falls,https://www.cityofcf.com/ +Ohio,Cuyahoga County,Cuyahoga Heights,http://www.cuyahogaheights.com +Ohio,Wayne County,Dalton,https://www.villageofdalton.us/ +Ohio,Union Township,Danville,http://www.danvilleohio.org/ +Ohio,Montgomery County,Dayton,https://daytonohio.gov/ +Ohio,Hamilton County,Deer Park,http://www.deerpark-oh.gov +Ohio,Defiance County,Defiance,http://www.cityofdefiance.com/ +Ohio,Delaware County,Delaware,http://www.delawareohio.net/ +Ohio,Marion Township,Delphos,http://www.cityofdelphos.com/ +Ohio,Fulton County,Delta,https://www.villageofdelta.org/ +Ohio,Henry County,Deshler,https://villageofdeshler.com/ +Ohio,Tuscarawas County,Dover,http://www.doverohio.com/ +Ohio,Wayne County,Doylestown,http://www.doylestown.com/ +Ohio,Jefferson Township,Dresden,http://www.villageofdresden.com/ +Ohio,Franklin County,Dublin,https://dublinohiousa.gov/ +Ohio,Osnaburg Township,East Canton,https://villageeastcanton.net/ +Ohio,Cuyahoga County,East Cleveland,http://www.eastcleveland.org/ +Ohio,Columbiana County,East Liverpool,http://www.eastliverpool.com/ +Ohio,Columbiana County,East Palestine,http://eastpalestine-oh.gov/ +Ohio,Pike Township,East Sparta,http://eastspartavillage.com/ +Ohio,Lake County,Eastlake,http://eastlakeohio.com +Ohio,Preble County,Eaton,http://cityofeaton.org/index.html +Ohio,Williams County,Edgerton,http://www.edgerton-ohio.com/ +Ohio,Williams County,Edon,http://www.edon-ohio.com/ +Ohio,Ottawa County,Elmore,http://www.village.elmore.oh.us/ +Ohio,Preble County,Elyria,https://www.cityofelyria.org/ +Ohio,Montgomery County,Englewood,http://www.englewood.oh.us/ +Ohio,Mad River Township,Enon,http://www.enonohio.com/ +Ohio,Cuyahoga County,Euclid,http://www.cityofeuclid.com/ +Ohio,Hamilton County,Evendale,http://www.evendaleohio.org +Ohio,Greene County,Fairborn,https://www.fairbornoh.gov +Ohio,Hamilton County,Fairfax,https://fairfaxoh.com/ +Ohio,Butler County,Fairfield,https://www.fairfield-city.org/ +Ohio,Summit County,Fairlawn,http://www.cityoffairlawn.com/ +Ohio,Painesville Township,Fairport Harbor,http://www.fairportharbor.org +Ohio,Cuyahoga County,Fairview Park,http://www.fairviewpark.org +Ohio,Gorham Township,Fayette,http://www.villageoffayette.com +Ohio,Hancock County,Findlay,https://www.findlayohio.gov/ +Ohio,Brown Township,Fletcher,https://fletcherohio.us/ +Ohio,Hardin County,Forest,https://www.villageofforest.com/ +Ohio,Hamilton County,Forest Park,https://www.forestpark.org/ +Ohio,Shelby County,Fort Loramie,http://www.fortloramie.com/ +Ohio,Gibson Township,Fort Recovery,http://www.fortrecovery.org/ +Ohio,Seneca County,Fostoria,http://www.fostoriaohio.gov/ +Ohio,Warren County,Franklin,http://www.franklinohio.org/ +Ohio,Jackson Township,Frazeysburg,http://www.frazeysburg.us +Ohio,Salt Creek Township,Fredericksburg,https://fredericksburgohio.org/ +Ohio,Knox County,Fredericktown,http://www.fredericktownohio.net +Ohio,Ballville Township,Fremont,https://www.fremontohio.org/ +Ohio,Franklin County,Gahanna,https://www.gahanna.gov/ +Ohio,Berkshire Township,Galena,https://galenaohio.gov/ +Ohio,Crawford County,Galion,http://www.galion.city +Ohio,Gallipolis Township,Gallipolis,http://www.cityofgallipolis.com +Ohio,College Township,Gambier,http://www.villageofgambier.org/ +Ohio,Cuyahoga County,Garfield Heights,https://www.garfieldhts.org/ +Ohio,Portage County,Garrettsville,http://garrettsville.org +Ohio,Cuyahoga County,Gates Mills,http://www.gatesmillsvillage.com/ +Ohio,Geneva Township,Geneva,https://www.genevaohio.gov +Ohio,Ashtabula County,Geneva-on-the-Lake,http://www.visitgenevaonthelake.com +Ohio,Pleasant Township,Georgetown,http://www.georgetownohio.us/ +Ohio,Montgomery County,Germantown,http://www.germantown.oh.us/ +Ohio,Trumbull County,Girard,http://www.cityofgirard.com/ +Ohio,Hamilton County,Glendale,http://www.glendaleohio.org +Ohio,Cuyahoga County,Glenwillow,http://www.glenwillow-oh.gov/ +Ohio,Medina County,Gloria Glens Park,http://www.gloriaglens.org +Ohio,Hamilton County,Golf Manor,https://www.golfmanoroh.gov/ +Ohio,Lorain County,Grafton,https://villageofgrafton.org/ +Ohio,Grand Rapids Township,Grand Rapids,https://grandrapidsohio.com/ +Ohio,Painesville Township,Grand River,http://www.grandriverohio.net +Ohio,Franklin County,Grandview Heights,http://www.grandviewheights.org/ +Ohio,Licking County,Granville,http://www.granville.oh.us +Ohio,Preble County,Gratis,http://www.gratisohio.org +Ohio,Summit County,Green,https://www.cityofgreen.org/ +Ohio,Sandusky County,Green Springs,https://www.gsohio.org +Ohio,Highland County,Greenfield,http://www.greenfieldohio.net +Ohio,Hamilton County,Greenhills,http://www.greenhillsohio.us +Ohio,Darke County,Greenville,http://www.cityofgreenville.org/ +Ohio,Franklin County,Grove City,https://www.grovecityohio.gov/ +Ohio,Franklin County,Groveport,https://www.groveport.org/ +Ohio,Butler County,Hamilton,https://www.hamilton-oh.gov/ +Ohio,Hamilton County,Harrison,http://www.harrisonohio.gov +Ohio,Licking County,Hartford,http://www.villageofhartfordohio.org/ +Ohio,Lake Township,Hartville,http://www.hartvilleoh.com +Ohio,Warren County,Harveysburg,http://www.villageofharveysburg.org/ +Ohio,Licking County,Heath,http://www.heathohio.gov/ +Ohio,Licking County,Hebron,https://www.hebronvillage.org/ +Ohio,Defiance County,Hicksville,http://www.villageofhicksville.com/ +Ohio,Cuyahoga County,Highland Heights,http://www.highlandhts.com +Ohio,Cuyahoga County,Highland Hills,http://www.vhhohio.org/ +Ohio,Franklin County,Hilliard,https://hilliardohio.gov/ +Ohio,Highland County,Hillsboro,http://www.hillsboroohio.net/ +Ohio,Portage County,Hiram,http://hiramvillage.org/ +Ohio,Williams County,Holiday City,http://www.holidaycityohio.org/ +Ohio,Lucas County,Holland,http://www.hollandohio.com/ +Ohio,Harrison County,Hopedale,http://www.hopedaleohio.com/ +Ohio,Trumbull County,Hubbard,http://www.cityofhubbard-oh.gov/ +Ohio,Montgomery County,Huber Heights,https://www.hhoh.org/ +Ohio,Summit County,Hudson,https://www.hudson.oh.us/ +Ohio,Cuyahoga County,Hunting Valley,http://www.huntingvalley.net/about.cfm +Ohio,McArthur Township,Huntsville,https://huntsvilleohio.net/ +Ohio,Erie County,Huron,http://www.cityofhuron.org/ +Ohio,Cuyahoga County,Independence,http://www.independenceohio.org +Ohio,Hamilton County,Indian Hill,https://indianhill.gov +Ohio,Lawrence County,Ironton,http://www.ironton-ohio.com/ +Ohio,Jackson County,Jackson,http://www.jacksonohio.us/ +Ohio,Shelby County,Jackson Center,http://www.jacksoncenter.com/ +Ohio,Ashtabula County,Jefferson,http://www.jeffersonohio.us/ +Ohio,Ashland County,Jeromesville,https://jeromesville.nationbuilder.com/ +Ohio,Licking County,Johnstown,http://www.johnstownohio.org/ +Ohio,Erie County,Kelleys Island,https://kelleysisland.us/ +Ohio,Portage County,Kent,https://kentohio.org/ +Ohio,Pleasant Township,Kenton,https://cityofkenton.com/ +Ohio,Montgomery County,Kettering,https://www.ketteringoh.org/ +Ohio,Lake County,Kirtland,http://kirtlandohio.com +Ohio,Lake County,Kirtland Hills,https://www.kirtlandhills.org/ +Ohio,Jackson Township,Lafayette,http://www.lafayetteoh.com/ +Ohio,LaGrange Township,LaGrange,https://lagrangeohio.net/ +Ohio,Summit County,Lakemore,http://www.lakemoreohio.org +Ohio,Stokes Township,Lakeview,http://lakeviewohio.com +Ohio,Cuyahoga County,Lakewood,https://lakewoodoh.gov +Ohio,Fairfield County,Lancaster,https://www.ci.lancaster.oh.us/ +Ohio,Montgomery Township,LaRue,http://www.laruevillage.com +Ohio,Warren County,Lebanon,https://www.lebanonohio.gov/ +Ohio,Highland County,Leesburg,http://www.leesburgohio.org/ +Ohio,Columbiana County,Leetonia,http://leetonia.org/ +Ohio,Putnam County,Leipsic,http://www.villageofleipsic.com/ +Ohio,Preble County,Lewisburg,https://lewisburg.webs.com/ +Ohio,Troy Township,Lexington,http://www.lexingtonohio.us/ +Ohio,Liberty Township,Liberty Center,http://lcvillage.com +Ohio,Allen County,Lima,https://www.cityhall.lima.oh.us/ +Ohio,Hamilton County,Lincoln Heights,http://www.vlho.org +Ohio,Cuyahoga County,Linndale,http://www.linndalevillage-oh.gov/ +Ohio,Columbiana County,Lisbon,http://www.lisbonvillage.com/ +Ohio,Fairfield County,Lithopolis,http://www.lithopolis.org/ +Ohio,Franklin County,Lockbourne,http://www.lockbourneohio.us +Ohio,Hamilton County,Lockland,http://www.lockland.com +Ohio,Medina County,Lodi,http://www.villageoflodi.com +Ohio,Hocking County,Logan,http://www.cityofloganohio.com/ +Ohio,Madison County,London,https://www.londonohio.gov/ +Ohio,Lorain County,Lorain,https://www.cityoflorain.org/ +Ohio,Trumbull County,Lordstown,http://www.lordstown.com/ +Ohio,Green Township,Loudonville,http://www.loudonville-oh.us/ +Ohio,Stark County,Louisville,http://www.louisvilleohio.com/ +Ohio,Hamilton County,Loveland,https://www.lovelandoh.gov/ +Ohio,Poland Township,Lowellville,http://www.villageoflowellville.com +Ohio,Troy Township,Luckey,http://luckeyohio.org/ +Ohio,Cuyahoga County,Lyndhurst,https://www.lyndhurstohio.gov/ +Ohio,Summit County,Macedonia,http://www.macedonia.oh.us/ +Ohio,Hamilton County,Madeira,http://www.madeiracity.com +Ohio,Madison Township,Madison,http://www.madisonvillage.org +Ohio,Stark County,Magnolia,http://www.villageofmagnolia.com +Ohio,Warren County,Maineville,http://www.mainevilleoh.com +Ohio,Morgan County,Malta,http://www.malta.20m.com/ +Ohio,Brown Township,Malvern,http://www.villageofmalvern.net/ +Ohio,Adams County,Manchester,http://villageofmanchesterohio.com +Ohio,Richland County,Mansfield,https://www.ci.mansfield.oh.us/ +Ohio,Portage County,Mantua,http://mantuavillage.com/ +Ohio,Cuyahoga County,Maple Heights,https://www.citymapleheights.com/ +Ohio,Franklin County,Marble Cliff,http://www.marblecliff.org/ +Ohio,Danbury Township,Marblehead,http://www.marbleheadvillageohio.com/ +Ohio,Hamilton County,Mariemont,http://www.mariemont.org +Ohio,Washington County,Marietta,http://www.mariettaoh.net/ +Ohio,Marion Township,Marion,https://www.marionohio.us/ +Ohio,Wayne County,Marshallville,http://www.villageofmarshallville.org/ +Ohio,Belmont County,Martins Ferry,http://www.martinsferry.org/ +Ohio,Union County,Marysville,https://www.marysvilleohio.org/ +Ohio,Warren County,Mason,https://www.imaginemason.org/ +Ohio,Stark County,Massillon,https://massillonohio.gov/ +Ohio,Lucas County,Maumee,https://www.maumee.org/ +Ohio,Cuyahoga County,Mayfield,http://www.mayfieldvillage.com/ +Ohio,Cuyahoga County,Mayfield Heights,https://www.mayfieldheights.org/ +Ohio,Hancock County,McComb,https://www.villageofmccomb.com/ +Ohio,Trumbull County,McDonald,https://mcdonaldvillage.com/ +Ohio,Goshen Township,Mechanicsburg,http://www.mechanicsburgohio.org/ +Ohio,Medina County,Medina,http://www.medinaoh.org +Ohio,Union Township,Mendon,http://villageofmendon.com +Ohio,Lake County,Mentor,http://cityofmentor.com +Ohio,Lake County,Mentor-on-the-Lake,http://www.citymol.org +Ohio,Montgomery County,Miamisburg,http://www.ci.miamisburg.oh.us/ +Ohio,Cuyahoga County,Middleburg Heights,https://www.middleburgheights.com +Ohio,Geauga County,Middlefield,http://www.middlefieldohio.com +Ohio,Salisbury Township,Middleport,https://www.middleportohio.com/ +Ohio,Butler County,Middletown,https://www.cityofmiddletown.org/ +Ohio,Norwalk Township,Milan,http://www.milanohio.gov/ +Ohio,Clermont County,Milford,http://www.milfordohio.org +Ohio,Hardy Township,Millersburg,http://www.millersburgohio.com/ +Ohio,Fairfield County,Millersport,http://www.millersportohio.com/ +Ohio,Stark County,Minerva,https://minerva.oh.us/ +Ohio,Franklin County,Minerva Park,http://www.minervapark.org +Ohio,Steubenville Township,Mingo Junction,https://www.mingojct.us/ +Ohio,Jackson Township,Minster,http://www.minsteroh.com/ +Ohio,Summit County,Mogadore,https://mogadorevillage.org/ +Ohio,Butler County,Monroe,http://www.monroeohio.org +Ohio,Huron County,Monroeville,http://www.monroevilleohio.com/ +Ohio,Hamilton County,Montgomery,https://www.montgomeryohio.gov +Ohio,Williams County,Montpelier,http://www.montpelieroh.net/ +Ohio,Montgomery County,Moraine,http://www.ci.moraine.oh.us +Ohio,Cuyahoga County,Moreland Hills,http://www.morelandhills.com/ +Ohio,Union Township,Morristown,http://www.morristownohio.org/ +Ohio,Warren County,Morrow,http://www.vil.morrow.oh.us/ +Ohio,Washington Township,Moscow,https://www.villageofmoscow.org/ +Ohio,Gilead Township,Mount Gilead,http://www.mountgilead.net/ +Ohio,Hamilton County,Mount Healthy,http://www.mthealthy.org +Ohio,Brown County,Mount Orab,https://www.mtoraboh.us/ +Ohio,Knox County,Mount Vernon,http://www.mountvernonohio.org/ +Ohio,Hale Township,Mount Victory,http://www.mountvictory.com/ +Ohio,Summit County,Munroe Falls,http://munroefalls.com +Ohio,Henry County,Napoleon,http://www.napoleonohio.cc/ +Ohio,Stark County,Navarre,http://www.navarreohio.net/ +Ohio,York Township,Nelsonville,https://cityofnelsonville.org/ +Ohio,Franklin County,New Albany,http://www.newalbanyohio.org +Ohio,Scioto County,New Boston,http://www.newbostonvillage.com +Ohio,Auglaize County,New Bremen,http://www.newbremen.com/ +Ohio,Clark County,New Carlisle,http://www.newcarlisle.net +Ohio,Summit County,New Franklin,http://www.newfranklin.org/ +Ohio,Pickaway County,New Holland,http://www.newhollandohio.com +Ohio,Washington Township,New Knoxville,http://www.newknoxville.com/ +Ohio,Montgomery County,New Lebanon,http://www.newlebanonoh.com/ +Ohio,Perry County,New Lexington,http://www.newlexington.org/ +Ohio,Huron County,New London,http://www.newlondonoh.com +Ohio,Springfield Township,New Middletown,http://villageofnewmiddletown.com/ +Ohio,Tuscarawas County,New Philadelphia,http://www.newphilaoh.com/ +Ohio,Ohio Township,New Richmond,http://www.newrichmond.org/ +Ohio,Clinton County,New Vienna,http://newvienna.net/ +Ohio,Crestview Local School District (Columbiana County),New Waterford,https://newwaterford-oh.gov/ +Ohio,Licking County,Newark,http://www.newarkohio.net/ +Ohio,Cuyahoga County,Newburgh Heights,https://newburgh-oh.gov/ +Ohio,Oxford Township,Newcomerstown,http://www.newcomerstownoh.com/ +Ohio,Trumbull County,Newton Falls,http://ci.newtonfalls.oh.us/ +Ohio,Hamilton County,Newtown,http://www.newtownohio.gov/ +Ohio,Trumbull County,Niles,https://www.thecityofniles.com/ +Ohio,Henry Township,North Baltimore,https://www.northbaltimore.org/ +Ohio,Miami Township,North Bend,http://www.northbendohio.org +Ohio,Stark County,North Canton,http://northcantonohio.gov/ +Ohio,Hamilton County,North College Hill,http://www.northcollegehill.org/ +Ohio,Huron County,North Fairfield,http://www.northfairfieldvillage.com +Ohio,Ashtabula County,North Kingsville,http://www.northkingsvilleohio.org/ +Ohio,Rush Township,North Lewisburg,http://www.northlewisburg.com/ +Ohio,Cuyahoga County,North Olmsted,http://www.north-olmsted.com +Ohio,Perry Township,North Perry,http://northperry.org +Ohio,Cuyahoga County,North Randall,http://www.northrandall.com +Ohio,Lorain County,North Ridgeville,http://www.nridgeville.org +Ohio,Cuyahoga County,North Royalton,https://www.northroyalton.org/ +Ohio,Summit County,Northfield,http://www.northfieldvillage-oh.gov/ +Ohio,Wood County,Northwood,http://www.ci.northwood.oh.us/ +Ohio,Summit County,Norton,http://cityofnorton.org +Ohio,Huron County,Norwalk,http://www.norwalkoh.com/ +Ohio,Hamilton County,Norwood,http://www.norwood-ohio.com/ +Ohio,Ottawa County,Oak Harbor,http://www.oakharbor.oh.us/ +Ohio,Jackson County,Oak Hill,http://www.oakhillvillage.net +Ohio,Montgomery County,Oakwood,http://www.ci.oakwood.oh.us/ +Ohio,Cuyahoga County,Oakwood,http://www.oakwoodvillageoh.com/ +Ohio,Montgomery County,Oberlin,http://www.cityofoberlin.com/ +Ohio,Franklin County,Obetz,http://www.obetz.oh.us +Ohio,Liberty Township,Ohio City,http://www.villageofohiocity.org +Ohio,Cuyahoga County,Olmsted Falls,https://www.olmstedfalls.org +Ohio,Richland County,Ontario,http://www.ontarioohio.org/ +Ohio,Cuyahoga County,Orange,http://www.orangevillage.com/ +Ohio,Lucas County,Oregon,https://www.oregonohio.org/ +Ohio,Wayne County,Orrville,http://www.orrville.com/ +Ohio,Ashtabula County,Orwell,http://www.orwellvillage.org/ +Ohio,Putnam County,Ottawa,http://www.ottawaohio.us +Ohio,Lucas County,Ottawa Hills,http://www.ottawahills.org/ +Ohio,Putnam County,Ottoville,http://www.villageofottoville.org/ +Ohio,Stonelick Township,Owensville,http://www.villageofowensville.org +Ohio,Butler County,Oxford,https://www.cityofoxford.org/ +Ohio,Lake County,Painesville,http://www.painesville.com +Ohio,Putnam County,Pandora,http://www.pandoraoh.com/ +Ohio,Cuyahoga County,Parma,http://www.cityofparma-oh.gov +Ohio,Cuyahoga County,Parma Heights,http://www.parmaheightsoh.gov +Ohio,Licking County,Pataskala,http://www.cityofpataskalaohio.gov/ +Ohio,Paulding County,Paulding,http://villageofpaulding.com/ +Ohio,Freedom Township,Pemberville,http://pembervillelibrary.org/ +Ohio,Summit County,Peninsula,https://villageofpeninsula-oh.gov/ +Ohio,Cuyahoga County,Pepper Pike,http://www.pepperpike.org/ +Ohio,Perry Township,Perry,http://perryvillageohio.com +Ohio,Wood County,Perrysburg,https://www.ci.perrysburg.oh.us/ +Ohio,Ashland County,Perrysville,http://www.villageofperrysville.com +Ohio,Fairfield County,Pickerington,https://www.ci.pickerington.oh.us/ +Ohio,Madison Township,Pioneer,http://www.villageofpioneer.com/ +Ohio,Miami County,Piqua,http://www.piquaoh.org/ +Ohio,Madison County,Plain City,http://www.plain-city.com +Ohio,Newton Township,Pleasant Hill,http://www.pleasanthillohio.com +Ohio,Richland County,Plymouth,http://www.plymouthoh.org/ +Ohio,Mahoning County,Poland,https://polandvillage.org/ +Ohio,Ottawa County,Port Clinton,http://www.portclinton.com/ +Ohio,Scioto County,Portsmouth,https://portsmouthoh.org/ +Ohio,Liberty Township,Powell,http://www.cityofpowell.us/ +Ohio,Put-in-Bay Township,Put-in-Bay,http://villageofpib.com/ +Ohio,Portage County,Ravenna,http://www.RavennaOh.gov/ +Ohio,Hamilton County,Reading,http://www.readingohio.org +Ohio,Summit County,Reminderville,http://www.reminderville.com/ +Ohio,Franklin County,Reynoldsburg,https://reynoldsburg.gov/ +Ohio,Summit County,Richfield,https://www.richfieldvillageohio.org +Ohio,Cuyahoga County,Richmond Heights,http://www.richmondheightsohio.org +Ohio,Claibourne Township,Richwood,https://www.richwoodohio.org/ +Ohio,Union Township,Ripley,http://villageofripley.com/ +Ohio,Wayne County,Rittman,http://www.rittman.com/ +Ohio,Franklin County,Riverlea,http://www.riverleaohio.com/ +Ohio,Montgomery County,Riverside,https://www.riversideoh.gov/ +Ohio,Ashtabula County,Roaming Shores,http://www.roamingshores.org/ +Ohio,Dublin Township,Rockford,https://rockfordalive.com/ +Ohio,Cuyahoga County,Rocky River,https://www.rrcity.com/ +Ohio,Wood County,Rossford,https://www.rossfordohio.com/ +Ohio,Washington Township,Russells Point,http://russellspoint-oh.gov +Ohio,Shelby County,Russia,http://www.russiaoh.com/ +Ohio,Rutland Township,Rutland,http://www.villageofrutland.org +Ohio,Clinton County,Sabina,http://sabinaohio.us/ +Ohio,Columbiana County,Salem,http://www.cityofsalemohio.org/ +Ohio,Erie County,Sandusky,http://www.ci.sandusky.oh.us +Ohio,Brown County,Sardinia,https://villageofsardinia.com/ +Ohio,Ashland County,Savannah,http://www.savannahohio.com/index.html +Ohio,Harrison County,Scio,https://www.villageofscio.com/ +Ohio,Smith Township,Sebring,http://www.sebringohio.net/ +Ohio,Cuyahoga County,Seven Hills,http://www.sevenhillsohio.org/ +Ohio,Medina County,Seville,https://www.villageofseville.org/ +Ohio,Cuyahoga County,Shaker Heights,https://shakeronline.com/ +Ohio,Hamilton County,Sharonville,http://www.sharonville.org +Ohio,Concord Township,Shawnee Hills,http://www.shawneehillsoh.org/ +Ohio,Lorain County,Sheffield,http://sheffieldvillage.com +Ohio,Lorain County,Sheffield Lake,http://www.sheffieldlake.net/ +Ohio,Richland County,Shelby,http://shelbycity.oh.gov/ +Ohio,Defiance County,Sherwood,http://www.sherwoodohio.com +Ohio,Richland County,Shiloh,http://thevillageofshilohohio.vpweb.com/Home.html +Ohio,Clinton Township,Shreve,http://www.shreveohio.com/ +Ohio,Shelby County,Sidney,https://www.sidneyoh.com/ +Ohio,Summit County,Silver Lake,http://www.villageofsilverlake.com +Ohio,Hamilton County,Silverton,http://www.cityofsilverton.com +Ohio,Wayne County,Smithville,https://www.thevillageofsmithville.com/ +Ohio,Cuyahoga County,Solon,https://www.solonohio.org/ +Ohio,Perry County,Somerset,http://www.somersetohio.org +Ohio,Amherst Township,South Amherst,http://www.villageofsouthamherst.com +Ohio,Harrison Township,South Bloomfield,http://www.southbloomfieldoh.com/ +Ohio,Madison Township,South Charleston,http://villageofsouthcharleston.net/ +Ohio,Cuyahoga County,South Euclid,https://www.cityofsoutheuclid.com/ +Ohio,Warren County,South Lebanon,http://www.southlebanonohio.org +Ohio,Perry Township,South Point,http://www.villageofsouthpoint.com/ +Ohio,Geauga County,South Russell,http://www.southrussell.com/ +Ohio,Harmony Township,South Vienna,http://southvienna.org +Ohio,Medina County,Spencer,https://spencervillageohio.com/ +Ohio,Spencer Township,Spencerville,http://spencervilleoh.com/ +Ohio,Warren County,Springboro,http://www.cityofspringboro.com/ +Ohio,Hamilton County,Springdale,http://www.springdale.org +Ohio,Clark County,Springfield,http://www.ci.springfield.oh.us/ +Ohio,Hamilton County,St. Bernard,http://www.cityofstbernard.org +Ohio,Belmont County,St. Clairsville,http://www.stclairsville.com/ +Ohio,Auglaize County,St. Marys,http://www.cityofstmarys.net/ +Ohio,Champaign County,St. Paris,http://www.stparisohio.org/ +Ohio,Jefferson County,Steubenville,http://www.cityofsteubenville.us/ +Ohio,Morgan County,Stockport,http://stockportohio.weebly.com/ +Ohio,Summit County,Stow,http://stow.oh.us +Ohio,Franklin Township,Strasburg,https://www.villageofstrasburg.org/ +Ohio,Portage County,Streetsboro,http://cityofstreetsboro.com/ +Ohio,Cuyahoga County,Strongsville,https://www.strongsville.org/ +Ohio,Mahoning County,Struthers,http://www.cityofstruthers.com/ +Ohio,Portage County,Sugar Bush Knolls,http://sugarbushknollsohio.org/ +Ohio,Fairfield County,Sugar Grove,http://www.sugar-grove.com +Ohio,Sugar Creek Township,Sugarcreek,http://www.villageofsugarcreek.com/ +Ohio,Delaware County,Sunbury,http://sunburyvillage.com/ +Ohio,Fulton Township,Swanton,http://www.villageofswantonohio.us +Ohio,Lucas County,Sylvania,http://www.cityofsylvania.com +Ohio,Summit County,Tallmadge,http://www.tallmadge-ohio.org/ +Ohio,Hamilton County,Terrace Park,http://www.terracepark.org/village +Ohio,Perry County,Thornville,http://www.thornville.us +Ohio,Seneca County,Tiffin,https://tiffinohio.gov/ +Ohio,Miami County,Tipp City,http://www.tippcityohio.gov/ +Ohio,Lucas County,Toledo,https://www.toledo.oh.gov/ +Ohio,Island Creek Township,Toronto,https://torontocity.weebly.com/ +Ohio,Butler County,Trenton,http://www.ci.trenton.oh.us +Ohio,Montgomery County,Trotwood,https://trotwood.org/ +Ohio,Miami County,Troy,https://www.troyohio.gov/ +Ohio,Summit County,Twinsburg,http://www.mytwinsburg.com/ +Ohio,Mill Township,Uhrichsville,https://www.cityofuhrichsville.org/ +Ohio,Montgomery County,Union,http://www.unionoh.org/ +Ohio,Jackson Township,Union City,https://villageofunioncityohio.org/ +Ohio,Cuyahoga County,University Heights,https://www.universityheights.com/ +Ohio,Franklin County,Upper Arlington,https://upperarlingtonoh.gov/ +Ohio,Crane Township,Upper Sandusky,http://www.uppersanduskyoh.com/ +Ohio,Champaign County,Urbana,http://urbanaohio.com/ +Ohio,Licking County,Utica,https://uticaohio.gov/ +Ohio,Cuyahoga County,Valley View,http://www.valleyview.net/ +Ohio,Pleasant Township,Van Wert,http://www.vanwert.org/ +Ohio,Montgomery County,Vandalia,http://www.vandaliaohio.org/ +Ohio,Jennings Township,Venedocia,http://www.venedocia.org/ +Ohio,Lorain County,Vermilion,http://www.vermilion.net +Ohio,Darke County,Versailles,https://versaillesoh.com/ +Ohio,Medina County,Wadsworth,https://www.wadsworthcity.com/ +Ohio,Lake Township,Walbridge,https://www.walbridgeohio.org/ +Ohio,Cuyahoga County,Walton Hills,http://www.waltonhillsohio.gov/ +Ohio,Auglaize County,Wapakoneta,http://www.wapakoneta.net +Ohio,Trumbull County,Warren,https://www.warren.org/ +Ohio,Cuyahoga County,Warrensville Heights,https://www.cityofwarrensville.com/ +Ohio,Union Township,Washington Court House,http://www.cityofwch.com/ +Ohio,Lucas County,Waterville,http://www.waterville.org/ +Ohio,Clinton Township,Wauseon,http://www.cityofwauseon.com/ +Ohio,Pike County,Waverly,http://www.cityofwaverly.net/ +Ohio,Neave Township,Wayne Lakes,http://www.waynelakesohio.com +Ohio,Wayne Township,Waynesfield,http://www.waynesfieldohio.com/ +Ohio,Warren County,Waynesville,http://www.waynesville-ohio.org/ +Ohio,Wellington Township,Wellington,http://www.villageofwellington.com +Ohio,Jackson County,Wellston,http://www.cityofwellston.org/ +Ohio,Preble County,West Alexandria,http://www.walexpreb.org/ +Ohio,Montgomery County,West Carrollton,https://www.westcarrollton.org/ +Ohio,Madison County,West Jefferson,https://www.westjeffersonohio.gov/ +Ohio,Lafayette Township,West Lafayette,http://www.westlafayettevillage.com/ +Ohio,Liberty Township,West Liberty,http://www.mywestliberty.com +Ohio,Bokescreek Township,West Mansfield,http://westmansfield.net +Ohio,Union Township,West Milton,http://www.westmiltonohio.gov/ +Ohio,Wayne County,West Salem,http://westsalemvillage.com/ +Ohio,Adams County,West Union,http://www.westunionoh.net/ +Ohio,Williams County,West Unity,http://www.westunity.org/ +Ohio,Delaware County,Westerville,https://www.westerville.org/ +Ohio,Medina County,Westfield Center,http://www.villageofwestfieldcenter.com +Ohio,Cuyahoga County,Westlake,https://www.cityofwestlake.org/ +Ohio,Wood County,Weston,http://www.westonohio.org/ +Ohio,Franklin County,Whitehall,https://www.whitehall-oh.us/ +Ohio,Waterville Township,Whitehouse,https://whitehouseoh.gov/ +Ohio,Lake County,Wickliffe,http://www.cityofwickliffe.com +Ohio,Huron County,Willard,http://www.willardohio.us/ +Ohio,Williamsburg Township,Williamsburg,http://www.williamsburgohio.org/ +Ohio,Lake County,Willoughby,http://www.willoughbyohio.com +Ohio,Lake County,Willoughby Hills,http://www.willoughbyhills-oh.gov +Ohio,Lake County,Willowick,http://www.cityofwillowick.com +Ohio,Clinton County,Wilmington,https://wilmingtonoh.org/ +Ohio,Portage County,Windham,http://windhamvillage.com +Ohio,Cross Creek Township,Wintersville,http://www.wintersville.net/ +Ohio,Hamilton County,Woodlawn,http://www.beautifulwoodlawn.us +Ohio,Cuyahoga County,Woodmere,http://www.woodmerevillage.com/ +Ohio,Rush Township,Woodstock,http://www.woodstockohio.org +Ohio,Woodville Township,Woodville,http://villageofwoodville.com/ +Ohio,Wayne County,Wooster,https://www.woosteroh.com/ +Ohio,Franklin County,Worthington,https://www.worthington.org/ +Ohio,Hamilton County,Wyoming,http://www.wyomingohio.gov +Ohio,Greene County,Xenia,https://www.ci.xenia.oh.us/ +Ohio,Greene County,Yellow Springs,https://www.yso.com/ +Ohio,Mahoning County,Youngstown,https://youngstownohio.gov/ +Ohio,Muskingum County,Zanesville,http://www.coz.org/ +Oklahoma,Pontotoc County,Ada,http://www.adaok.com +Oklahoma,Jackson County,Altus,http://www.altusok.gov +Oklahoma,Woods County,Alva,https://www.alvaok.org/ +Oklahoma,Caddo County,Anadarko,http://www.cityofanadarko.org/ +Oklahoma,Carter County,Ardmore,http://www.ardmorecity.org +Oklahoma,Washington County,Bartlesville,http://www.cityofbartlesville.org/ +Oklahoma,Oklahoma County,Bethany,http://cityofbethany.org/ +Oklahoma,Tulsa County,Bixby,https://www.bixbyok.gov/ +Oklahoma,Kay County,Blackwell,http://www.cityofblackwell.com/ +Oklahoma,McClain County,Blanchard,http://cityofblanchard.us +Oklahoma,Tulsa County,Broken Arrow,http://www.brokenarrowok.gov +Oklahoma,Grady County,Chickasha,http://www.chickasha.org +Oklahoma,Oklahoma County,Choctaw,http://www.choctawcity.org +Oklahoma,Rogers County,Claremore,http://www.claremorecity.com/ +Oklahoma,Custer County,Clinton,http://www.clintonokla.org/ +Oklahoma,Tulsa County,Collinsville,http://www.cityofcollinsville.com/ +Oklahoma,Wagoner County,Coweta,http://www.cityofcoweta-ok.gov/ +Oklahoma,Payne County,Cushing,https://www.cityofcushing.com/ +Oklahoma,Oklahoma County,Del City,http://www.cityofdelcity.com/ +Oklahoma,Stephens County,Duncan,http://www.cityofduncan.com +Oklahoma,Bryan County,Durant,http://www.durant.org +Oklahoma,Oklahoma County,Edmond,https://edmondok.gov +Oklahoma,Canadian County,El Reno,https://www.elrenook.gov +Oklahoma,Beckham County,Elk City,http://www.elkcity.com +Oklahoma,Garfield County,Enid,http://www.enid.org/ +Oklahoma,Tulsa County,Glenpool,http://www.glenpoolonline.com/ +Oklahoma,Delaware County,Grove,https://www.cityofgroveok.gov +Oklahoma,Logan County,Guthrie,http://www.cityofguthrie.com/ +Oklahoma,Texas County,Guymon,https://www.guymonok.org/ +Oklahoma,Oklahoma County,Harrah,https://cityofharrah.com/ +Oklahoma,Okmulgee County,Henryetta,https://cityofhenryetta.com/ +Oklahoma,Hughes County,Holdenville,https://www.cityofholdenville.net/ +Oklahoma,Choctaw County,Hugo,http://hugook.com +Oklahoma,McCurtain County,Idabel,http://www.idabel-ok.gov/ +Oklahoma,Tulsa County,Jenks,http://www.jenks.com +Oklahoma,Comanche County,Lawton,https://www.lawtonok.gov/ +Oklahoma,Pittsburg County,McAlester,http://www.cityofmcalester.com +Oklahoma,Ottawa County,Miami,http://www.miamiokla.net/ +Oklahoma,Oklahoma County,Midwest City,http://www.midwestcityok.org/ +Oklahoma,Cleveland County,Moore,http://www.cityofmoore.com +Oklahoma,Muskogee County,Muskogee,http://www.muskogeeonline.org/ +Oklahoma,McClain County,Newcastle,http://www.cityofnewcastleok.com/ +Oklahoma,Cleveland County,Noble,http://cityofnoble.org +Oklahoma,Cleveland County,Norman,http://www.normanok.gov +Oklahoma,Okmulgee County,Okmulgee,http://www.okmulgeeonline.com/ +Oklahoma,Tulsa County,Owasso,http://www.cityofowasso.com/ +Oklahoma,Garvin County,Pauls Valley,http://www.paulsvalley.com +Oklahoma,Canadian County,Piedmont,http://www.piedmont-ok.gov +Oklahoma,Kay County,Ponca City,http://poncacityok.gov/ +Oklahoma,Le Flore County,Poteau,http://www.poteau-ok.com +Oklahoma,Mayes County,Pryor Creek,http://pryorcreek.org/ +Oklahoma,McClain County,Purcell,http://www.cityofpurcell.com +Oklahoma,Sequoyah County,Sallisaw,http://www.sallisawok.org/ +Oklahoma,Tulsa County,Sand Springs,http://www.sandspringsok.org/ +Oklahoma,Creek County,Sapulpa,http://www.cityofsapulpa.net +Oklahoma,Seminole County,Seminole,http://www.seminole-oklahoma.net/ +Oklahoma,Pottawatomie County,Shawnee,http://www.ShawneeOK.org +Oklahoma,Osage County,Skiatook,https://www.cityofskiatook.com/ +Oklahoma,Payne County,Stillwater,http://www.stillwater.org/ +Oklahoma,Murray County,Sulphur,http://www.sulphurok.city/ +Oklahoma,Cherokee County,Tahlequah,https://www.cityoftahlequah.com/ +Oklahoma,Pottawatomie County,Tecumseh,https://www.tecumsehok.org/ +Oklahoma,Oklahoma County,The Village,https://www.thevillageok.org/ +Oklahoma,Osage County,Tulsa,http://www.cityoftulsa.org/ +Oklahoma,Grady County,Tuttle,http://cityoftuttle.com +Oklahoma,Craig County,Vinita,https://www.cityofvinita.com/ +Oklahoma,Wagoner County,Wagoner,http://wagonerok.org/ +Oklahoma,Oklahoma County,Warr Acres,https://www.warracres-ok.gov/ +Oklahoma,Custer County,Weatherford,http://www.cityofweatherford.com/ +Oklahoma,Woodward County,Woodward,https://www.cityofwoodward-ok.gov/ +Oklahoma,Canadian County,Yukon,http://www.cityofyukonok.gov +Oregon,Benton County,Adair Village,http://adairvillage.org/ +Oregon,Umatilla County,Adams,http://www.cityofadamsoregon.com/ +Oregon,Linn County,Albany,http://www.cityofalbany.net +Oregon,Yamhill County,Amity,https://www.cityofamityoregon.org/ +Oregon,Wasco County,Antelope,http://cityofantelope.us/ +Oregon,Gilliam County,Arlington,https://www.cityofarlingtonoregon.com/ +Oregon,Jackson County,Ashland,http://www.ashland.or.us +Oregon,Clatsop County,Astoria,http://www.astoria.or.us/ +Oregon,Umatilla County,Athena,http://cityofathena.com/ +Oregon,Marion County,Aumsville,http://www.aumsville.us/ +Oregon,Marion County,Aurora,http://www.ci.aurora.or.us/ +Oregon,Baker County,Baker City,http://www.bakercity.com/ +Oregon,Coos County,Bandon,http://www.cityofbandon.org/ +Oregon,Washington County,Banks,http://www.cityofbanks.org/ +Oregon,Tillamook County,Bay City,http://www.ci.bay-city.or.us/ +Oregon,Washington County,Beaverton,http://www.beavertonoregon.gov/ +Oregon,Deschutes County,Bend,http://www.bendoregon.gov/ +Oregon,Morrow County,Boardman,https://www.cityofboardman.com/ +Oregon,Klamath County,Bonanza,http://townofbonanza.com +Oregon,Curry County,Brookings,http://www.brookings.or.us/ +Oregon,Linn County,Brownsville,http://www.ci.brownsville.or.us +Oregon,Harney County,Burns,https://www.cityofburnsor.gov/ +Oregon,Clackamas County,Canby,http://www.canbyoregon.gov/ +Oregon,Clatsop County,Cannon Beach,http://www.ci.cannon-beach.or.us/ +Oregon,Douglas County,Canyonville,http://www.cityofcanyonville.com/ +Oregon,Yamhill County,Carlton,http://www.ci.carlton.or.us +Oregon,Hood River County,Cascade Locks,http://cascade-locks.or.us +Oregon,Josephine County,Cave Junction,http://www.cavejunctionoregon.us +Oregon,Jackson County,Central Point,http://www.centralpointoregon.gov/ +Oregon,Columbia County,Clatskanie,http://cityofclatskanie.com +Oregon,Lane County,Coburg,http://www.coburgoregon.org +Oregon,Columbia County,Columbia City,http://www.columbia-city.org +Oregon,Gilliam County,Condon,http://www.cityofcondon.com +Oregon,Coos County,Coos Bay,https://www.coosbayor.gov/ +Oregon,Coos County,Coquille,http://www.cityofcoquille.org +Oregon,Washington County,Cornelius,http://www.ci.cornelius.or.us +Oregon,Benton County,Corvallis,http://www.ci.corvallis.or.us +Oregon,Lane County,Cottage Grove,http://www.cottagegrove.org +Oregon,Lane County,Creswell,http://www.ci.creswell.or.us/ +Oregon,Jefferson County,Culver,http://www.cityofculver.net/ +Oregon,Polk County,Dallas,https://www.dallasor.gov/ +Oregon,Yamhill County,Dayton,http://www.daytonoregon.gov/ +Oregon,Lincoln County,Depoe Bay,https://www.cityofdepoebay.org/ +Oregon,Marion County,Donald,https://www.donaldoregon.gov/ +Oregon,Douglas County,Drain,http://www.cityofdrain.org/ +Oregon,Wasco County,Dufur,http://www.cityofdufur.org/ +Oregon,Yamhill County,Dundee,http://www.dundeecity.org +Oregon,Lane County,Dunes City,http://dunescityhall.com/ +Oregon,Washington County,Durham,http://www.durham-oregon.us +Oregon,Jackson County,Eagle Point,http://www.cityofeaglepoint.org +Oregon,Umatilla County,Echo,http://www.echo-oregon.com +Oregon,Union County,Elgin,http://www.cityofelginor.org/ +Oregon,Douglas County,Elkton,http://www.elkton-oregon.com/ +Oregon,Wallowa County,Enterprise,http://www.enterpriseoregon.org +Oregon,Clackamas County,Estacada,http://www.cityofestacada.org +Oregon,Lane County,Eugene,http://www.eugene-or.gov/ +Oregon,Multnomah County,Fairview,http://fairvieworegon.gov/ +Oregon,Polk County,Falls City,http://www.fallscityoregon.gov/ +Oregon,Lane County,Florence,http://www.ci.florence.or.us +Oregon,Washington County,Forest Grove,http://www.forestgrove-or.gov/ +Oregon,Wheeler County,Fossil,http://www.cityoffossil.org +Oregon,Tillamook County,Garibaldi,http://www.ci.garibaldi.or.us +Oregon,Washington County,Gaston,http://www.cityofgaston.com +Oregon,Clatsop County,Gearhart,http://www.ci.gearhart.or.us/ +Oregon,Marion County,Gervais,http://www.gervaisoregon.org +Oregon,Clackamas County,Gladstone,http://www.ci.gladstone.or.us +Oregon,Douglas County,Glendale,http://www.cityofglendaleor.com/ +Oregon,Curry County,Gold Beach,http://www.goldbeachoregon.gov/ +Oregon,Jackson County,Gold Hill,http://www.cityofgoldhill.com +Oregon,Josephine County,Grants Pass,http://www.grantspassoregon.gov +Oregon,Multnomah County,Gresham,http://www.greshamoregon.gov/ +Oregon,Baker County,Haines,http://www.cityofhainesor.org/ +Oregon,Linn County,Halsey,http://www.cityofhalsey.com +Oregon,Clackamas County,Happy Valley,http://www.happyvalleyor.gov/ +Oregon,Linn County,Harrisburg,http://ci.harrisburg.or.us +Oregon,Morrow County,Heppner,http://www.cityofheppner.com/ +Oregon,Umatilla County,Hermiston,http://hermiston.or.us +Oregon,Washington County,Hillsboro,http://www.hillsboro-oregon.gov/ +Oregon,Harney County,Hines,https://www.cityofhines.com +Oregon,Hood River County,Hood River,https://cityofhoodriver.gov/ +Oregon,Marion County,Hubbard,http://www.cityofhubbard.org/ +Oregon,Union County,Imbler,http://www.imbleroregon.com +Oregon,Polk County,Independence,http://www.ci.independence.or.us/ +Oregon,Morrow County,Irrigon,https://ci.irrigon.or.us/ +Oregon,Jackson County,Jacksonville,http://www.jacksonvilleor.us +Oregon,Marion County,Jefferson,https://www.jeffersonoregon.org/ +Oregon,Grant County,John Day,http://www.cityofjohnday.com +Oregon,Clackamas County,Johnson City,https://www.johnsoncity.us +Oregon,Malheur County,Jordan Valley,http://www.cityofjordanvalley.com +Oregon,Wallowa County,Joseph,http://www.josephoregon.org/ +Oregon,Lane County,Junction City,http://www.junctioncityoregon.gov/ +Oregon,Marion County,Keizer,http://www.keizer.org/ +Oregon,Washington County,King City,http://www.ci.king-city.or.us +Oregon,Klamath County,Klamath Falls,https://www.klamathfalls.city/ +Oregon,Union County,La Grande,http://www.cityoflagrande.org +Oregon,Deschutes County,La Pine,https://www.lapineoregon.gov/ +Oregon,Yamhill County,Lafayette,http://www.ci.lafayette.or.us +Oregon,Clackamas County,Lake Oswego,http://www.ci.oswego.or.us/ +Oregon,Linn County,Lebanon,http://www.ci.lebanon.or.us +Oregon,Lincoln County,Lincoln City,http://www.lincolncity.org +Oregon,Wallowa County,Lostine,https://www.cityoflostine.com/ +Oregon,Lane County,Lowell,http://www.ci.lowell.or.us +Oregon,Linn County,Lyons,https://www.cityoflyons.org +Oregon,Jefferson County,Madras,http://www.ci.madras.or.us/ +Oregon,Tillamook County,Manzanita,http://www.ci.manzanita.or.us/ +Oregon,Multnomah County,Maywood Park,https://cityofmaywoodpark.com/ +Oregon,Yamhill County,McMinnville,http://www.ci.mcminnville.or.us +Oregon,Jackson County,Medford,https://www.medfordoregon.gov/Home +Oregon,Linn County,Mill City,http://www.ci.mill-city.or.us +Oregon,Linn County,Millersburg,http://cityofmillersburg.org +Oregon,Umatilla County,Milton-Freewater,https://www.mfcity.com +Oregon,Clackamas County,Milwaukie,http://www.milwaukieoregon.gov +Oregon,Clackamas County,Molalla,http://www.cityofmolalla.com/ +Oregon,Polk County,Monmouth,http://www.ci.monmouth.or.us +Oregon,Grant County,Monument,http://www.cityofmonument.com +Oregon,Sherman County,Moro,http://www.cityofmoro.net +Oregon,Wasco County,Mosier,http://www.cityofmosier.com/ +Oregon,Marion County,Mt. Angel,http://www.ci.mt-angel.or.us/ +Oregon,Douglas County,Myrtle Creek,http://cityofmyrtlecreek.com +Oregon,Coos County,Myrtle Point,http://www.ci.myrtlepoint.or.us/ +Oregon,Tillamook County,Nehalem,http://www.ci.nehalem.or.us +Oregon,Yamhill County,Newberg,http://www.newbergoregon.gov +Oregon,Lincoln County,Newport,http://www.newportoregon.gov +Oregon,Coos County,North Bend,http://northbendoregon.us/ +Oregon,Washington County,North Plains,http://www.northplains.org/ +Oregon,Malheur County,Nyssa,http://www.nyssacity.org +Oregon,Douglas County,Oakland,http://www.oaklandoregon.org/ +Oregon,Lane County,Oakridge,http://www.ci.oakridge.or.us/ +Oregon,Malheur County,Ontario,http://www.ontariooregon.org/ +Oregon,Clackamas County,Oregon City,http://www.orcity.org/ +Oregon,Lake County,Paisley,http://cityofpaisley.net +Oregon,Umatilla County,Pendleton,http://www.pendleton.or.us/ +Oregon,Benton County,Philomath,http://www.ci.philomath.or.us +Oregon,Jackson County,Phoenix,https://www.phoenixoregon.gov/ +Oregon,Umatilla County,Pilot Rock,https://www.cityofpilotrock.org +Oregon,Curry County,Port Orford,http://www.portorford.org +Oregon,Multnomah County,Portland,https://www.portlandoregon.gov/ +Oregon,Grant County,Prairie City,http://www.prairiecityoregon.com/ +Oregon,Crook County,Prineville,http://www.cityofprineville.com +Oregon,Columbia County,Rainier,https://cityofrainier.com/ +Oregon,Deschutes County,Redmond,http://www.ci.redmond.or.us +Oregon,Douglas County,Reedsport,http://www.reedsport.or.us +Oregon,Clackamas County,Rivergrove,https://www.cityofrivergrove.org/ +Oregon,Tillamook County,Rockaway Beach,http://www.rockawaybeachor.us +Oregon,Jackson County,Rogue River,http://www.cityofrogueriver.org +Oregon,Douglas County,Roseburg,http://cityofroseburg.org +Oregon,Marion County,Salem,http://cityofsalem.net +Oregon,Clackamas County,Sandy,http://www.ci.sandy.or.us/ +Oregon,Columbia County,Scappoose,http://www.ci.scappoose.or.us +Oregon,Linn County,Scio,http://ci.scio.or.us +Oregon,Marion County,Scotts Mills,http://scottsmills.org/ +Oregon,Clatsop County,Seaside,http://www.cityofseaside.us +Oregon,Jackson County,Shady Cove,http://www.shadycove.org +Oregon,Wasco County,Shaniko,http://www.shanikooregon.com +Oregon,Yamhill County,Sheridan,http://www.cityofsheridanor.com/ +Oregon,Washington County,Sherwood,https://www.sherwoodoregon.gov +Oregon,Lincoln County,Siletz,http://www.cityofsiletz.org +Oregon,Marion County,Silverton,http://www.silverton.or.us +Oregon,Deschutes County,Sisters,http://www.ci.sisters.or.us +Oregon,Linn County,Sodaville,http://sodaville.org +Oregon,Wheeler County,Spray,http://www.sprayoregon.us +Oregon,Lane County,Springfield,http://www.springfield-or.gov/ +Oregon,Columbia County,St. Helens,http://www.ci.st-helens.or.us/ +Oregon,Marion County,Stayton,http://www.staytonoregon.gov/ +Oregon,Marion County,Sublimity,http://www.cityofsublimity.org +Oregon,Baker County,Sumpter,http://www.historicsumpter.com +Oregon,Douglas County,Sutherlin,http://www.ci.sutherlin.or.us +Oregon,Linn County,Sweet Home,http://www.sweethomeor.gov +Oregon,Jackson County,Talent,http://www.cityoftalent.org/ +Oregon,Linn County,Tangent,http://www.cityoftangent.org +Oregon,Wasco County,The Dalles,http://www.ci.the-dalles.or.us/ +Oregon,Washington County,Tigard,http://www.tigard-or.gov/ +Oregon,Tillamook County,Tillamook,http://www.tillamookor.gov +Oregon,Lincoln County,Toledo,http://www.cityoftoledo.org +Oregon,Multnomah County,Troutdale,https://www.troutdaleoregon.gov/ +Oregon,Washington County,Tualatin,http://www.tualatinoregon.gov/ +Oregon,Marion County,Turner,http://www.cityofturner.org/ +Oregon,Umatilla County,Ukiah,http://www.cityofukiahoregon.com +Oregon,Umatilla County,Umatilla,http://www.umatilla-city.org/ +Oregon,Union County,Union,http://www.cityofunion.com +Oregon,Malheur County,Vale,http://www.vale.or.us/ +Oregon,Lane County,Veneta,http://www.ci.veneta.or.us +Oregon,Columbia County,Vernonia,http://www.vernonia-or.gov +Oregon,Lincoln County,Waldport,https://www.waldportoregon.gov +Oregon,Clatsop County,Warrenton,http://www.ci.warrenton.or.us/ +Oregon,Sherman County,Wasco,http://www.wascooregon.com +Oregon,Clackamas County,West Linn,http://westlinnoregon.gov +Oregon,Lane County,Westfir,https://www.ci.westfir.or.us/ +Oregon,Yamhill County,Willamina,http://www.willaminaoregon.gov/ +Oregon,Clackamas County,Wilsonville,http://www.ci.wilsonville.or.us/ +Oregon,Douglas County,Winston,https://winstoncity.org +Oregon,Multnomah County,Wood Village,http://www.ci.wood-village.or.us/ +Oregon,Marion County,Woodburn,http://www.woodburn-or.gov/ +Oregon,Lincoln County,Yachats,http://www.yachatsoregon.org +Oregon,Yamhill County,Yamhill,http://www.cityofyamhill.com +Oregon,Douglas County,Yoncalla,http://www.cityofyoncalla.com/ +Pennsylvania,Potter County,Abbott Township,http://www.abbotttownship-pa.org/ +Pennsylvania,Adams County,Abbottstown,http://adams.pacounties.org/Munic/AbbottstownBorough/Pages/default.aspx +Pennsylvania,Montgomery County,Abington Township,http://www.abington.org +Pennsylvania,Butler County,Adams Township,http://www.adamstwp.org +Pennsylvania,Cambria County,Adams Township,http://www.adamstwpcambria.com +Pennsylvania,Westmoreland County,Adamsburg,http://www.adamsburgpafire.org +Pennsylvania,Lancaster County,Adamstown,http://adamstownborough.org +Pennsylvania,Lancaster County,Akron,http://www.akron-pa.com +Pennsylvania,Erie County,Albion,http://albionborough.org +Pennsylvania,Lehigh County,Alburtis,http://www.alburtis.org +Pennsylvania,Delaware County,Aldan,http://www.aldan-boro.org +Pennsylvania,Beaver County,Aliquippa,http://www.aliquippapa.gov/ +Pennsylvania,Westmoreland County,Allegheny Township,http://www.twp.allegheny.pa.us +Pennsylvania,Blair County,Allegheny Township,https://www.AlleghenyTownship.us +Pennsylvania,Northampton County,Allen Township,http://www.allentownship.org +Pennsylvania,Lehigh County,Allentown,http://www.allentownpa.gov +Pennsylvania,Blair County,Altoona,https://www.altoonapa.gov/ +Pennsylvania,Montgomery County,Ambler,http://www.boroughofambler.com +Pennsylvania,Beaver County,Ambridge,http://www.ambridgeboro.org/ +Pennsylvania,Lebanon County,Annville Township,http://www.annvilletwp.com +Pennsylvania,Montour County,Anthony Township,http://www.anthonytwp-mon.com +Pennsylvania,Blair County,Antis Township,http://www.antistownship.org/%20Township%20website +Pennsylvania,Franklin County,Antrim Township,http://www.twp.antrim.pa.us +Pennsylvania,Armstrong County,Apollo,http://apollopa.net +Pennsylvania,Lackawanna County,Archbald,https://archbaldboroughpa.gov/ +Pennsylvania,Mifflin County,Armagh Township,http://www.co.mifflin.pa.us/mif-armagh/site/default.asp +Pennsylvania,Indiana County,Armstrong Township,http://www.armstrongtwp.org +Pennsylvania,Lycoming County,Armstrong Township,http://www.armstrongtownship.org +Pennsylvania,Westmoreland County,Arnold,https://sites.google.com/a/cityofarnoldpa.org/city-of-arnold-pa +Pennsylvania,Schuylkill County,Ashland,http://www.ashlandborough.com +Pennsylvania,Luzerne County,Ashley,http://www.ashleypa.net +Pennsylvania,Allegheny County,Aspinwall,http://www.aspinwallpa.com +Pennsylvania,Delaware County,Aston Township,http://www.astontownship.net +Pennsylvania,Chester County,Atglen,http://www.atglen.org +Pennsylvania,Bradford County,Athens Township,http://www.athenstownship.org +Pennsylvania,Allegheny County,Avalon,http://www.boroughofavalon.org/ +Pennsylvania,Clinton County,Avis,https://avisboro.org/ +Pennsylvania,Chester County,Avondale,http://avondaleboro.net +Pennsylvania,Allegheny County,Baldwin,http://www.baldwinborough.org +Pennsylvania,Allegheny County,Baldwin Township,http://www.baldwintownship.com +Pennsylvania,Berks County,Bally,http://www.co.berks.pa.us/bally/site/default.asp +Pennsylvania,Northampton County,Bangor,https://bangorborough.org/ +Pennsylvania,Forest County,Barnett Township,http://www.barnetttwp.com +Pennsylvania,Monroe County,Barrett Township,http://www.barretttownship.com +Pennsylvania,Northampton County,Bath,http://bathborough.org/ +Pennsylvania,Luzerne County,Bear Creek Township,http://www.bearcreektownship.org +Pennsylvania,Beaver County,Beaver,http://www.beaverpa.us +Pennsylvania,Beaver County,Beaver Falls,http://www.beaverfallspa.org +Pennsylvania,Carbon County,Beaver Meadows,http://beavermeadowspa.ourlocalview.com//HomeTown/ +Pennsylvania,Bedford County,Bedford,http://bedboro.com +Pennsylvania,Bedford County,Bedford Township,http://bedfordtwppagov.com +Pennsylvania,Bucks County,Bedminster Township,http://bedminsterpa.com/ +Pennsylvania,Clinton County,Beech Creek,http://www.beechcreekborough.com +Pennsylvania,Allegheny County,Bell Acres,http://www.bellacresborough.org +Pennsylvania,Centre County,Bellefonte,http://bellefonte.net +Pennsylvania,Allegheny County,Bellevue,http://www.bellevuepa.org/ +Pennsylvania,Blair County,Bellwood,http://www.bellwoodantis.net/ +Pennsylvania,Allegheny County,Ben Avon,http://www.benavon.com/ +Pennsylvania,Allegheny County,Ben Avon Heights,http://www.benavonheightsborough.com +Pennsylvania,Centre County,Benner Township,http://www.bennertownship.org/ +Pennsylvania,Bucks County,Bensalem Township,https://www.bensalempa.gov/ +Pennsylvania,Wayne County,Berlin Township,https://www.facebook.com/pages/Brandy-Freiermuth-Berlin-Township-Tax-Col-Wayne-County-PA/710697658976879 +Pennsylvania,Dauphin County,Berrysburg,http://berrysburg.org +Pennsylvania,Columbia County,Berwick,http://www.berwickborough.org +Pennsylvania,Adams County,Berwick Township,http://www.berwicktownship.com +Pennsylvania,Lawrence County,Bessemer,http://bessemerpa.com +Pennsylvania,Wayne County,Bethany,http://www.shepstone.net/Bethany.html +Pennsylvania,Allegheny County,Bethel Park,http://www.bethelpark.net/ +Pennsylvania,Delaware County,Bethel Township,http://www.twp.bethel.pa.us +Pennsylvania,Lehigh County,Bethlehem,https://www.bethlehem-pa.gov +Pennsylvania,Northampton County,Bethlehem Township,http://bethlehemtownship.org/ +Pennsylvania,Beaver County,Big Beaver,http://bigbeaverborough.org +Pennsylvania,Berks County,Birdsboro,http://www.birdsboropa.org +Pennsylvania,Chester County,Birmingham Township,http://www.birminghamtownship.org +Pennsylvania,Luzerne County,Black Creek Township,http://blackcreektownship.org +Pennsylvania,Blair County,Blair Township,http://www.blairco.org/BlairTwp +Pennsylvania,Indiana County,Blairsville,http://blairsvilleboropa.com +Pennsylvania,Lackawanna County,Blakely,http://blakelyborough.com +Pennsylvania,Allegheny County,Blawnox,http://www.blawnox.com +Pennsylvania,Perry County,Bloomfield,http://www.bloomfieldboro.org/ +Pennsylvania,Columbia County,Bloomsburg,http://www.bloomsburgpa.org +Pennsylvania,Tioga County,Blossburg,http://www.blossburg.org/ +Pennsylvania,Centre County,Boggs Township,http://www.boggstownship.org +Pennsylvania,Berks County,Boyertown,http://boyertownborough.org +Pennsylvania,Allegheny County,Brackenridge,http://www.brackenridgeboro.com +Pennsylvania,Schuylkill County,Braddock,http://braddockborough.com +Pennsylvania,Allegheny County,Braddock Hills,http://www.braddockhillspa.com/ +Pennsylvania,McKean County,Bradford,http://www.bradfordpa.com/ +Pennsylvania,Allegheny County,Bradford Woods,http://www.bradfordwoodspa.org +Pennsylvania,Butler County,Brady Township,http://www.bradytwp.us +Pennsylvania,Lycoming County,Brady Township,http://www.bradytownship.com +Pennsylvania,Lancaster County,Brecknock Township,http://brecknocktownship.us +Pennsylvania,Allegheny County,Brentwood,http://www.brentwoodboro.com/ +Pennsylvania,Columbia County,Briar Creek Township,http://www.briarcreektwp.org +Pennsylvania,Montgomery County,Bridgeport,https://www.bridgeportborough.org/ +Pennsylvania,Bucks County,Bridgeton Township,https://bridgetontwp.org/ +Pennsylvania,Allegheny County,Bridgeville,http://www.bridgevilleboro.com +Pennsylvania,Beaver County,Bridgewater,http://www.bridgewaterpa.com +Pennsylvania,Beaver County,Brighton Township,http://www.brightontwp.org +Pennsylvania,Bucks County,Bristol,http://www.bristolborough.com/ +Pennsylvania,Bucks County,Bristol Township,http://www.bristoltownship.org/ +Pennsylvania,Delaware County,Brookhaven,http://www.brookhavenboro.com +Pennsylvania,Jefferson County,Brookville,http://borough.brookville.pa.us +Pennsylvania,Mifflin County,Brown Township,http://www.browntownshipmc.info/ +Pennsylvania,Fayette County,Brownsville,http://brownsvilleborough.com +Pennsylvania,Fayette County,Brownsville Township,http://www.brownsvilletownship.org +Pennsylvania,Montgomery County,Bryn Athyn,http://www.brynathynboro.org +Pennsylvania,Luzerne County,Buck Township,http://bucktownship.org +Pennsylvania,Bucks County,Buckingham Township,http://www.buckinghampa.org +Pennsylvania,Butler County,Buffalo Township,http://buffalotownship.com +Pennsylvania,Mifflin County,Burnham,https://burnhamborough.net/ +Pennsylvania,Northampton County,Bushkill Township,http://www.bushkilltownship.org +Pennsylvania,Butler County,Butler,http://cityofbutler.org +Pennsylvania,Butler County,Butler Township,http://www.butlertwp.org +Pennsylvania,Luzerne County,Butler Township,http://butlertownship.org +Pennsylvania,Lancaster County,Caernarvon Township,http://www.caernarvonlancaster.org +Pennsylvania,Berks County,Caernarvon Township,http://www.caernarvon.org +Pennsylvania,Washington County,California,http://www.californiapa15419.com +Pennsylvania,Butler County,Callery,http://www.calleryborough.com +Pennsylvania,Chester County,Caln Township,http://www.calntownship.org +Pennsylvania,Cambria County,Cambria Township,http://www.cambriatownship.com +Pennsylvania,Cumberland County,Camp Hill,http://www.camphillborough.com +Pennsylvania,Wayne County,Canaan Township,http://www.shepstone.net/canaan/canaan.html +Pennsylvania,Washington County,Canonsburg,http://www.canonsburgboro.com +Pennsylvania,Washington County,Canton Township,http://www.yourcanton.com +Pennsylvania,Cumberland County,Carlisle,http://www.carlislepa.org +Pennsylvania,Allegheny County,Carnegie,http://www.carnegieborough.com +Pennsylvania,York County,Carroll Township,https://www.carrolltownship.com/ +Pennsylvania,Adams County,Carroll Valley,http://www.carrollvalley.org +Pennsylvania,Cambria County,Carrolltown,http://www.carrolltown.pa.us +Pennsylvania,Lycoming County,Cascade Township,http://www.cascade-township-pa.org +Pennsylvania,Schuylkill County,Cass Township,http://www.casstownship.org/ +Pennsylvania,Allegheny County,Castle Shannon,http://borough.castle-shannon.pa.us +Pennsylvania,Lehigh County,Catasauqua,http://www.catasauqua.org +Pennsylvania,Columbia County,Catawissa,http://www.catawissa.us +Pennsylvania,Blair County,Catharine Township,http://www.catharinetownship.org +Pennsylvania,Washington County,Cecil Township,http://www.ceciltownship-pa.gov/ +Pennsylvania,Beaver County,Center Township,http://www.ctbos.com +Pennsylvania,Butler County,Center Township,http://centertownship.net +Pennsylvania,Snyder County,Center Township,http://www.sny-centertwp.org/Pages/Home.aspx +Pennsylvania,Berks County,Centerport,http://www.township-directory.com/berks/Bor%20Centerport.htm +Pennsylvania,Centre County,Centre Hall,http://www.centrehallborough.org/ +Pennsylvania,Delaware County,Chadds Ford Township,http://www.chaddsfordpa.gov +Pennsylvania,Allegheny County,Chalfant,http://chalfantborough-pa.org/ +Pennsylvania,Bucks County,Chalfont,http://www.chalfontborough.com/ +Pennsylvania,Franklin County,Chambersburg,http://www.borough.chambersburg.pa.us/ +Pennsylvania,York County,Chanceford Township,http://www.chancefordtwp.com/ +Pennsylvania,Northampton County,Chapman,https://www.chapmanborough.com/ +Pennsylvania,Snyder County,Chapman Township,http://www.chapmantownship.com +Pennsylvania,Clinton County,Chapman Township,http://www.chapmantownship-pa.us +Pennsylvania,Washington County,Charleroi,http://www.charleroiboro.org +Pennsylvania,Chester County,Charlestown Township,http://www.charlestown.org +Pennsylvania,Lancaster County,Cheltenham Township,http://www.cheltenhamtownship.org/ +Pennsylvania,Wayne County,Cherry Ridge Township,http://cherryridgetwp.com/ +Pennsylvania,Delaware County,Chester,http://www.chestercity.com +Pennsylvania,Delaware County,Chester Heights,http://www.chesterheights.org +Pennsylvania,Monroe County,Chestnuthill Township,http://www.chestnuthilltwp-pa.gov +Pennsylvania,Allegheny County,Cheswick,http://www.cheswick.us/ +Pennsylvania,Beaver County,Chippewa Township,http://www.chippewa-twp.org +Pennsylvania,Susquehanna County,Choconut Township,http://www.stny.rr.com/choconut/ +Pennsylvania,Lancaster County,Christiana,http://www.christianaboro.com +Pennsylvania,Allegheny County,Churchill,http://churchillborough.com +Pennsylvania,Allegheny County,Clairton,http://www.cityofclairton.com/ +Pennsylvania,Berks County,Clarion,http://www.clarionboro.org +Pennsylvania,Lackawanna County,Clarks Green,http://www.clarksgreen.org +Pennsylvania,Lackawanna County,Clarks Summit,http://www.clarkssummitboro.org +Pennsylvania,Lancaster County,Clay Township,http://claytwp.com +Pennsylvania,Clearfield County,Clearfield,http://clearfieldboro.com +Pennsylvania,Lebanon County,Cleona,http://www.cleonaborough.org +Pennsylvania,Delaware County,Clifton Heights,http://www.cliftonheightsboro.com +Pennsylvania,Lycoming County,Clinton Township,http://www.clintontwp.org +Pennsylvania,Butler County,Clinton Township,http://www.myclintontwp.net +Pennsylvania,Wayne County,Clinton Township,https://waynecountypa.gov/618/Clinton-Township +Pennsylvania,Indiana County,Clymer,http://clymerpa.com +Pennsylvania,Schuylkill County,Coaldale,http://coaldaleborough.org/ +Pennsylvania,Chester County,Coatesville,http://coatesville.org +Pennsylvania,Crawford County,Cochranton,http://cochrantonboro.org +Pennsylvania,Lycoming County,Cogan House Township,http://coganhousetwp.org +Pennsylvania,Lancaster County,Colerain Township,http://coleraintwppa.com +Pennsylvania,Centre County,College Township,http://www.collegetownship.org +Pennsylvania,Montgomery County,Collegeville,http://www.collegeville-pa.gov +Pennsylvania,Delaware County,Collingdale,http://www.collingdaleborough.com +Pennsylvania,Lancaster County,Columbia,http://www.columbiapa.net +Pennsylvania,Delaware County,Colwyn,http://www.colwynborough.com +Pennsylvania,Delaware County,Concord Township,http://www.twp.concord.pa.us/ +Pennsylvania,Somerset County,Conemaugh Township,http://www.contwpsupers.us/ +Pennsylvania,Lancaster County,Conestoga Township,http://conestogatwp.com +Pennsylvania,Adams County,Conewago Township,http://www.conewagotwp.us/ +Pennsylvania,Dauphin County,Conewago Township,http://conewagotownship.com +Pennsylvania,Fayette County,Connellsville,http://connellsville.us +Pennsylvania,Butler County,Connoquenessing,http://connoquenessingboro.com +Pennsylvania,Butler County,Connoquenessing Township,http://connotwp.org +Pennsylvania,Lancaster County,Conoy Township,http://conoytownship.org +Pennsylvania,Montgomery County,Conshohocken,http://www.conshohockenpa.org/ +Pennsylvania,Beaver County,Conway,http://www.conwaypa.org +Pennsylvania,Luzerne County,Conyngham,http://www.conynghamborough.org +Pennsylvania,Columbia County,Conyngham Township,https://conynghamtownship.wordpress.com/ +Pennsylvania,Westmoreland County,Cook Township,http://www.cooktwp.com +Pennsylvania,Cumberland County,Cooke Township,http://cooketwp.org +Pennsylvania,Monroe County,Coolbaugh Township,http://www.coolbaughtwp.org +Pennsylvania,Lehigh County,Coopersburg,http://www.coopersburgborough.org +Pennsylvania,Lehigh County,Coplay,http://www.coplayborough.org +Pennsylvania,Cornell School District (Allegheny County,Coraopolis,http://www.coraopolispa.com/ +Pennsylvania,Lebanon County,Cornwall,http://www.cornwall-pa.com +Pennsylvania,Erie County,Corry,http://www.corrypa.com +Pennsylvania,Jefferson County,Corsica,http://www.boroughofcorsica.com +Pennsylvania,Potter County,Coudersport,http://www.coudersport.org/ +Pennsylvania,Allegheny County,Crafton,http://www.craftonborough.com +Pennsylvania,Butler County,Cranberry Township,http://www.cranberrytownship.org +Pennsylvania,Venango County,Cranberry Township,http://cranberrytwp.org/ +Pennsylvania,Allegheny County,Crescent Township,http://www.crescenttownship.com/ +Pennsylvania,Washington County,Cross Creek Township,http://www.crosscreektwp.org +Pennsylvania,Adams County,Cumberland Township,http://www.cumberlandtownship.com +Pennsylvania,Berks County,Cumru Township,http://www.cumrutownship.com +Pennsylvania,Clearfield County,Curwensville,http://curwensvilleborough.com +Pennsylvania,Luzerne County,Dallas,http://www.dallasborough.org +Pennsylvania,Luzerne County,Dallas Township,http://www.dallastwp.org +Pennsylvania,York County,Dallastown,http://www.dallastownboro.com/ +Pennsylvania,Lackawanna County,Dalton,http://daltonboro.com +Pennsylvania,Wayne County,Damascus Township,http://damascustwp.org/ +Pennsylvania,Montour County,Danville,http://www.danvilleboro.org +Pennsylvania,Delaware County,Darby,http://www.darbyborough.com +Pennsylvania,Delaware County,Darby Township,http://www.darbytwp.org +Pennsylvania,Beaver County,Darlington,http://darlingtonborough.com/ +Pennsylvania,Beaver County,Darlington Township,https://www.darlingtontwp.com/ +Pennsylvania,Beaver County,Daugherty Township,http://www.daughertytownship-pa.gov +Pennsylvania,Mifflin County,Decatur Township,http://www.decaturtownship.info +Pennsylvania,Mercer County,Deer Creek Township,http://www.deercreektownship.org +Pennsylvania,Schuylkill County,Deer Lake,https://deerlakeboro.com +Pennsylvania,Monroe County,Delaware Water Gap,https://dwgpa.gov/ +Pennsylvania,Westmoreland County,Delmont,http://www.delmontborough.com +Pennsylvania,York County,Delta,http://www.deltaborough.us/ +Pennsylvania,Luzerne County,Dennison Township,http://dennisontwp.org +Pennsylvania,Lancaster County,Denver,http://denverboro.net +Pennsylvania,Westmoreland County,Derry,http://www.derryborough.org +Pennsylvania,Dauphin County,Derry Township,http://www.derrytownship.org +Pennsylvania,Westmoreland County,Derry Township,http://www.derrytownship.com +Pennsylvania,Mifflin County,Derry Township,http://www.derrytwp.info +Pennsylvania,Cumberland County,Dickinson Township,http://www.dickinsontownship.org +Pennsylvania,Lackawanna County,Dickson City,http://dicksoncityborough.org +Pennsylvania,York County,Dillsburg,http://www.dillsburg.com/ +Pennsylvania,Berks County,District Township,http://www.districttownship.org/ +Pennsylvania,Westmoreland County,Donegal Township,http://www.donegaltownship.com +Pennsylvania,Washington County,Donora,http://www.donoraboro.org/ +Pennsylvania,Allegheny County,Dormont,http://www.boro.dormont.pa.us +Pennsylvania,Luzerne County,Dorrance Township,http://dorrancetwp.com +Pennsylvania,Montgomery County,Douglass Township,http://www.douglasstownship.org +Pennsylvania,Berks County,Douglass Township,http://www.co.berks.pa.us/douglass +Pennsylvania,York County,Dover,https://doverboroughpa.com/ +Pennsylvania,Chester County,Downingtown,http://www.downingtown.org +Pennsylvania,Bucks County,Doylestown,https://www.doylestownborough.net +Pennsylvania,Bucks County,Doylestown Township,http://www.doylestownpa.org +Pennsylvania,Allegheny County,Dravosburg,http://www.dravosburg.org +Pennsylvania,Lancaster County,Drumore Township,http://www.drumoretownship.org +Pennsylvania,Bucks County,Dublin,http://www.dublinborough.org +Pennsylvania,Clearfield County,DuBois,http://www.duboispa.gov +Pennsylvania,Perry County,Duncannon,http://www.duncannonboro.org +Pennsylvania,Blair County,Duncansville,http://duncansvillepa.org +Pennsylvania,Lackawanna County,Dunmore,http://www.dunmorepa.gov +Pennsylvania,Luzerne County,Dupont,http://dupontpa.us +Pennsylvania,Allegheny County,Duquesne,http://duquesnepa.us +Pennsylvania,Bucks County,Durham Township,http://www.durhamtownship.org/ +Pennsylvania,Luzerne County,Duryea,http://www.duryeaborough.com +Pennsylvania,Sullivan County,Dushore,http://www.dushorepa.gov +Pennsylvania,Sullivan County,Eagles Mere,http://www.eaglesmere.org/ +Pennsylvania,Lancaster County,Earl Township,http://earltownship.com +Pennsylvania,Northampton County,East Allen Township,http://www.eatwp.org +Pennsylvania,Northampton County,East Bangor,https://eastbangorborough.org/ +Pennsylvania,Adams County,East Berlin,http://eastberlinboro.com +Pennsylvania,Chester County,East Bradford Township,http://www.eastbradford.org +Pennsylvania,Chester County,East Brandywine Township,http://www.ebrandywine.org +Pennsylvania,Union County,East Buffalo Township,http://www.ebtwp.org +Pennsylvania,Chester County,East Caln Township,http://www.eastcalntownship.com +Pennsylvania,Lancaster County,East Cocalico Township,http://www.eastcocalicotownship.com +Pennsylvania,Chester County,East Coventry Township,http://www.eastcoventry-pa.gov +Pennsylvania,Lancaster County,East Donegal Township,http://eastdonegaltwp.com +Pennsylvania,Lancaster County,East Drumore Township,http://edrumoretwp.com +Pennsylvania,Lancaster County,East Earl Township,http://www.eastearltwp.org +Pennsylvania,Chester County,East Fallowfield Township,https://www.eastfallowfield.org/ +Pennsylvania,Armstrong County,East Franklin Township,http://www.eastfranklintownship.com +Pennsylvania,Chester County,East Goshen Township,http://www.eastgoshen.org +Pennsylvania,Montgomery County,East Greenville,http://www.egreenville.org/ +Pennsylvania,Dauphin County,East Hanover Township,http://easthanovertwpdcpa.org +Pennsylvania,Lebanon County,East Hanover Township,http://easthanovertwp.com +Pennsylvania,Lancaster County,East Hempfield Township,http://www.easthempfield.org +Pennsylvania,Lancaster County,East Lampeter Township,http://eastlampetertownship.org +Pennsylvania,Delaware County,East Lansdowne,http://www.eastlansdowne.org +Pennsylvania,Chester County,East Marlborough Township,http://www.eastmarlborough.org +Pennsylvania,Allegheny County,East McKeesport,http://eastmckeesportboro.com +Pennsylvania,Montgomery County,East Norriton Township,http://www.eastnorritontwp.org +Pennsylvania,Chester County,East Nottingham Township,http://www.eastnottingham.org +Pennsylvania,Carbon County,East Penn Township,https://www.eastpenntownship.com/ +Pennsylvania,Cumberland County,East Pennsboro Township,http://www.eastpennsboro.net +Pennsylvania,Lancaster County,East Petersburg,http://www.eastpetersburgborough.org +Pennsylvania,Chester County,East Pikeland Township,http://www.eastpikeland.org +Pennsylvania,Allegheny County,East Pittsburgh,http://eastpittsburghboro.com +Pennsylvania,York County,East Prospect,http://epboro.com/ +Pennsylvania,Bucks County,East Rockhill Township,https://www.eastrockhilltownship.org/ +Pennsylvania,Monroe County,East Stroudsburg,https://eaststroudsburgboro.org/ +Pennsylvania,Cambria County,East Taylor Township,http://www.easttaylortwp.com +Pennsylvania,Westmoreland County,East Vandergrift,http://www.evboro.com/ +Pennsylvania,Chester County,East Vincent Township,http://www.eastvincent.org +Pennsylvania,Washington County,East Washington,http://www.eastwash.com +Pennsylvania,Chester County,East Whiteland Township,http://www.eastwhiteland.org +Pennsylvania,Northampton County,Easton,http://www.easton-pa.com +Pennsylvania,Chester County,Easttown Township,http://www.easttown.org +Pennsylvania,Cambria County,Ebensburg,http://www.ebensburgpa.com +Pennsylvania,Delaware County,Eddystone,http://www.eddystoneboro.com +Pennsylvania,Lancaster County,Eden Township,http://www.edentownship.org +Pennsylvania,Allegheny County,Edgewood,http://www.edgewood.pgh.pa.us/ +Pennsylvania,Allegheny County,Edgeworth,http://edgeworthborough.org +Pennsylvania,Delaware County,Edgmont Township,http://www.edgmont.org +Pennsylvania,Erie County,Edinboro,http://www.edinboro.net +Pennsylvania,Luzerne County,Edwardsville,http://www.edwardsvilleborough.com +Pennsylvania,Monroe County,Eldred Township,http://www.eldredtwp.org/ +Pennsylvania,Lycoming County,Eldred Township,http://eldredtownship.org +Pennsylvania,Allegheny County,Elizabeth,http://elizabethpa.net +Pennsylvania,Allegheny County,Elizabeth Township,http://www.elizabethtownshippa.com +Pennsylvania,Lancaster County,Elizabeth Township,http://www.elizabethtownship.org +Pennsylvania,Lancaster County,Elizabethtown,http://www.etownonline.com +Pennsylvania,Dauphin County,Elizabethville,http://www.elizabethville.org +Pennsylvania,Erie County,Elk Creek Township,http://elkcreektwp.org +Pennsylvania,Chester County,Elk Township,http://www.elktownship.org +Pennsylvania,Lawrence County,Ellport,http://ellportboro.com +Pennsylvania,Lawrence County,Ellwood City,http://www.ecboro.com +Pennsylvania,Chester County,Elverson,http://www.elversonboro.org +Pennsylvania,Clarion County,Emlenton,https://www.emlentonborough.com/ +Pennsylvania,Lehigh County,Emmaus,http://www.borough.emmaus.pa.us/ +Pennsylvania,Cameron County,Emporium,http://emporiumborough.org +Pennsylvania,Allegheny County,Emsworth,http://www.emsworthborough.com +Pennsylvania,Lancaster County,Ephrata,http://ephrataboro.org +Pennsylvania,Lancaster County,Ephrata Township,http://www.ephratatownship.org +Pennsylvania,Erie County,Erie,http://www.erie.pa.us +Pennsylvania,Allegheny County,Etna,http://www.etnaborough.org +Pennsylvania,Butler County,Evans City,http://evanscity.us +Pennsylvania,Berks County,Exeter Township,https://www.exetertownship.com/ +Pennsylvania,Luzerne County,Exeter Township,http://exetertwpluzerneco.com +Pennsylvania,Westmoreland County,Export,http://exportpennsylvania.com +Pennsylvania,Wyoming County,Factoryville,http://www.factoryville.org +Pennsylvania,Adams County,Fairfield,http://fairfieldborough.com +Pennsylvania,Lycoming County,Fairfield Township,http://fairfieldlycoming.org +Pennsylvania,Westmoreland County,Fairfield Township,https://fairfieldtwp.com/ +Pennsylvania,Erie County,Fairview Township,http://www.fairviewtownship.com +Pennsylvania,Luzerne County,Fairview Township,http://fairviewluzerne.com +Pennsylvania,Bucks County,Falls Township,http://www.fallstwp.com +Pennsylvania,Mercer County,Farrell,http://www.cityoffarrell.com +Pennsylvania,York County,Fawn Grove,http://fawngroveborough.org/ +Pennsylvania,Allegheny County,Fawn Township,http://www.fawntownship.com/ +Pennsylvania,Centre County,Ferguson Township,http://www.twp.ferguson.pa.us +Pennsylvania,Cambria County,Ferndale,http://www.ferndaleborough.com +Pennsylvania,Allegheny County,Findlay Township,http://www.findlay.pa.us/ +Pennsylvania,Columbia County,Fishing Creek Township,http://fishingcreektownship.org +Pennsylvania,Berks County,Fleetwood,http://www.fleetwoodboro.com +Pennsylvania,Clinton County,Flemington,http://flemingtonboroughpa.org +Pennsylvania,Delaware County,Folcroft,https://www.folcroftborough.com/ +Pennsylvania,Armstrong County,Ford City,http://www.fordcityborough.org +Pennsylvania,Allegheny County,Forest Hills,http://foresthillspa.org +Pennsylvania,Susquehanna County,Forest Lake Township,http://www.susqco.com/subsites/gov/pages/info/municipaltownships/forestlake.htm +Pennsylvania,Northampton County,Forks Township,http://www.forkstownship.org +Pennsylvania,Luzerne County,Forty Fort,http://www.fortyfort.org +Pennsylvania,Butler County,Forward Township,http://forwardtwpbutlerco.us +Pennsylvania,Luzerne County,Foster Township,http://fostertownship.org +Pennsylvania,Schuylkill County,Foster Township,http://fostertwp.org/ +Pennsylvania,Lehigh County,Fountain Hill,http://www.fountainhill.org +Pennsylvania,Allegheny County,Fox Chapel,http://www.fox-chapel.pa.us +Pennsylvania,Elk County,Fox Township,http://foxtownship.com +Pennsylvania,Huntingdon County,Foxburg,http://www.foxburgboro.com +Pennsylvania,Schuylkill County,Frackville,http://www.frackvillepa.org +Pennsylvania,Montgomery County,Franconia Township,http://www.franconiatownship.org +Pennsylvania,Venango County,Franklin,https://franklinpa.gov/ +Pennsylvania,Allegheny County,Franklin Park,http://www.franklinparkborough.us +Pennsylvania,Greene County,Franklin Township,http://www.franklintownshipgreenecounty.com +Pennsylvania,Adams County,Franklin Township,http://www.franklintwp.us +Pennsylvania,Chester County,Franklin Township,http://www.franklintownship.us +Pennsylvania,Carbon County,Franklin Township,http://www.franklintownshipcarboncounty.com +Pennsylvania,Beaver County,Franklin Township,http://www.franklintownshipbeavercounty.com +Pennsylvania,Butler County,Franklin Township,http://www.franklintwpbco.us +Pennsylvania,Luzerne County,Franklin Township,http://www.ftwp.com +Pennsylvania,Erie County,Franklin Township,http://franklintownship.info +Pennsylvania,Susquehanna County,Franklin Township,http://franklintwp.info +Pennsylvania,York County,Franklintown,http://www.franklintownborough.com/ +Pennsylvania,Blair County,Frankstown Township,https://frankstowntownship.com/ +Pennsylvania,Beaver County,Freedom,http://www.freedomborough.org/ +Pennsylvania,Luzerne County,Freeland,http://www.freelandborough.com +Pennsylvania,Northampton County,Freemansburg,http://www.boroughoffreemansburg.org +Pennsylvania,Lancaster County,Fulton Township,http://www.fultontownship.com +Pennsylvania,Potter County,Galeton,http://www.visitgaleton.com +Pennsylvania,Cambria County,Geistown,http://www.geistownborough.com +Pennsylvania,Fayette County,German Township,http://germantownship.org +Pennsylvania,Adams County,Germany Township,http://www.germanytownship.org +Pennsylvania,Adams County,Gettysburg,https://www.gettysburgpa.gov/ +Pennsylvania,Erie County,Girard,http://girardboroughpa.us +Pennsylvania,Erie County,Girard Township,http://www.girardtownship.com +Pennsylvania,Allegheny County,Glen Osborne,http://www.glenosborneborough.org/ +Pennsylvania,York County,Glen Rock,http://www.GlenRockPA.org +Pennsylvania,Lackawanna County,Glenburn Township,http://glenburntownship.org/ +Pennsylvania,Northampton County,Glendon,http://www.glendonboro.com +Pennsylvania,Allegheny County,Glenfield,http://www.glenfieldborough.org +Pennsylvania,Delaware County,Glenolden,http://www.glenoldenborough.com +Pennsylvania,York County,Goldsboro,http://goldsboropa.com +Pennsylvania,Mifflin County,Granville Township,http://www.granvilletwp.org +Pennsylvania,Montgomery County,Green Lane,https://greenlaneborough.org/ +Pennsylvania,Allegheny County,Green Tree,http://www.greentreeboro.com +Pennsylvania,Franklin County,Greencastle,http://greencastlepa.gov +Pennsylvania,Franklin County,Greene Township,http://www.twp.greene.franklin.pa.us +Pennsylvania,Erie County,Greene Township,http://www.mygreenetownship.com +Pennsylvania,Blair County,Greenfield Township,https://www.greenfieldtownshippa.gov/ +Pennsylvania,Greene County,Greensboro,http://www.greensboropa.com +Pennsylvania,Westmoreland County,Greensburg,http://www.greensburgpa.org +Pennsylvania,Mercer County,Greenville,http://www.greenvilleborough.com +Pennsylvania,Union County,Gregg Township,http://www.greggtwp.org/uni-gregg/site/default.asp +Pennsylvania,Centre County,Gregg Township,http://www.greggtownship.org +Pennsylvania,Mercer County,Grove City,http://grovecityonline.com/ +Pennsylvania,Franklin County,Guilford Township,http://www.guilfordtwp.us +Pennsylvania,Centre County,Haines Township,http://www.hainestwp.org +Pennsylvania,Centre County,Halfmoon Township,http://www.halfmoontwp.us +Pennsylvania,Dauphin County,Halifax,http://halifaxborough.com +Pennsylvania,Dauphin County,Halifax Township,http://www.halifaxtownship.net +Pennsylvania,York County,Hallam,http://www.hallamborough.com/ +Pennsylvania,Berks County,Hamburg,http://hamburgboro.com +Pennsylvania,Monroe County,Hamilton Township,http://www.hamiltontwp.org +Pennsylvania,Adams County,Hamilton Township,https://twphamilton.com/ +Pennsylvania,Adams County,Hamiltonban Township,http://www.adamscounty.us/munic/hamiltonbantownship/Pages/default.aspx +Pennsylvania,Cumberland County,Hampden Township,http://www.hampdentownship.us +Pennsylvania,Allegheny County,Hampton Township,http://hampton-pa.org/ +Pennsylvania,Northampton County,Hanover Township,http://www.hanovertwp-nc.org +Pennsylvania,Luzerne County,Hanover Township,http://www.hanovertownship.org/commissioners.html +Pennsylvania,Beaver County,Hanover Township,http://hanovertwpbeaver.com +Pennsylvania,Washington County,Hanover Township,http://www.hanovertwp.net/ +Pennsylvania,Lehigh County,Hanover Township,http://www.hanleco.org +Pennsylvania,Erie County,Harborcreek Township,http://www.harborcreektownship.org +Pennsylvania,Susquehanna County,Harford Township,http://harfordtwp.org/index.htm +Pennsylvania,Butler County,Harmony,http://www.harmony-pa.us +Pennsylvania,Beaver County,Harmony Township,http://www.harmonytwp.org +Pennsylvania,Forest County,Harmony Township,http://www.harmonytownship.net +Pennsylvania,Susquehanna County,Harmony Township,http://www.susqco.com/subsites/gov/pages/info/municipaltownships/harmony.htm +Pennsylvania,Centre County,Harris Township,http://www.harristownship.org +Pennsylvania,Dauphin County,Harrisburg,https://harrisburgpa.gov/ +Pennsylvania,Allegheny County,Harrison Township,http://harrisontwp.com/ +Pennsylvania,Luzerne County,Harveys Lake,http://harveyslakeborough.com +Pennsylvania,Cambria County,Hastings,http://hastingsborough.com +Pennsylvania,Montgomery County,Hatboro,https://myhatboro.org/ +Pennsylvania,Montgomery County,Hatfield,http://www.hatfieldborough.com +Pennsylvania,Montgomery County,Hatfield Township,http://www.hatfieldtownship.org +Pennsylvania,Delaware County,Haverford Township,http://www.haverfordtownship.org/ +Pennsylvania,Wayne County,Hawley,http://www.hawley-borough.org/ +Pennsylvania,Clarion County,Hawthorn,http://www.hawthornboro.org +Pennsylvania,Bucks County,Haycock Township,http://www.haycocktwp.com +Pennsylvania,Allegheny County,Haysville,http://haysvilleborough.org +Pennsylvania,Luzerne County,Hazle Township,http://www.hazletownship.com +Pennsylvania,Luzerne County,Hazleton,http://www.hazletoncity.org/ +Pennsylvania,Allegheny County,Heidelberg,http://heidelbergpa.tripod.com +Pennsylvania,Lebanon County,Heidelberg Township,http://heidelbergtownship.com +Pennsylvania,Lehigh County,Heidelberg Township,http://www.heidelberglehigh.org +Pennsylvania,Berks County,Heidelberg Township,http://www.heidelbergtownship.org +Pennsylvania,York County,Hellam Township,https://www.hellamtownship.com +Pennsylvania,Northampton County,Hellertown,http://www.hellertownborough.org +Pennsylvania,Columbia County,Hemlock Township,http://www.hemlocktownship.org +Pennsylvania,Westmoreland County,Hempfield Township,https://www.hempfieldtwp.com +Pennsylvania,Lycoming County,Hepburn Township,http://www.hepburntownship.org +Pennsylvania,Berks County,Hereford Township,http://www.co.berks.pa.us/Muni/Hereford/Pages/default.aspx +Pennsylvania,Mercer County,Hermitage,http://www.hermitage.net +Pennsylvania,Lawrence County,Hickory Township,http://www.hickorytownship.com +Pennsylvania,Dauphin County,Highspire,http://www.highspire.org +Pennsylvania,Bucks County,Hilltown Township,http://www.hilltown.org +Pennsylvania,Blair County,Hollidaysburg,http://hollidaysburgpa.org +Pennsylvania,Indiana County,Homer City,http://www.homercity.com +Pennsylvania,Allegheny County,Homestead,http://www.homesteadborough.com/ +Pennsylvania,Wayne County,Honesdale,http://honesdaleborough.com/ +Pennsylvania,Chester County,Honey Brook,http://www.honeybrookborough.net +Pennsylvania,Chester County,Honey Brook Township,http://www.honeybrooktwp.com +Pennsylvania,Beaver County,Hopewell Township,http://www.hopewelltwp.com +Pennsylvania,Cumberland County,Hopewell Township,http://hopewelltownshipcc.com +Pennsylvania,Washington County,Hopewell Township,http://hopewelltownshippa.com/ +Pennsylvania,Montgomery County,Horsham Township,http://www.horsham.org +Pennsylvania,Forest County,Howe Township,http://howetwp.org +Pennsylvania,Perry County,Howe Township,http://www.howetownship.com +Pennsylvania,Lycoming County,Hughesville,http://www.hughesvillepa.org +Pennsylvania,Bucks County,Hulmeville,http://hulmeville-pa.gov +Pennsylvania,Dauphin County,Hummelstown,http://www.hummelstown.net +Pennsylvania,Huntingdon County,Huntingdon,http://huntingdonboro.com +Pennsylvania,Beaver County,Independence Township,https://www.independencetwpbeavercounty.com +Pennsylvania,Somerset County,Indian Lake,http://www.indianlakepa.us/ +Pennsylvania,Indiana County,Indiana,http://www.indianaboro.com +Pennsylvania,Allegheny County,Indiana Township,http://www.indianatownship.com/default.asp +Pennsylvania,Allegheny County,Ingram,http://www.ingramborough.org +Pennsylvania,Clearfield County,Irvona,http://irvonaborough.com +Pennsylvania,Westmoreland County,Irwin,https://www.irwinborough.org/ +Pennsylvania,Bucks County,Ivyland,http://www.ivylandborough.org +Pennsylvania,Lebanon County,Jackson Township,http://jacksontownship-pa.gov +Pennsylvania,Monroe County,Jackson Township,http://jacksontwp-pa.gov/ +Pennsylvania,Luzerne County,Jackson Township,http://jacksontownshippa.gov +Pennsylvania,Cambria County,Jackson Township,http://www.jacksontwppa.com +Pennsylvania,Butler County,Jackson Township,http://www.jackson-township.com +Pennsylvania,Dauphin County,Jackson Township,http://www.orgsites.com/pa/jacksontwp/ +Pennsylvania,Columbia County,Jackson Township,http://www.jacksontownship.us +Pennsylvania,York County,Jacobus,http://www.JacobusPA.com +Pennsylvania,Mercer County,Jamestown,http://www.jamestown-pa.com +Pennsylvania,Elk County,Jay Township,http://www.jaytownship.com +Pennsylvania,Westmoreland County,Jeannette,http://cityofjeannette.com/ +Pennsylvania,York County,Jefferson,http://www.JeffersonBoro.net +Pennsylvania,Allegheny County,Jefferson Hills,http://www.jeffersonhillsboro.org +Pennsylvania,Butler County,Jefferson Township,http://jeffersonbutler.com +Pennsylvania,Berks County,Jefferson Township,http://www.jeffersontwpbc.com/ +Pennsylvania,Dauphin County,Jefferson Township,http://www.jeffersontownshippa.org +Pennsylvania,Luzerne County,Jenkins Township,http://jenkinstownship.net +Pennsylvania,Montgomery County,Jenkintown,http://www.jenkintownboro.com +Pennsylvania,Forest County,Jenks Township,http://jenkstownship.org +Pennsylvania,Somerset County,Jennerstown,http://www.jennerstownboro.com +Pennsylvania,Lackawanna County,Jermyn,http://jermynpa.com +Pennsylvania,Lycoming County,Jersey Shore,http://www.jerseyshoreboro.org +Pennsylvania,Lackawanna County,Jessup,http://www.jessupborough.com +Pennsylvania,Carbon County,Jim Thorpe,http://www.jimthorpe.org +Pennsylvania,Cambria County,Johnstown,http://www.cityofjohnstownpa.net/ +Pennsylvania,Elk County,Jones Township,http://www.jonestownship.com +Pennsylvania,Mifflin County,Juniata Terrace,http://www.juniataterrace.net/5001.html +Pennsylvania,Berks County,Kenhorst,http://www.co.berks.pa.us/Muni/Kenhorst/Pages/Default.aspx +Pennsylvania,Chester County,Kennett Square,https://www.kennettsq.org/ +Pennsylvania,Chester County,Kennett Township,http://www.kennett.pa.us +Pennsylvania,Carbon County,Kidder Township,http://www.kiddertownship.org +Pennsylvania,Luzerne County,Kingston,http://kingstonpa.org +Pennsylvania,Luzerne County,Kingston Township,http://kingstontownship.com +Pennsylvania,Armstrong County,Kittanning,https://kittanning-borough.com/ +Pennsylvania,Clarion County,Knox,http://www.knoxborough.com +Pennsylvania,Northumberland County,Kulpmont,http://www.boroughofkulpmont.org/Pages/Home.aspx +Pennsylvania,Berks County,Kutztown,http://www.kutztownboro.org +Pennsylvania,Wyoming County,Laceyville,http://www.laceyville.com +Pennsylvania,Pike County,Lackawaxen Township,https://www.lackawaxentownshippa.gov/ +Pennsylvania,Luzerne County,Laflin,http://www.laflinboro.com +Pennsylvania,Erie County,Lake City,http://lakecityboro.org +Pennsylvania,Luzerne County,Lake Township,http://www.laketwppa.com +Pennsylvania,Lancaster County,Lancaster,http://cityoflancasterpa.com +Pennsylvania,Lancaster County,Lancaster Township,http://www.twp.lancaster.pa.us +Pennsylvania,Butler County,Lancaster Township,http://www.lancaster-township.com +Pennsylvania,Susquehanna County,Lanesboro,http://lanesboropa.com/ +Pennsylvania,Bucks County,Langhorne,http://www.langhorneborough.com +Pennsylvania,Bucks County,Langhorne Manor,http://www.langhornemanor.org +Pennsylvania,Montgomery County,Lansdale,http://www.lansdale.org +Pennsylvania,Delaware County,Lansdowne,http://www.lansdowneborough.com +Pennsylvania,Carbon County,Lansford,http://www.boroughoflansford.com/ +Pennsylvania,Sullivan County,Laporte,http://www.laportepa.com/ +Pennsylvania,Luzerne County,Larksville,http://larksvilleborough.org +Pennsylvania,Adams County,Latimore Township,http://www.latimore.org +Pennsylvania,Westmoreland County,Latrobe,https://cityoflatrobe.com/ +Pennsylvania,Westmoreland County,Laurel Mountain,http://laurelmountainboro.wordpress.com +Pennsylvania,Luzerne County,Laurel Run,http://www.laurelrunpa.net +Pennsylvania,Berks County,Laureldale,http://www.laureldaleboro.org +Pennsylvania,Erie County,Lawrence Park Township,http://www.lawrenceparktwp.org +Pennsylvania,Lancaster County,Leacock Township,http://www.leacocktwp.com +Pennsylvania,Lebanon County,Lebanon,http://www.lebanonpa.org +Pennsylvania,Allegheny County,Leetsdale,http://leetsdaleboro.net +Pennsylvania,Northampton County,Lehigh Township,http://www.lehightownship.com/ +Pennsylvania,Wayne County,Lehigh Township,http://www.lehightwpwayneco.org/ +Pennsylvania,Carbon County,Lehighton,http://www.lehightonborough.com +Pennsylvania,Luzerne County,Lehman Township,http://lehmanpa.com +Pennsylvania,Cumberland County,Lemoyne,https://www.lemoynepa.com/ +Pennsylvania,Franklin County,Letterkenny Township,http://letterkennytownship.org +Pennsylvania,York County,Lewisberry,http://lewisberryborough.org/ +Pennsylvania,Union County,Lewisburg,http://www.lewisburgborough.org/ +Pennsylvania,Mifflin County School District,Lewistown,http://lewistownborough.com/index.php +Pennsylvania,Allegheny County,Liberty,http://www.libertyborough.com +Pennsylvania,Westmoreland County,Ligonier,https://www.ligonier.com/ +Pennsylvania,Westmoreland County,Ligonier Township,http://www.ligoniertownship.com +Pennsylvania,Cambria County,Lilly,http://lillyboro.com +Pennsylvania,Montgomery County,Limerick Township,http://www.limerickpa.org +Pennsylvania,Allegheny County,Lincoln,http://www.lincolnborough.com +Pennsylvania,Lancaster County,Lititz,http://www.lititzpa.com +Pennsylvania,Lancaster County,Little Britain Township,http://www.littlebritain.org +Pennsylvania,Adams County,Littlestown,http://www.littlestownboro.org +Pennsylvania,Perry County,Liverpool,http://www.liverpool.pa.net/ +Pennsylvania,Clinton County,Lock Haven,http://lockhavenpa.gov +Pennsylvania,Blair County,Logan Township,http://www.logantownship-pa.gov +Pennsylvania,Clinton County,Loganton,https://www.logantonborough.org/ +Pennsylvania,York County,Loganville,http://www.LoganvillePA.us +Pennsylvania,Chester County,London Britain Township,http://www.londonbritaintownship-pa.gov +Pennsylvania,Chester County,London Grove Township,http://www.londongrove.org +Pennsylvania,Dauphin County,Londonderry Township,http://londonderrypa.org +Pennsylvania,Chester County,Londonderry Township,http://www.londonderrytownship.org +Pennsylvania,Berks County,Longswamp Township,http://www.co.berks.pa.us/longswamp/site/default.asp +Pennsylvania,Cambria County,Lorain,http://www.lorainborough.org +Pennsylvania,Cumberland County,Lower Allen Township,http://www.latwp.org +Pennsylvania,Westmoreland County,Lower Burrell,http://www.cityoflowerburrell.com/ +Pennsylvania,York County,Lower Chanceford Township,https://lowerchancefordtwppa.gov/ +Pennsylvania,Delaware County,Lower Chichester Township,http://lowerchitwp.com +Pennsylvania,Adams County,Lower Frederick Township,http://www.lowerfrederick.org +Pennsylvania,Montgomery County,Lower Gwynedd Township,http://www.lowergwynedd.org +Pennsylvania,Berks County,Lower Heidelberg Township,http://www.lowerheidelbergtownship.org/ +Pennsylvania,Lehigh County,Lower Macungie Township,http://www.lowermac.org +Pennsylvania,Bucks County,Lower Makefield Township,https://www.lmt.org/ +Pennsylvania,Lancaster County,Lower Merion Township,http://www.lowermerion.org/ +Pennsylvania,Lehigh County,Lower Milford Township,http://www.lowermilford.org +Pennsylvania,Montgomery County,Lower Moreland Township,http://www.lowermoreland.org +Pennsylvania,Northampton County,Lower Mount Bethel Township,http://www.lowermtbethel.org +Pennsylvania,Northampton County,Lower Nazareth Township,http://www.lowernazareth.com +Pennsylvania,Chester County,Lower Oxford Township,http://www.loweroxfordtownship.com +Pennsylvania,Dauphin County,Lower Paxton Township,http://lowerpaxton-pa.gov +Pennsylvania,Montgomery County,Lower Pottsgrove Township,http://www.lowerpottsgrove.org +Pennsylvania,Montgomery County,Lower Providence Township,http://www.lowerprovidence.org +Pennsylvania,York County,Lower Salford Township,http://www.lowersalfordtownship.org/ +Pennsylvania,Northampton County,Lower Saucon Township,http://www.lowersaucontownship.org +Pennsylvania,Bucks County,Lower Southampton Township,http://www.lowersouthamptontownship.org +Pennsylvania,Dauphin County,Lower Swatara Township,http://www.lowerswatara.org +Pennsylvania,Carbon County,Lower Towamensing Township,https://www.lowertowamensing.org +Pennsylvania,Lehigh County,Lowhill Township,http://lowhilltwp.org +Pennsylvania,Lycoming County,Loyalsock Township,http://www.loyalsocktownshipbos.com +Pennsylvania,Franklin County,Lurgan Township,http://www.lurgantownship.org +Pennsylvania,Luzerne County,Luzerne,http://luzerneborough.org +Pennsylvania,Dauphin County,Lykens,http://www.lykenspa.com +Pennsylvania,Dauphin County,Lykens Township,http://lykenstownship.com +Pennsylvania,Lehigh County,Lynn Township,http://www.lynntwp.org +Pennsylvania,Berks County,Lyons,http://www.lyonsborough.com +Pennsylvania,Lehigh County,Macungie,http://www.macungie.pa.us +Pennsylvania,Columbia County,Madison Township,http://www.madisontwpcol.com +Pennsylvania,Schuylkill County,Mahanoy City,http://www.mahanoycity.us/ +Pennsylvania,Carbon County,Mahoning Township,http://www.mahoningtownshiponline.com +Pennsylvania,Lawrence County,Mahoning Township,http://www.mahoningtownship.net +Pennsylvania,Berks County,Maidencreek Township,http://www.maidencreek.net +Pennsylvania,Columbia County,Main Township,http://maintownship.com +Pennsylvania,Chester County,Malvern,http://www.malvern.org +Pennsylvania,York County,Manchester,http://manchesterborough.com +Pennsylvania,Lancaster County,Manheim,http://manheimboro.org +Pennsylvania,Lancaster County,Manheim Township,http://www.manheimtownship.org +Pennsylvania,York County,Manheim Township,http://www.manheimtwpyorkpa.org/ +Pennsylvania,Westmoreland County,Manor,http://www.manorborough.com/manorportal/ +Pennsylvania,Lancaster County,Manor Township,http://www.manortwp.org +Pennsylvania,Armstrong County,Manor Township,http://www.manortownshippa.com +Pennsylvania,Tioga County,Mansfield,http://www.mansfield.org/ +Pennsylvania,Huntingdon County,Mapleton,http://www.mapleton-pa.com/index.htm +Pennsylvania,Delaware County,Marcus Hook,http://www.marcushookboro.org +Pennsylvania,Lancaster County,Marietta,http://www.boroughofmarietta.com +Pennsylvania,Centre County,Marion Township,http://mariontownship.net +Pennsylvania,Butler County,Marion Township,http://mariontwp.com +Pennsylvania,Beaver County,Marion Township,http://www.mariontownshipbeavercounty.com +Pennsylvania,Fayette County,Markleysburg,http://markleysburg.pa.us +Pennsylvania,Montgomery County,Marlborough Township,https://sites.google.com/site/marlboroughpaorg/home +Pennsylvania,Delaware County,Marple Township,http://www.marpletwp.com +Pennsylvania,Allegheny County,Marshall Township,http://www.twp.marshall.pa.us/ +Pennsylvania,Lancaster County,Martic Township,http://www.martictownship.com +Pennsylvania,Blair County,Martinsburg,http://www.martinsburgpa.org +Pennsylvania,Perry County,Marysville,http://www.marysvilleboro.com/per-marysville/site/default.asp +Pennsylvania,Fayette County,Masontown,http://masontownpa.com +Pennsylvania,Pike County,Matamoras,http://www.matamorasborough.com/%7C +Pennsylvania,Berks County,Maxatawny Township,http://www.maxatawny.net/ +Pennsylvania,Lackawanna County,Mayfield,http://mayfieldborough.org +Pennsylvania,Allegheny County,McCandless Township,http://www.townofmccandless.org +Pennsylvania,Erie County,McKean Township,http://www.mckean-township.com +Pennsylvania,Allegheny County,McKees Rocks,https://mckeesrockspa.us/ +Pennsylvania,Allegheny County,McKeesport,http://www.mckeesport-pa.gov/ +Pennsylvania,Mifflin County,McVeytown,http://www.mcveytownboro.com +Pennsylvania,Crawford County,Meadville,http://www.cityofmeadville.org +Pennsylvania,Cumberland County,Mechanicsburg,http://www.mechanicsburgpa.org +Pennsylvania,Delaware County,Media,http://www.mediaborough.com +Pennsylvania,Fayette County,Menallen Township,http://www.menallen.org +Pennsylvania,Mifflin County,Menno Township,http://www.mennotownship.com +Pennsylvania,Franklin County,Mercersburg,https://borough.mercersburg.org +Pennsylvania,Wyoming County,Meshoppen,http://www.meshoppen.com/ +Pennsylvania,Dauphin County,Middle Paxton Township,http://middlepaxtontwp.org +Pennsylvania,Monroe County,Middle Smithfield Township,https://www.middlesmithfieldtownship.com/ +Pennsylvania,Snyder County,Middlecreek Township,http://www.mctwp.org/ +Pennsylvania,Cumberland County,Middlesex Township,http://middlesextwp.com +Pennsylvania,Butler County,Middlesex Township,http://www.middlesextownship.org +Pennsylvania,Dauphin County,Middletown,http://www.middletownborough.com +Pennsylvania,Bucks County,Middletown Township,http://www.middletownbucks.org +Pennsylvania,Delaware County,Middletown Township,http://www.middletowntownship.org +Pennsylvania,Lycoming County,Mifflin Township,http://www.mifflintwp.com +Pennsylvania,Union County,Mifflinburg,http://www.mifflinburgborough.org/ +Pennsylvania,Juniata County,Mifflintown,http://www.mifflintownborough.com/ +Pennsylvania,Pike County,Milford,https://www.milfordboro.org +Pennsylvania,Bucks County,Milford Township,http://www.milfordtownship.org +Pennsylvania,Lycoming County,Mill Creek Township,http://www.millcreektwp.com +Pennsylvania,Erie County,Mill Village,http://millvillageboro.org +Pennsylvania,Delaware County,Millbourne,http://www.millbourneborough.org +Pennsylvania,Erie County,Millcreek Township,http://www.millcreektownship.com +Pennsylvania,Lebanon County,Millcreek Township,http://www.millcreektownship.info +Pennsylvania,Dauphin County,Millersburg,http://www.millersburgpa.org +Pennsylvania,Perry County,Millerstown,http://www.millerstown.org/ +Pennsylvania,Lancaster County,Millersville,http://www.millersvilleborough.org +Pennsylvania,Centre County,Millheim,http://www.millheimborough.net +Pennsylvania,Allegheny County,Millvale,http://www.millvalepa.com/ +Pennsylvania,Columbia County,Millville,http://www.millvilleboro.org +Pennsylvania,Northumberland County,Milton,http://www.miltonpa.org +Pennsylvania,Schuylkill County,Minersville,https://minersvillepa.gov/ +Pennsylvania,Chester County,Modena,http://boroughofmodenapa.org +Pennsylvania,Berks County,Mohnton,http://www.co.berks.pa.us/Muni/Mohnton/Pages/Home.aspx +Pennsylvania,Beaver County,Monaca,http://www.monacapa.net +Pennsylvania,York County,Monaghan Township,http://www.monaghantownship.com/ +Pennsylvania,Westmoreland County,Monessen,http://www.cityofmonessen.com +Pennsylvania,Washington County,Monongahela,http://www.cityofmonongahela-pa.gov/ +Pennsylvania,Bradford County,Monroe,http://www.monroeborough.org/ +Pennsylvania,Cumberland County,Monroe Township,http://monroetwp.net +Pennsylvania,Allegheny County,Monroeville,http://www.monroeville.pa.us +Pennsylvania,Franklin County,Mont Alto,http://www.montaltoborough.com +Pennsylvania,Lycoming County,Montgomery,http://www.montgomeryborough.org +Pennsylvania,Montgomery County,Montgomery Township,http://www.montgomerytwp.org +Pennsylvania,Columbia County,Montour Township,http://montourtownship.org +Pennsylvania,Lycoming County,Montoursville,http://www.montoursvilleborough.org +Pennsylvania,Allegheny County,Moon Township,http://www.moontwp.com/ +Pennsylvania,Northampton County,Moore Township,http://mooretownship.org/ +Pennsylvania,Lackawanna County,Moosic,http://moosicborough.com +Pennsylvania,Bucks County,Morrisville,http://morrisvillepagov.com +Pennsylvania,Delaware County,Morton,http://mortonpa.org +Pennsylvania,Lackawanna County,Moscow,http://www.moscowboro.com +Pennsylvania,Northumberland County,Mount Carmel,http://www.mountcarmelborough.org/ +Pennsylvania,Northumberland County,Mount Carmel Township,http://www.mountcarmeltownship.org/ +Pennsylvania,Lebanon County,Mount Gretna,http://borough.mtgretna.com +Pennsylvania,Cumberland County,Mount Holly Springs,http://mhsboro.org +Pennsylvania,Lancaster County,Mount Joy,http://www.mountjoyborough.com +Pennsylvania,Lancaster County,Mount Joy Township,http://www.mtjoytwp.org +Pennsylvania,Adams County,Mount Joy Township,http://www.mtjoytwp.us +Pennsylvania,Allegheny County,Mount Oliver,http://www.mountoliver.us +Pennsylvania,Berks County,Mount Penn,http://mtpennborough.net +Pennsylvania,Westmoreland County,Mount Pleasant,http://www.mtpleasantboro.com +Pennsylvania,Westmoreland County,Mount Pleasant Township,http://www.mtpleasanttwp.com +Pennsylvania,Washington County,Mount Pleasant Township,http://www.mtp-pa.com +Pennsylvania,Columbia County,Mount Pleasant Township,http://www.mtpleasantcolumbiapa.org +Pennsylvania,Monroe County,Mount Pocono,http://mountpocono-pa.gov/ +Pennsylvania,Huntingdon County,Mount Union,http://www.mtunionpa.org +Pennsylvania,York County,Mount Wolf,https://mtwolfpa.gov +Pennsylvania,Lancaster County,Mountville,http://mountvilleborough.com +Pennsylvania,Butler County,Muddy Creek Township,http://www.muddycreektwp.com +Pennsylvania,Berks County,Muhlenberg Township,https://www.muhlenbergtwp.com/ +Pennsylvania,Lycoming County,Muncy,http://muncyboro.org +Pennsylvania,Allegheny County,Munhall,http://www.munhallpa.us/ +Pennsylvania,Westmoreland County,Murrysville,http://www.murrysville.com/ +Pennsylvania,Lebanon County,Myerstown,http://myerstownpa.org +Pennsylvania,Luzerne County,Nanticoke,http://www.nanticokecity.com/ +Pennsylvania,Montgomery County,Narberth,http://www.narberthborough.com +Pennsylvania,Northampton County,Nazareth,http://www.nazarethboroughpa.com/ +Pennsylvania,Luzerne County,Nescopeck Township,http://nescopecktwp.org +Pennsylvania,Lawrence County,Neshannock Township,http://www.neshannock.org +Pennsylvania,Carbon County,Nesquehoning,http://nesquehoning.org +Pennsylvania,Delaware County,Nether Providence Township,http://www.netherprovidence.org +Pennsylvania,Bradford County,New Albany,http://new-albany.com +Pennsylvania,Westmoreland County,New Alexandria,http://www.newalexpa.org/ +Pennsylvania,Lawrence County,New Beaver,http://newbeaverborough.org +Pennsylvania,Union County,New Berlin,http://www.newberlinpa.us/ +Pennsylvania,Clarion County,New Bethlehem,http://www.newbethlehemboro.com +Pennsylvania,Beaver County,New Brighton,http://newbrightonpa.org/ +Pennsylvania,Bucks County,New Britain,http://www.newbritainboro.com +Pennsylvania,Bucks County,New Britain Township,http://www.newbritaintownship.org +Pennsylvania,Lawrence County,New Castle,http://www.newcastlepa.org +Pennsylvania,Cumberland County,New Cumberland,http://www.newcumberlandborough.com +Pennsylvania,York County,New Freedom,http://www.newfreedomboro.org/ +Pennsylvania,Chester County,New Garden Township,http://www.newgarden.org +Pennsylvania,Montgomery County,New Hanover Township,http://www.newhanover-pa.org +Pennsylvania,Lancaster County,New Holland,http://www.newhollandborough.org +Pennsylvania,Bucks County,New Hope,http://www.newhopeborough.org +Pennsylvania,Westmoreland County,New Kensington,http://newkensingtononline.com +Pennsylvania,Chester County,New London Township,http://www.newlondontwp.net +Pennsylvania,Berks County,New Morgan,https://www.newmorganboro.org +Pennsylvania,Beaver County,New Sewickley Township,http://newsewickley.com +Pennsylvania,Westmoreland County,New Stanton,http://www.newstanton.org +Pennsylvania,Lawrence County,New Wilmington,http://nwboro.com +Pennsylvania,Cumberland County,Newburg,http://www.newburgborough.com +Pennsylvania,Luzerne County,Newport Township,http://newporttownship.com +Pennsylvania,Bucks County,Newtown,https://www.boroughofnewtown.com/ +Pennsylvania,Bucks County,Newtown Township,http://www.twp.newtown.pa.us +Pennsylvania,Delaware County,Newtown Township,http://www.newtowntownship.org +Pennsylvania,Cumberland County,Newville,http://www.newvilleborough.com +Pennsylvania,Wyoming County,Nicholson,http://www.nicholsonborough.org/ +Pennsylvania,Lycoming County,Nippenose Township,http://www.nippenosetwp.com +Pennsylvania,Bucks County,Nockamixon Township,http://www.nockamixontownship.org +Pennsylvania,Montgomery County,Norristown,http://www.norristown.org/ +Pennsylvania,Lebanon County,North Annville Township,http://nannvilletwp.com +Pennsylvania,Armstrong County,North Apollo,http://northapolloborough.com/ +Pennsylvania,Allegheny County,North Braddock,http://www.northbraddockborough.com +Pennsylvania,Northampton County,North Catasauqua,http://www.northcatasauqua.org/ +Pennsylvania,Columbia County,North Centre Township,http://www.northcentretownship.com +Pennsylvania,Lebanon County,North Cornwall Township,http://www.nctown.org +Pennsylvania,Chester County,North Coventry Township,http://www.northcoventry.us +Pennsylvania,Erie County,North East,http://northeastborough.com +Pennsylvania,Erie County,North East Township,http://northeasttwp.org +Pennsylvania,Washington County,North Franklin Township,http://northfranklin.org +Pennsylvania,Lebanon County,North Lebanon Township,http://www.northlebanontwppa.gov +Pennsylvania,Lebanon County,North Londonderry Township,http://www.nlondtwp.com +Pennsylvania,Cumberland County,North Middleton Township,http://www.nmiddleton.com +Pennsylvania,Cumberland County,North Newton Township,http://northnewtontownship.com +Pennsylvania,Beaver County,North Sewickley Township,http://www.northsewickleytwp.org +Pennsylvania,Crawford County,North Shenango Township,http://www.northshenango.com +Pennsylvania,Washington County,North Strabane Township,http://northstrabanetwp.com/ +Pennsylvania,Fayette County,North Union Township,http://northuniontownship-pa.gov +Pennsylvania,Montgomery County,North Wales,http://www.northwalesborough.org +Pennsylvania,Lehigh County,North Whitehall Township,http://www.northwhitehall.org +Pennsylvania,Northampton County,Northampton,http://www.northamptonboro.com/ +Pennsylvania,Bucks County,Northampton Township,http://www.northamptontownship.com +Pennsylvania,Cambria County,Northern Cambria,https://northerncambriaborough.com/ +Pennsylvania,Northumberland County,Northumberland,http://www.northumberlandborough.com/ +Pennsylvania,Schuylkill County,Norwegian Township,http://norwegiantownship.com/ +Pennsylvania,Delaware County,Norwood,http://www.norwoodpa.org +Pennsylvania,Wyoming County,Noxen Township,http://noxenpa.com/ +Pennsylvania,Allegheny County,Oakdale,http://www.oakdaleborough.com/ +Pennsylvania,Susquehanna County,Oakland,http://www.oaklandboro.com/ +Pennsylvania,Butler County,Oakland Township,http://oaklandtownship.us +Pennsylvania,Allegheny County,Oakmont,http://www.oakmont-pa.com/ +Pennsylvania,Allegheny County,Ohio Township,http://www.ohiotwp.org/ +Pennsylvania,Beaver County,Ohioville,http://ohiovilleboro.org +Pennsylvania,Venango County,Oil City,http://www.oilcity.org/ +Pennsylvania,Lackawanna County,Old Forge,http://www.oldforgeborough.com +Pennsylvania,Lycoming County,Old Lycoming Township,http://www.oldlycomingtwp.org +Pennsylvania,Berks County,Oley Township,mw-data:TemplateStyles:r1066479718 +Pennsylvania,Mifflin County,Oliver Township,http://olivertwpmifflin.us/main.html +Pennsylvania,Perry County,Oliver Township,http://www.tricountyi.net/~olivert/ +Pennsylvania,Lackawanna County,Olyphant,http://olyphantborough.com +Pennsylvania,Berks County,Ontelaunee Township,http://www.ontelauneetwp.com +Pennsylvania,Schuylkill County,Orwigsburg,http://www.orwigsburg.net +Pennsylvania,Chester County,Oxford,http://www.oxfordboro.org +Pennsylvania,Somerset County,Paint Township,https://www.painttownship.com/ +Pennsylvania,Northampton County,Palmer Township,http://www.palmertwp.com +Pennsylvania,Carbon County,Palmerton,http://palmertonborough.com +Pennsylvania,Lebanon County,Palmyra,http://www.palmyraborough.org +Pennsylvania,Wayne County,Palmyra Township,http://www.palmyrawayne.org/ +Pennsylvania,Schuylkill County,Palo Alto,http://www.paloaltopa.com/ +Pennsylvania,Lancaster County,Paradise Township,http://paradisetownship.org +Pennsylvania,Monroe County,Paradise Township,https://www.paradisetownship.com/ +Pennsylvania,Armstrong County,Parker,http://www.visitparker.us/index.html +Pennsylvania,Chester County,Parkesburg,http://www.parkesburg.org +Pennsylvania,Delaware County,Parkside,http://www.parksideboro.com +Pennsylvania,Carbon County,Parryville,https://parryville.org/ +Pennsylvania,Beaver County,Patterson Heights,http://patterson-hgts.com +Pennsylvania,Beaver County,Patterson Township,http://www.pattersontwp.com +Pennsylvania,Cambria County,Patton,http://www.pattonboro.com +Pennsylvania,Centre County,Patton Township,http://twp.patton.pa.us +Pennsylvania,Wayne County,Paupack Township,http://www.paupacktownship.org/ +Pennsylvania,Dauphin County,Paxtang,http://www.paxtang.org +Pennsylvania,Northampton County,Pen Argyl,https://www.penargylborough.com/ +Pennsylvania,Dauphin County,Penbrook,http://www.penbrook.org +Pennsylvania,Carbon County,Penn Forest Township,http://www.pennforesttownship.org +Pennsylvania,Allegheny County,Penn Hills Township,http://www.pennhills.org +Pennsylvania,Luzerne County,Penn Lake Park,http://www.pennlake.org +Pennsylvania,Westmoreland County,Penn Township,https://penntwp.org/ +Pennsylvania,York County,Penn Township,http://www.penntwp.com/ +Pennsylvania,Lancaster County,Penn Township,http://penntwplanco.org +Pennsylvania,Chester County,Penn Township,http://www.penntownship.us +Pennsylvania,Butler County,Penn Township,http://penntownship.org +Pennsylvania,Cumberland County,Penn Township,http://penntwpcc.org +Pennsylvania,Bucks County,Penndel,http://www.penndelboro.com +Pennsylvania,Montgomery County,Pennsburg,http://www.pennsburg.us +Pennsylvania,Chester County,Pennsbury Township,http://www.pennsbury.pa.us +Pennsylvania,Allegheny County,Pennsbury Village,http://pennsburyvillageboro.com +Pennsylvania,Lancaster County,Pequea Township,http://www.pequeatwp.org +Pennsylvania,Bucks County,Perkasie,http://www.perkasieborough.org +Pennsylvania,Montgomery County,Perkiomen Township,http://www.perkiomentownship.org +Pennsylvania,Fayette County,Perry Township,http://www.perryopolis.com/perrytwp/index.html +Pennsylvania,Snyder County,Perry Township,http://www.perrytownship.org/ +Pennsylvania,Lawrence County,Perry Township,http://www.perrytownshiplawrencecountypa.com +Pennsylvania,Greene County,Perry Township,http://www.co.greene.pa.us/perrytwp +Pennsylvania,Washington County,Peters Township,http://www.peterstownship.com/ +Pennsylvania,Centre County,Philipsburg,http://www.philipsburgborough.com +Pennsylvania,Chester County,Phoenixville,http://www.phoenixville.org +Pennsylvania,Lycoming County,Piatt Township,http://piatttownship.org +Pennsylvania,Dauphin County,Pillow,http://www.pillowpa.org +Pennsylvania,Clinton County,Pine Creek Township,http://www.pinecreektownship.com +Pennsylvania,Allegheny County,Pine Township,http://twp.pine.pa.us/ +Pennsylvania,Mercer County,Pine Township,http://www.pinetownship.org +Pennsylvania,Lycoming County,Pine Township,http://www.pinetownshiplycomingco.org +Pennsylvania,Allegheny County,Pitcairn,http://pitcairnborough.us +Pennsylvania,Luzerne County,Pittston,http://www.pittstoncity.org +Pennsylvania,Luzerne County,Pittston Township,http://pittstontownship.org +Pennsylvania,Lawrence County,Plain Grove Township,http://plaingrovetwp.org +Pennsylvania,Northampton County,Plainfield Township,https://plainfieldtownship.org/ +Pennsylvania,Luzerne County,Plains Township,http://www.plainstownship.org +Pennsylvania,Allegheny County,Pleasant Hills,http://www.pleasanthillspa.com +Pennsylvania,Allegheny County,Plum,http://www.plumboro.com +Pennsylvania,Bucks County,Plumstead Township,http://www.plumstead.org +Pennsylvania,Lycoming County,Plunketts Creek Township,http://www.plunkettscreektownship.org +Pennsylvania,Luzerne County,Plymouth,http://www.plymouthborough.org +Pennsylvania,Montgomery County,Plymouth Township,http://www.plymouthtownship.org/ +Pennsylvania,Monroe County,Pocono Township,https://www.poconopa.gov/ +Pennsylvania,Chester County,Pocopson Township,http://www.pocopson.org +Pennsylvania,Monroe County,Polk Township,https://polktwp.org/ +Pennsylvania,Allegheny County,Port Vue,http://portvue.org +Pennsylvania,Cambria County,Portage,http://portageboro.com +Pennsylvania,Cambria County,Portage Township,http://portagetwp.com +Pennsylvania,Clinton County,Porter Township,http://portertownshippa.com +Pennsylvania,Pike County,Porter Township,http://www.portertownship.net/ +Pennsylvania,Northampton County,Portland,https://portlandboroughpa.com/ +Pennsylvania,Centre County,Potter Township,http://pottertownship.org +Pennsylvania,Beaver County,Potter Township,http://www.pottertwp-pa.gov +Pennsylvania,Montgomery County,Pottstown,http://www.pottstown.org +Pennsylvania,Schuylkill County,Pottsville,http://www.city.pottsville.pa.us +Pennsylvania,Wayne County,Preston Township,http://www.prestontownship.com/ +Pennsylvania,Monroe County,Price Township,http://pricetownshippa.com/ +Pennsylvania,Luzerne County,Pringle,http://www.pringlepa.us +Pennsylvania,Wayne County,Prompton,http://promptonpa.com/ +Pennsylvania,Butler County,Prospect,http://prospectborough.com +Pennsylvania,Delaware County,Prospect Park,http://prospectparkboro.com +Pennsylvania,Lancaster County,Providence Township,http://providencetownship.com +Pennsylvania,Lawrence County,Pulaski Township,http://www.pulaskitownship.com +Pennsylvania,Beaver County,Pulaski Township,http://www.pulaskitwpbeavercounty.org +Pennsylvania,Jefferson County,Punxsutawney,http://www.punxsutawneyboro.com/ +Pennsylvania,Bucks County,Quakertown,https://www.quakertown.org/ +Pennsylvania,Lancaster County,Quarryville,http://quarryvilleborough.com +Pennsylvania,Franklin County,Quincy Township,http://www.quincytwp.org +Pennsylvania,Beaver County,Raccoon Township,http://www.raccoontownshipbeavercounty.com +Pennsylvania,Delaware County,Radnor Township,http://radnor.com/ +Pennsylvania,Allegheny County,Rankin,http://www.rankinborough.com +Pennsylvania,Lancaster County,Rapho Township,http://raphotownship.com +Pennsylvania,Berks County,Reading,https://www.readingpa.gov/ +Pennsylvania,Adams County,Reading Township,http://www.adamscounty.us/Munic/ReadingTownship +Pennsylvania,Montgomery County,Red Hill,https://www.redhillborough.org/ +Pennsylvania,York County,Red Lion,http://www.redlionpa.org +Pennsylvania,Fayette County,Redstone Township,http://www.redstonetownship.com +Pennsylvania,Dauphin County,Reed Township,http://www.reedtownship.com +Pennsylvania,Clinton County,Renovo,https://renovoborough.org/ +Pennsylvania,Jefferson County,Reynoldsville,http://reynoldsvilleboro.com/ +Pennsylvania,Luzerne County,Rice Township,http://ricetwp.com +Pennsylvania,Bucks County,Richland Township,http://www.richlandtownship.org +Pennsylvania,Cambria County,Richland Township,http://www.richlandtwp.com +Pennsylvania,Allegheny County,Richland Township,https://richland.pa.us/ +Pennsylvania,Bucks County,Richlandtown,http://www.richlandtownborough.org +Pennsylvania,Crawford County,Richmond Township,http://www.richmondtownshipcc.com +Pennsylvania,Bradford County,Ridgebury Township,http://www.ridgeburytownship.org +Pennsylvania,Elk County,Ridgway,http://www.ridgwayborough.com +Pennsylvania,Delaware County,Ridley Park,http://www.ridleyparkborough.org +Pennsylvania,Delaware County,Ridley Township,http://www.twp.ridley.pa.us +Pennsylvania,Bucks County,Riegelsville,http://www.riegelsville.org +Pennsylvania,Clarion County,Rimersburg,http://www.rimersburgborough.com +Pennsylvania,Northumberland County,Riverside,http://www.riversideborough.org/ +Pennsylvania,Blair County,Roaring Spring,http://www.roaringspring.net/ +Pennsylvania,Berks County,Robesonia,http://www.robesoniaboro.org +Pennsylvania,Allegheny County,Robinson Township,https://townshipofrobinson.com/ +Pennsylvania,Beaver County,Rochester Township,http://rochestertwp.org +Pennsylvania,Montgomery County,Rockledge,http://www.rockledgeborough.org +Pennsylvania,Bradford County,Rome Township,http://www.rometownshippa.org +Pennsylvania,Delaware County,Rose Valley,http://www.rosevalleyborough.org +Pennsylvania,Northampton County,Roseto,https://boroughroseto.com/ +Pennsylvania,Allegheny County,Ross Township,http://ross.pa.us +Pennsylvania,Monroe County,Ross Township,http://rosstwp.com/ +Pennsylvania,Allegheny County,Rosslyn Farms,http://rosslynfarmspa.gov +Pennsylvania,Westmoreland County,Rostraver Township,http://www.rostraver.us +Pennsylvania,Dauphin County,Royalton,http://royaltonpa.com +Pennsylvania,Montgomery County,Royersford,https://www.royersfordborough.org/ +Pennsylvania,Berks County,Ruscombmanor Township,http://www.ruscombmanor.org/ +Pennsylvania,Centre County,Rush Township,http://www.rushtownship.com +Pennsylvania,Schuylkill County,Rush Township,https://rushtownship.org/ +Pennsylvania,Dauphin County,Rush Township,http://www.rushtownshippa.com +Pennsylvania,Delaware County,Rutledge,http://www.rutledgepa.org +Pennsylvania,Perry County,Rye Township,https://ryetwp.com/ +Pennsylvania,Lawrence County,S.N.P.J.,http://snpjrec.com +Pennsylvania,Chester County,Sadsbury Township,http://www.sadsburytwp.org +Pennsylvania,Lancaster County,Sadsbury Township,http://www.sadsburytownshiplancaster.org +Pennsylvania,Crawford County,Sadsbury Township,http://www.sadsburytownship.com +Pennsylvania,Crawford County,Saegertown,http://www.saegertownpa.com +Pennsylvania,Luzerne County,Salem Township,http://www.salemtownshipluzerne.info +Pennsylvania,Montgomery County,Salford Township,http://www.salfordtownship.com +Pennsylvania,Lehigh County,Salisbury Township,http://www.salisburytownshippa.org +Pennsylvania,Lancaster County,Salisbury Township,http://www.salisburytownship.org +Pennsylvania,Fayette County,Saltlick Township,http://saltlicktownship.org +Pennsylvania,Indiana County,Saltsburg,http://www.saltsburg.org/ +Pennsylvania,Mercer County,Sandy Lake,http://sandylakeborough.com +Pennsylvania,Butler County,Saxonburg,http://www.saxonburgpa.com +Pennsylvania,Bradford County,Sayre,http://sayreborough.org/ +Pennsylvania,Schuylkill County,Schuylkill Haven,http://www.schuylkillhaven.org +Pennsylvania,Chester County,Schuylkill Township,https://schuylkilltwp.org +Pennsylvania,Allegheny County,Scott Township,https://scott-twp.com/ +Pennsylvania,Columbia County,Scott Township,http://scott-township.com +Pennsylvania,Westmoreland County,Scottdale,http://www.scottdale.com +Pennsylvania,Lackawanna County,Scranton,http://www.scrantonpa.gov +Pennsylvania,Snyder County,Selinsgrove,http://www.selinsgrove.org/Pages/default.aspx +Pennsylvania,Bucks County,Sellersville,http://sellersvilleboro.org +Pennsylvania,Butler County,Seven Fields,http://www.sevenfields.org +Pennsylvania,York County,Seven Valleys,http://www.SevenValleysBorough.com +Pennsylvania,Allegheny County,Sewickley,http://www.sewickleyborough.org +Pennsylvania,Allegheny County,Sewickley Heights,http://www.sewickleyheightsboro.com +Pennsylvania,Allegheny County,Sewickley Hills,http://www.sewickleyhills.com +Pennsylvania,Westmoreland County,Sewickley Township,http://www.sewickleytownship.org +Pennsylvania,Allegheny County,Shaler Township,http://www.shaler.org/ +Pennsylvania,Northumberland County,Shamokin,http://www.shamokincity.org/ +Pennsylvania,Snyder County,Shamokin Dam,http://www.shamokindam.net +Pennsylvania,Mercer County,Sharon,http://www.cityofsharon.net +Pennsylvania,Delaware County,Sharon Hill,http://www.sharonhillboro.com +Pennsylvania,Allegheny County,Sharpsburg,http://www.sharpsburgborough.com +Pennsylvania,Mercer County,Sharpsville,http://www.sharpsville.org +Pennsylvania,Schuylkill County,Shenandoah,http://shenandoahpa.org/ +Pennsylvania,Lawrence County,Shenango Township,http://www.shenangotownship.org +Pennsylvania,Bradford County,Sheshequin Township,http://www.sheshequintwp.org +Pennsylvania,Luzerne County,Shickshinny,http://www.shickshinny.org +Pennsylvania,Berks County,Shillington,http://www.co.berks.pa.us/Muni/Shillington/ +Pennsylvania,Potter County,Shinglehouse,http://shinglehouseborough.org/home +Pennsylvania,Cumberland County,Shippensburg,http://www.borough.shippensburg.pa.us +Pennsylvania,Cumberland County,Shippensburg Township,http://shippensburgtownship.com +Pennsylvania,Clarion County,Shippenville,http://www.shippenvilleboro.com +Pennsylvania,Beaver County,Shippingport,http://shippingportpa.com +Pennsylvania,Pike County,Shohola Township,http://shoholatwp.org/ +Pennsylvania,York County,Shrewsbury,http://www.ShrewsburyBorough.org +Pennsylvania,Susquehanna County,Silver Lake Township,http://www.silverlaketwp.org +Pennsylvania,Cumberland County,Silver Spring Township,http://www.sstwp.org +Pennsylvania,Bucks County,Silverdale,http://www.silverdalepa.org +Pennsylvania,Berks County,Sinking Spring,http://www.co.berks.pa.us/Muni/SinkingSpring/Pages/default.aspx +Pennsylvania,Montgomery County,Skippack Township,http://www.skippacktownship.org +Pennsylvania,Lehigh County,Slatington,http://slatington.org +Pennsylvania,Clarion County,Sligo,http://www.sligopa.com +Pennsylvania,Butler County,Slippery Rock,http://www.slipperyrockboroughpa.gov +Pennsylvania,Butler County,Slippery Rock Township,http://srtwp.com +Pennsylvania,Lawrence County,Slippery Rock Township,http://slipperyrocktownship.org +Pennsylvania,McKean County,Smethport,http://www.smethportpa.org +Pennsylvania,Washington County,Smith Township,http://www.smithtownship.org +Pennsylvania,Monroe County,Smithfield Township,https://smithfieldtownship.com/ +Pennsylvania,Bradford County,Smithfield Township,http://smithfieldtownshipbc.org +Pennsylvania,Jefferson County,Snyder Township,http://snydertwp.com +Pennsylvania,Bucks County,Solebury Township,http://www.soleburytwp.org +Pennsylvania,Somerset County,Somerset,http://www.somersetborough.com +Pennsylvania,Montgomery County,Souderton,http://www.soudertonborough.org +Pennsylvania,Lebanon County,South Annville Township,http://www.southannville.com +Pennsylvania,Beaver County,South Beaver Township,http://www.southbeavertwp.com/ +Pennsylvania,Armstrong County,South Bethlehem,http://www.lehighvalleyhistory.com/the-borough-of-south-bethlehem/ +Pennsylvania,Armstrong County,South Buffalo Township,http://southbuffalotwp.com +Pennsylvania,Columbia County,South Centre Township,http://www.southcentre.us +Pennsylvania,Chester County,South Coatesville,http://south-coatesville.org +Pennsylvania,Fayette County,South Connellsville,http://www.southconnellsvilleboroughpa.com +Pennsylvania,Chester County,South Coventry Township,http://www.southcoventry.org +Pennsylvania,Allegheny County,South Fayette Township,http://www.southfayettepa.com +Pennsylvania,Washington County,South Franklin Township,http://www.southfranklintwp.org +Pennsylvania,Westmoreland County,South Greensburg,http://www.southgreensburg.org +Pennsylvania,Dauphin County,South Hanover Township,http://www.southhanover.org +Pennsylvania,Lebanon County,South Lebanon Township,http://twp.south-lebanon.pa.us +Pennsylvania,Lebanon County,South Londonderry Township,http://www.southlondonderry.org +Pennsylvania,Cumberland County,South Middleton Township,http://www.smiddleton.com +Pennsylvania,Cumberland County,South Newton Township,http://southnewtontownship.net +Pennsylvania,Crawford County,South Shenango Township,http://www.southshenangotwp.com +Pennsylvania,Washington County,South Strabane Township,https://www.southstrabane.com/ +Pennsylvania,Fayette County,South Union Township,http://www.southuniontwp.com +Pennsylvania,Lehigh County,South Whitehall Township,http://southwhitehall.com +Pennsylvania,Lycoming County,South Williamsport,http://southwilliamsport.net +Pennsylvania,Franklin County,Southampton Township,http://www.southamptontownship.org +Pennsylvania,Cumberland County,Southampton Township,http://southamptontwp.com +Pennsylvania,Cambria County,Southmont,http://www.southmontborough.com +Pennsylvania,Chester County,Spring City,http://www.springcitypa.gov +Pennsylvania,York County,Spring Garden Township,http://www.springgardentwp.org/ +Pennsylvania,Berks County,Spring Township,http://www.springtwpberks.org/ +Pennsylvania,Centre County,Spring Township,http://www.springtownship.org +Pennsylvania,Allegheny County,Springdale,http://www.springdaleborough.com +Pennsylvania,York County,Springettsbury Township,http://www.springettsbury.com +Pennsylvania,Delaware County,Springfield Township,http://www.springfielddelco.org +Pennsylvania,Montgomery County,Springfield Township,http://www.springfieldmontco.org +Pennsylvania,York County,Springfield Township,http://www.SpringfieldYork.org +Pennsylvania,Bucks County,Springfield Township,http://www.springfieldbucks.org +Pennsylvania,Mercer County,Springfield Township,http://www.springfield-mercer.org +Pennsylvania,Schuylkill County,St. Clair,https://www.stclair-gov.org/ +Pennsylvania,Berks County,St. Lawrence,http://slboro.com +Pennsylvania,Elk County,St. Marys,http://www.stmaryspa.gov// +Pennsylvania,Centre County,State College,http://www.statecollegepa.us +Pennsylvania,Dauphin County,Steelton,http://www.steeltonpa.com +Pennsylvania,York County,Stewartstown,http://www.stewartstown.org/ +Pennsylvania,Northampton County,Stockertown,http://www.stockertown.org +Pennsylvania,Mercer County,Stoneboro,http://www.stoneboropa.com +Pennsylvania,Cambria County,Stonycreek Township,http://www.stonycreektownship.com +Pennsylvania,Adams County,Straban Township,http://www.strabantownship.com +Pennsylvania,Lancaster County,Strasburg,http://strasburgboro.org +Pennsylvania,Lancaster County,Strasburg Township,http://www.strasburgtownship.com +Pennsylvania,Monroe County,Stroud Township,https://stroudtownship.org/ +Pennsylvania,Monroe County,Stroudsburg,http://stroudsburgboro.com +Pennsylvania,Warren County,Sugar Grove,http://www.sugargrovepa.com +Pennsylvania,Luzerne County,Sugar Notch,http://www.sugarnotchborough.com +Pennsylvania,Venango County,Sugarcreek,https://www.sugarcreekborough.us +Pennsylvania,Luzerne County,Sugarloaf Township,http://www.sugarloaftwp.org +Pennsylvania,Cambria County,Summerhill Township,http://www.summerhilltwp.com +Pennsylvania,Carbon County,Summit Hill,http://www.summithillborough.com +Pennsylvania,Erie County,Summit Township,http://www.summittownship.com +Pennsylvania,Butler County,Summit Township,http://summittwp.org +Pennsylvania,Crawford County,Summit Township,http://summitcrawford.com +Pennsylvania,Northumberland County,Sunbury,https://www.sunburypa.org/ +Pennsylvania,Dauphin County,Susquehanna Township,http://www.susquehannatwp.com +Pennsylvania,Cambria County,Susquehanna Township,http://susqtwp.com +Pennsylvania,Lycoming County,Susquehanna Township,http://susquehannatwp.org +Pennsylvania,Delaware County,Swarthmore,http://www.swarthmorepa.org +Pennsylvania,Dauphin County,Swatara Township,http://www.swataratwp.com +Pennsylvania,Lebanon County,Swatara Township,http://www.swataratownshiplebanon.org +Pennsylvania,Allegheny County,Swissvale,http://swissvaleborough.com +Pennsylvania,Luzerne County,Swoyersville,http://www.swoyersvillepa.us +Pennsylvania,Jefferson County,Sykesville,http://sykesboro.org +Pennsylvania,Allegheny County,Tarentum,http://www.tarentumboro.com +Pennsylvania,Northampton County,Tatamy,http://www.tatamypa.com/ +Pennsylvania,Lackawanna County,Taylor,http://taylorborough.com +Pennsylvania,Bucks County,Telford,http://www.telfordborough.org +Pennsylvania,Lancaster County,Terre Hill,http://www.terrehillboro.com +Pennsylvania,Allegheny County,Thornburg,http://thornburgborough.org +Pennsylvania,Delaware County,Thornbury Township,http://www.thornbury.org +Pennsylvania,Chester County,Thornbury Township,http://www.thornburytwp.com +Pennsylvania,Lackawanna County,Thornhurst Township,http://www.thornhursttwp.com/ +Pennsylvania,Lackawanna County,Throop,http://www.throopboro.com +Pennsylvania,Delaware County,Tinicum Township,http://www.tinicumtownshipdelco.com +Pennsylvania,Bucks County,Tinicum Township,http://www.tinicumbucks.org +Pennsylvania,Crawford County,Titusville,http://www.cityoftitusvillepa.gov +Pennsylvania,Monroe County,Tobyhanna Township,https://tobyhannatownshippa.gov/ +Pennsylvania,Berks County,Topton,http://toptonborough.com +Pennsylvania,Montgomery County,Towamencin Township,http://www.towamencin.org +Pennsylvania,Carbon County,Towamensing Township,https://www.towamensingtownship.com/ +Pennsylvania,Bradford County,Towanda,http://towandaborough.org +Pennsylvania,Bradford County,Towanda Township,http://towandatownship.org +Pennsylvania,Westmoreland County,Trafford,http://www.traffordborough.com/ +Pennsylvania,Delaware County,Trainer,http://www.trainerboro.com +Pennsylvania,Montgomery County,Trappe,http://www.trappeborough.com +Pennsylvania,Chester County,Tredyffrin Township,http://www.tredyffrin.org/ +Pennsylvania,Bradford County,Troy,http://troyborough.com +Pennsylvania,Bucks County,Trumbauersville,http://www.trumbauersvilleboro.org +Pennsylvania,Bucks County,Tullytown,http://tullytownborough.com +Pennsylvania,Wyoming County,Tunkhannock,https://tunkboro.com/ +Pennsylvania,Monroe County,Tunkhannock Township,https://www.longpondpa.com/ +Pennsylvania,Allegheny County,Turtle Creek,https://www.turtlecreekborough.us +Pennsylvania,Juniata County,Tuscarora Township,http://www.tuscaroratownship.org +Pennsylvania,Blair County,Tyrone,http://www.tyroneboropa.com/ +Pennsylvania,Erie County,Union City,http://unioncitypa.us +Pennsylvania,Washington County,Union Township,http://uniontwp.psatstwp.org/ +Pennsylvania,Lawrence County,Union Township,http://uniontownshiplawrencecounty.com +Pennsylvania,Berks County,Union Township,https://www.unionberks.org/ +Pennsylvania,Mifflin County,Union Township,http://uniontwpmc.com/ +Pennsylvania,Lebanon County,Union Township,http://uniontownshippa.com +Pennsylvania,Centre County,Unionville,http://unionvilleborough.com +Pennsylvania,Westmoreland County,Unity Township,http://www.unitytownship.org +Pennsylvania,Delaware County,Upland,http://uplandboro.org +Pennsylvania,Cumberland County,Upper Allen Township,http://www.uatwp.org/ +Pennsylvania,Westmoreland County,Upper Burrell Township,http://www.upperburrelltwp.com +Pennsylvania,Delaware County,Upper Chichester Township,http://www.upperchichester.org +Pennsylvania,Delaware County,Upper Darby Township,http://www.upperdarby.org +Pennsylvania,Montgomery County,Upper Dublin Township,http://upperdublin.net +Pennsylvania,Lycoming County,Upper Fairfield Township,http://upperfairfieldtwp.org +Pennsylvania,Montgomery County,Upper Frederick Township,http://www.upperfrederick.com +Pennsylvania,Montgomery County,Upper Gwynedd Township,http://www.uppergwynedd.org +Pennsylvania,Montgomery County,Upper Hanover Township,http://www.upperhanovertownship.org +Pennsylvania,Lancaster County,Upper Leacock Township,http://www.ultwp.com +Pennsylvania,Lehigh County,Upper Macungie Township,http://www.uppermac.org +Pennsylvania,Bucks County,Upper Makefield Township,http://www.uppermakefield.org +Pennsylvania,Allegheny County,Upper Merion Township,http://www.umtownship.org +Pennsylvania,Cumberland County,Upper Mifflin Township,http://www.uppermifflintownship.com +Pennsylvania,Lehigh County,Upper Milford Township,http://www.uppermilford.net +Pennsylvania,Montgomery County,Upper Moreland Township,http://www.uppermoreland.org +Pennsylvania,Northampton County,Upper Mount Bethel Township,https://umbt.org/ +Pennsylvania,Northampton County,Upper Nazareth Township,http://www.uppernazarethtownship.org +Pennsylvania,Chester County,Upper Oxford Township,http://www.upperoxford.us +Pennsylvania,Dauphin County,Upper Paxton Township,http://www.upperpaxtontwp.org +Pennsylvania,Montgomery County,Upper Pottsgrove Township,http://www.uptownship.org/ +Pennsylvania,Montgomery County,Upper Providence Township,http://www.uprov-montco.org +Pennsylvania,Delaware County,Upper Providence Township,http://www.upperprovidence.org +Pennsylvania,Montgomery County,Upper Salford Township,http://www.uppersalfordtownship.org +Pennsylvania,Lehigh County,Upper Saucon Township,http://www.uppersaucon.org +Pennsylvania,Bucks County,Upper Southampton Township,http://www.southamptonpa.com +Pennsylvania,Allegheny County,Upper St. Clair Township,http://www.twpusc.org +Pennsylvania,Fayette County,Upper Tyrone Township,http://uppertyronetwp.org +Pennsylvania,Chester County,Upper Uwchlan Township,http://www.upperuwchlan-pa.gov +Pennsylvania,Cambria County,Upper Yoder Township,http://upperyodertownship.org +Pennsylvania,Chester County,Uwchlan Township,http://www.uwchlan.com +Pennsylvania,Chester County,Valley Township,http://www.valleytownship.org +Pennsylvania,Westmoreland County,Vandergrift,http://www.vandergriftborough.org/ +Pennsylvania,Lackawanna County,Vandling,http://vandlingpa.us +Pennsylvania,Beaver County,Vanport Township,http://www.vanporttwp.com +Pennsylvania,Crawford County,Vernon Township,http://www.vernontwp-pa.gov +Pennsylvania,Allegheny County,Verona,http://veronaborough.com +Pennsylvania,Allegheny County,Versailles,http://versaillesboro.com +Pennsylvania,Centre County,Walker Township,http://walkertownship.com +Pennsylvania,Juniata County,Walker Township,http://walkertownship.org +Pennsylvania,Schuylkill County,Walker Township,http://www.walkertwp.com/Pages/default.aspx +Pennsylvania,Allegheny County,Wall,http://www.wallborough.com +Pennsylvania,Chester County,Wallace Township,http://www.wallacetwp.org +Pennsylvania,Northampton County,Walnutport,http://www.walnutportpa.org/ +Pennsylvania,Lawrence County,Wampum,http://wampumboro.com +Pennsylvania,Bucks County,Warminster Township,http://www.warminstertownship.org +Pennsylvania,Warren County,Warren,http://www.cityofwarrenpa.org +Pennsylvania,Bradford County,Warren Township,http://warrentwp.org +Pennsylvania,Bucks County,Warrington Township,http://warringtontownship.org +Pennsylvania,Luzerne County,Warrior Run,http://www.wrboro.org +Pennsylvania,Lancaster County,Warwick Township,http://www.warwicktownship.org +Pennsylvania,Bucks County,Warwick Township,https://warwick-bucks.com/ +Pennsylvania,Washington County,Washington,http://www.washingtonpa.us/ +Pennsylvania,Franklin County,Washington Township,http://www.washtwp-franklin.org +Pennsylvania,Westmoreland County,Washington Township,http://www.washingtontownship.com +Pennsylvania,Lehigh County,Washington Township,http://www.washingtonlehigh.com +Pennsylvania,Northampton County,Washington Township,https://www.washington-township.com/ +Pennsylvania,Erie County,Washington Township,http://www.washington-township.info +Pennsylvania,Berks County,Washington Township,http://www.washtwpberks.org/index.asp +Pennsylvania,Fayette County,Washington Township,http://washingtontownshipbellevernon.org/ +Pennsylvania,Dauphin County,Washington Township,http://wtwp.org +Pennsylvania,Jefferson County,Washington Township,http://www.washingtonjefferson.org +Pennsylvania,Lycoming County,Washington Township,http://washingtontwplyc.com +Pennsylvania,Erie County,Waterford,http://waterfordboro.net +Pennsylvania,Erie County,Waterford Township,http://www.waterfordtownship.net +Pennsylvania,Lycoming County,Watson Township,http://watsontownship-pa.com +Pennsylvania,Northumberland County,Watsontown,http://www.watsontownpa.info/ +Pennsylvania,Perry County,Watts Township,http://www.wattstownship.org +Pennsylvania,Lackawanna County,Waverly Township,http://www.waverlytwp.com +Pennsylvania,Wayne County,Waymart,http://www.waymart.org/ +Pennsylvania,Lawrence County,Wayne Township,http://waynetownshippa.net +Pennsylvania,Mifflin County,Wayne Township,http://www.co.mifflin.pa.us/mif-wayne/site/default.asp +Pennsylvania,Clinton County,Wayne Township,http://wayne-township.com +Pennsylvania,Erie County,Wayne Township,http://www.waynetownshippa.com +Pennsylvania,Crawford County,Wayne Township,http://www.waynetwpcc.org +Pennsylvania,Dauphin County,Wayne Township,https://www.waynetwppa.org/ +Pennsylvania,Franklin County,Waynesboro,http://www.waynesboropa.org/ +Pennsylvania,Greene County,Waynesburg,http://waynesburgboro.com +Pennsylvania,Carbon County,Weatherly,http://www.weatherlypa.gov +Pennsylvania,Lehigh County,Weisenberg Township,http://www.weisenbergtownship.org +Pennsylvania,Tioga County,Wellsboro,http://www.wellsboroborough.com/ +Pennsylvania,Berks County,Wernersville,http://www.wernersvilleborough.org +Pennsylvania,Erie County,Wesleyville,http://wesleyvilleborough.com +Pennsylvania,Chester County,West Bradford Township,http://www.westbradford.org +Pennsylvania,Chester County,West Brandywine Township,http://www.wbrandywine.org +Pennsylvania,Chester County,West Caln Township,http://westcaln.org/ +Pennsylvania,Cumberland County,West Chester,http://west-chester.com +Pennsylvania,Lancaster County,West Cocalico Township,http://westcocalicotownship.com +Pennsylvania,Montgomery County,West Conshohocken,https://westconsho.com/ +Pennsylvania,Lebanon County,West Cornwall Township,http://westcornwalltwp.com +Pennsylvania,Lancaster County,West Donegal Township,http://wdtwp.com +Pennsylvania,Lancaster County,West Earl Township,http://www.westearltwp.org +Pennsylvania,Northampton County,West Easton,http://www.westeastonborough.com +Pennsylvania,Chester County,West Goshen Township,http://www.wgoshen.org +Pennsylvania,Chester County,West Grove,http://www.westgroveborough.org +Pennsylvania,Dauphin County,West Hanover Township,http://www.westhanover.com +Pennsylvania,Luzerne County,West Hazleton,http://www.westhazletonboro.org +Pennsylvania,Lancaster County,West Hempfield Township,http://www.westhempfield.org +Pennsylvania,Allegheny County,West Homestead,http://westhomesteadpa.com +Pennsylvania,Armstrong County,West Kittanning,http://www.westkittanningpa.com +Pennsylvania,Lancaster County,West Lampeter Township,http://www.westlampeter.com +Pennsylvania,Lebanon County,West Lebanon Township,http://westlebtwp.org +Pennsylvania,Westmoreland County,West Leechburg,https://www.westleechburg.us/ +Pennsylvania,York County,West Manchester Township,http://www.westmanchestertownship.com/ +Pennsylvania,York County,West Manheim Township,http://www.westmanheimtwp.com/ +Pennsylvania,Beaver County,West Mayfield,http://www.westmayfieldborough.us +Pennsylvania,Crawford County,West Mead Township,https://westmead.org +Pennsylvania,Allegheny County,West Mifflin,http://www.westmifflinborough.com +Pennsylvania,Westmoreland County,West Newton,https://mywestnewton.com/ +Pennsylvania,Montgomery County,West Norriton Township,http://www.westnorritontwp.org +Pennsylvania,Cumberland County,West Pennsboro Township,http://www.westpennsborotwp.org +Pennsylvania,Luzerne County,West Pittston,http://westpittstonborough.com +Pennsylvania,Montgomery County,West Pottsgrove Township,https://westpottsgrove.org/ +Pennsylvania,Bedford County,West Providence Township,http://www.westprovidencetownship.org +Pennsylvania,Berks County,West Reading,http://www.westreadingborough.com +Pennsylvania,Bucks County,West Rockhill Township,http://www.westrockhilltownship.org +Pennsylvania,Allegheny County,West View,http://www.westviewborough.org +Pennsylvania,Chester County,West Whiteland Township,http://www.westwhiteland.org +Pennsylvania,Luzerne County,West Wyoming,http://www.westwyoming.org +Pennsylvania,York County,West York,https://westyorkpa.gov +Pennsylvania,Cambria County,Westmont,http://westmontborough.com/ +Pennsylvania,Chester County,Westtown Township,http://www.westtownpa.org +Pennsylvania,Fayette County,Wharton Township,http://whartontownship.com +Pennsylvania,Luzerne County,White Haven,http://www.whitehavenborough.org +Pennsylvania,Allegheny County,White Oak,http://www.woboro.com +Pennsylvania,Cambria County,White Township,http://twp.white.pa.us +Pennsylvania,Allegheny County,Whitehall,http://www.whitehallboro.org +Pennsylvania,Lehigh County,Whitehall Township,http://www.whitehalltownship.org +Pennsylvania,Montgomery County,Whitemarsh Township,http://www.whitemarshtwp.org +Pennsylvania,Montgomery County,Whitpain Township,http://www.whitpaintownship.org +Pennsylvania,Dauphin County,Wiconisco Township,http://wiconiscotownship.com +Pennsylvania,Luzerne County,Wilkes-Barre,http://www.wilkes-barre.city +Pennsylvania,Luzerne County,Wilkes-Barre Township,http://twp.wilkesbarre.pa.us +Pennsylvania,Allegheny County,Wilkinsburg,http://www.wilkinsburgpa.gov +Pennsylvania,Northampton County,Williams Township,http://www.williamstwp.org +Pennsylvania,Dauphin County,Williams Township,http://www.wmstwp.org +Pennsylvania,Blair County,Williamsburg,https://sites.google.com/site/williamsburgpennsylvania/home +Pennsylvania,Lycoming County,Williamsport,http://cityofwilliamsport.org +Pennsylvania,Chester County,Willistown Township,http://www.willistown.pa.us +Pennsylvania,Allegheny County,Wilmerding,http://www.wilmerdingboro.com +Pennsylvania,Northampton County,Wilson,http://www.wilsonborough.org/ +Pennsylvania,Northampton County,Wind Gap,https://windgap-pa.gov/ +Pennsylvania,Somerset County,Windber,http://windber.com/ +Pennsylvania,York County,Windsor Township,http://www.windsortwp.com/ +Pennsylvania,Butler County,Winfield Township,http://www.winfieldtownship.net +Pennsylvania,Mercer County,Wolf Creek Township,http://wolfcreektwp.com +Pennsylvania,Lycoming County,Wolf Township,http://wolftownship.org +Pennsylvania,Berks County,Womelsdorf,http://www.womelsdorfboro.org +Pennsylvania,Crawford County,Woodcock Township,http://www.woodcocktownship.com +Pennsylvania,Lycoming County,Woodward Township,http://woodward-township.hub.biz +Pennsylvania,Montgomery County,Worcester Township,http://www.worcestertwp.com +Pennsylvania,Cumberland County,Wormleysburg,http://www.wormleysburgpa.org +Pennsylvania,Butler County,Worth Township,http://www.worthtwp.org +Pennsylvania,Bucks County,Wrightstown Township,http://wrightstownpa.org +Pennsylvania,York County,Wrightsville,http://www.wrightsvilleborough.com +Pennsylvania,Bradford County,Wyalusing,http://wyalusingborough.com +Pennsylvania,Luzerne County,Wyoming,http://wyomingpa.org +Pennsylvania,Berks County,Wyomissing,http://www.wyomissingboro.org/ +Pennsylvania,Bucks County,Yardley,http://www.yardleyboro.com/ +Pennsylvania,Delaware County,Yeadon,http://yeadonborough.com +Pennsylvania,York County,Yoe,http://www.YoeBorough.org +Pennsylvania,York County,York,http://www.yorkcity.org/ +Pennsylvania,Adams County,York Springs,http://www.adamscounty.us/Munic/Pages/York-Springs-Borough.aspx +Pennsylvania,York County,York Township,http://www.yorktownship.com/ +Pennsylvania,Jefferson County,Young Township,http://www.youngtwpjeff.com +Pennsylvania,Warren County,Youngsville,http://www.youngsvillepa.org/ +Pennsylvania,Westmoreland County,Youngwood,http://www.youngwood.org +Pennsylvania,Butler County,Zelienople,http://zelieboro.org +Puerto Rico,Campbell County,Añasco,http://www.anascopr.net +Puerto Rico,Campbell County,Adjuntas,http://adjuntaspr.com +Puerto Rico,Campbell County,Aguada,http://aguada.gov.pr +Puerto Rico,Campbell County,Aguas Buenas,http://legislaturaaguasbuenas.com/ +Puerto Rico,Campbell County,Aibonito,http://www.aibonitopr.net/ +Puerto Rico,Campbell County,Arroyo,https://www.municipiodearroyo.com/ +Puerto Rico,Campbell County,Barranquitas,http://barranquitaspr.net/pueblo/ +Puerto Rico,Campbell County,Bayamón,http://www.municipiodebayamon.com +Puerto Rico,Campbell County,Cabo Rojo,http://www.caborojopr.net/ +Puerto Rico,Campbell County,Caguas,http://www.Caguas.gov.pr +Puerto Rico,Campbell County,Carolina,https://www.municipiocarolina.com/ +Puerto Rico,Campbell County,Cayey,http://www.agencias.pr.gov/municipio/cayey +Puerto Rico,Campbell County,Coamo,http://www.coamo.puertorico.pr +Puerto Rico,Campbell County,Comerío,http://www.comerio.gobierno.pr +Puerto Rico,Campbell County,Dorado,https://www.doradoparaiso.com +Puerto Rico,Campbell County,Fajardo,http://fajardopr.org +Puerto Rico,Campbell County,Guayama,http://www.viveelencanto.com +Puerto Rico,Campbell County,Guaynabo,http://www.guaynabocity.gov.pr +Puerto Rico,Campbell County,Hormigueros,http://www.municipiohormiguerospr.com/ +Puerto Rico,Campbell County,Isabela,https://venaisabela.com/ +Puerto Rico,Campbell County,Maunabo,http://maunabomunicipio.com/ +Puerto Rico,Campbell County,Mayagüez,http://www.mayaguezpr.gov +Puerto Rico,Campbell County,Naranjito,https://municipiodenaranjito.com/ +Puerto Rico,Campbell County,Orocovis,https://www.orocovispr.org/ +Puerto Rico,Campbell County,Peñuelas,https://www.municipiodepenuelas.com +Puerto Rico,Campbell County,Ponce,http://visitponce.com/ +Puerto Rico,Campbell County,Quebradillas,http://www.quebradillas.pr.gov/ +Puerto Rico,Campbell County,Rincón,http://www.rincon.org/ +Puerto Rico,Campbell County,San Juan,http://sanjuanciudadpatria.com/en +Puerto Rico,Campbell County,San Sebastián,http://ssdelpepino.com/ +Puerto Rico,Campbell County,Toa Baja,http://www.toabaja.com +Puerto Rico,Campbell County,Trujillo Alto,http://www.trujilloalto.pr/ +Puerto Rico,Campbell County,Vega Baja,http://www.vegabaja.gov.pr/ +Puerto Rico,Campbell County,Yauco,http://www.yaucoatuservicio.com +Rhode Island,Bristol County,Barrington,http://www.barrington.ri.gov/ +Rhode Island,Bristol County,Bristol,http://www.bristolri.us +Rhode Island,Providence County,Central Falls,http://www.centralfallsri.us/ +Rhode Island,Kent County,Coventry,http://coventryri.org +Rhode Island,Providence County,Cranston,https://www.cranstonri.gov +Rhode Island,Providence County,Cumberland,http://www.cumberlandri.org +Rhode Island,Kent County,East Greenwich,http://www.eastgreenwichri.com/ +Rhode Island,Providence County,East Providence,http://www.eastprovidenceri.net/ +Rhode Island,Providence County,Foster,https://www.townoffoster.com/ +Rhode Island,Providence County,Glocester,http://www.glocesterri.org/ +Rhode Island,Washington County,Hopkinton,http://www.hopkintonri.org +Rhode Island,Newport County,Jamestown,http://www.jamestownri.gov/ +Rhode Island,Providence County,Johnston,https://www.townofjohnstonri.com/ +Rhode Island,Newport County,Little Compton,http://www.littlecomptonri.org/ +Rhode Island,Newport County,Middletown,https://middletownri.com/ +Rhode Island,Washington County,Narragansett,http://www.narragansettri.gov/ +Rhode Island,Washington County,New Shoreham,http://www.new-shoreham.com/ +Rhode Island,Newport County,Newport,http://www.cityofnewport.com +Rhode Island,Washington County,North Kingstown,http://www.northkingstown.org/ +Rhode Island,Providence County,North Smithfield,http://www.nsmithfieldri.org/ +Rhode Island,Providence County,Pawtucket,http://www.pawtucketri.com +Rhode Island,Newport County,Portsmouth,http://www.portsmouthri.com/ +Rhode Island,Providence County,Providence,https://www.providenceri.gov/ +Rhode Island,Washington County,Richmond,http://www.richmondri.com +Rhode Island,Providence County,Scituate,http://www.scituateri.org/ +Rhode Island,Providence County,Smithfield,http://smithfieldri.com/ +Rhode Island,Washington County,South Kingstown,http://www.southkingstownri.com +Rhode Island,Newport County,Tiverton,http://www.tiverton.ri.gov/ +Rhode Island,Newport County,Warren,http://www.townofwarren-ri.gov/ +Rhode Island,Kent County,Warwick,http://www.warwickri.gov/ +Rhode Island,Providence County,Woonsocket,https://www.woonsocketri.org/ +South Carolina,Abbeville County,Abbeville,http://www.abbevillecitysc.com +South Carolina,Aiken County,Aiken,https://www.cityofaikensc.gov +South Carolina,Allendale County,Allendale,https://townofallendale.sc.gov/ +South Carolina,Anderson County,Anderson,http://www.cityofandersonsc.com +South Carolina,Georgetown County,Andrews,http://townofandrews.org +South Carolina,Richland County,Arcadia Lakes,http://arcadialakes.net +South Carolina,Horry County,Atlantic Beach,http://www.townofatlanticbeachsc.com +South Carolina,Charleston County,Awendaw,http://www.awendawsc.org +South Carolina,Horry County,Aynor,http://www.townofaynor.net +South Carolina,Bamberg County,Bamberg,http://bambergsc.com +South Carolina,Barnwell County,Barnwell,http://www.cityofbarnwell.com +South Carolina,Lexington County,Batesburg-Leesville,http://www.batesburg-leesville.org +South Carolina,Beaufort County,Beaufort,http://www.cityofbeaufort.org +South Carolina,Anderson County,Belton,http://www.cityofbeltonsc.com +South Carolina,Marlboro County,Bennettsville,http://www.bennettsvillesc.com/ +South Carolina,Lee County,Bishopville,http://cityofbishopvillesc.com/ +South Carolina,Cherokee County,Blacksburg,http://www.townofblacksburgsc.com +South Carolina,Barnwell County,Blackville,http://www.townofblackville.com +South Carolina,Beaufort County,Bluffton,https://www.townofbluffton.sc.gov/ +South Carolina,Richland County,Blythewood,http://www.townofblythewoodsc.gov +South Carolina,Orangeburg County,Bowman,https://townofbowman.sc.gov/ +South Carolina,Orangeburg County,Branchville,http://www.branchville.sc.gov +South Carolina,Horry County,Briarcliffe Acres,http://www.townofbriarcliffe.us +South Carolina,Hampton County,Brunson,http://www.brunson.sc.gov +South Carolina,Hampton County,Burnettown,http://www.burnettown.com +South Carolina,Abbeville County,Calhoun Falls,http://www.townofcalhounfallssc.com +South Carolina,Kershaw County,Camden,http://cityofcamden.org +South Carolina,Spartanburg County,Campobello,https://www.townofcampobellosc.com/ +South Carolina,Union County,Carlisle,https://www.townofcarlisle.com/ +South Carolina,Lexington County,Cayce,http://cityofcayce-sc.gov +South Carolina,Pickens County,Central,http://www.cityofcentral.org/ +South Carolina,Lexington County,Chapin,http://www.chapinsc.com +South Carolina,Charleston County,Charleston,http://www.charleston-sc.gov +South Carolina,Chesterfield County,Cheraw,http://www.cheraw.com +South Carolina,Spartanburg County,Chesnee,http://www.cityofchesnee.org +South Carolina,Chester County,Chester,http://www.chestersc.org +South Carolina,Chester County,Chesterfield,http://chesterfield-sc.com +South Carolina,Pickens County,Clemson,http://www.clemsoncity.org +South Carolina,Laurens County,Clinton,http://www.cityofclintonsc.com/ +South Carolina,Marlboro County,Clio,http://www.townofclio.com +South Carolina,York County,Clover,http://www.cloversc.org +South Carolina,Richland County,Columbia,http://www.columbiasc.net +South Carolina,Horry County,Conway,http://www.cityofconway.com +South Carolina,Orangeburg County,Cope,https://www.orangeburgcounty.org/DocumentCenter/View/1603/Cope-Municipal-Elected-Officials +South Carolina,Orangeburg County,Cordova,http://www.orangeburgcounty.org/depts/voterReg/voterRegDownloads/municipalities/VR-municipalElectedOfficials-CORDOVA.pdf +South Carolina,Colleton County,Cottageville,http://www.cottageville.org +South Carolina,Florence County,Coward,https://townofcoward.com/ +South Carolina,Spartanburg County,Cowpens,http://www.townofcowpens.com/ +South Carolina,Darlington County,Darlington,http://cityofdarlington.com +South Carolina,Dillon County,Dillon,http://www.cityofdillonsc.us +South Carolina,Abbeville County,Donalds,https://www.facebook.com/donalds.sc/ +South Carolina,Abbeville County,Due West,http://duewestsc.com/ +South Carolina,Spartanburg County,Duncan,https://townofduncansc.com/ +South Carolina,Pickens County,Easley,http://www.cityofeasley.com +South Carolina,Richland County,Eastover,http://www.eastoversc.com +South Carolina,Edgefield County,Edgefield,http://www.exploreedgefield.com +South Carolina,Colleton County,Edisto Beach,http://www.townofedistobeach.com +South Carolina,Bamberg County,Ehrhardt,http://ehrhardtsc.com +South Carolina,Kershaw County,Elgin,http://townofelginsc.com +South Carolina,Orangeburg County,Elloree,http://www.elloreesc.com +South Carolina,Hampton County,Estill,http://www.townofestill.sc.gov +South Carolina,Orangeburg County,Eutawville,http://www.eutawvillesc.org +South Carolina,Florence County,Florence,http://www.cityofflorence.com +South Carolina,Charleston County,Folly Beach,http://www.cityoffollybeach.com +South Carolina,Richland County,Forest Acres,http://forestacres.net +South Carolina,York County,Fort Mill,https://fortmillsc.gov/ +South Carolina,Greenville County,Fountain Inn,http://www.fountaininn.org +South Carolina,Cherokee County,Gaffney,http://www.getintogaffney.com/ +South Carolina,Lexington County,Gaston,http://www.gastonsc.org/ +South Carolina,Georgetown County,Georgetown,http://www.cityofgeorgetownsc.com +South Carolina,Hampton County,Gifford,https://www.giffordsc.org/ +South Carolina,Lexington County,Gilbert,http://www.townofgilbertsc.com +South Carolina,Berkeley County,Goose Creek,http://www.cityofgoosecreek.com +South Carolina,Laurens County,Gray Court,https://townofgraycourt.sc.gov/ +South Carolina,Chester County,Great Falls,http://www.greatfallssc.org/ +South Carolina,Williamsburg County,Greeleyville,http://townofgreeleyville.com +South Carolina,Greenville County,Greenville,http://www.greenvillesc.gov +South Carolina,Greenwood County,Greenwood,http://www.cityofgreenwoodsc.com +South Carolina,Greenville County,Greer,http://www.cityofgreer.org +South Carolina,Hampton County,Hampton,http://www.hamptonsc.net +South Carolina,Berkeley County,Hanahan,http://www.cityofhanahan.com +South Carolina,Beaufort County,Hardeeville,http://www.cityofhardeeville.com +South Carolina,Dorchester County,Harleyville,http://www.harleyvillesc.com +South Carolina,Darlington County,Hartsville,http://www.hartsvillesc.gov +South Carolina,Lancaster County,Heath Springs,https://townofheathsprings.com/ +South Carolina,Williamsburg County,Hemingway,https://www.townofhemingway.org +South Carolina,York County,Hickory Grove,http://townofhickorygrove.com/ +South Carolina,Beaufort County,Hilton Head Island,http://www.hiltonheadislandsc.gov +South Carolina,Greenwood County,Hodges,https://www.facebook.com/townofhodges/ +South Carolina,Orangeburg County,Holly Hill,https://hollyhill.sc.gov/ +South Carolina,Charleston County,Hollywood,http://www.townofhollywood.org +South Carolina,Abbeville County,Honea Path,https://honeapathsc.com/ +South Carolina,Spartanburg County,Inman,http://www.cityofinman.org/ +South Carolina,Lexington County,Irmo,https://www.townofirmosc.com/ +South Carolina,Charleston County,Isle of Palms,http://www.iop.net +South Carolina,Anderson County,Iva,https://townofiva.org/ +South Carolina,Anderson County,Jackson,http://www.jackson-sc.gov +South Carolina,Charleston County,James Island,http://jamesislandsc.us/ +South Carolina,Chesterfield County,Jefferson,http://www.seejeffersonsc.com +South Carolina,Florence County,Johnsonville,http://www.cityofjohnsonville.com +South Carolina,Edgefield County,Johnston,https://www.facebook.com/townofjohnston/ +South Carolina,Union County,Jonesville,https://townofjonesvillesc.org/ +South Carolina,Lancaster County,Kershaw,http://www.townofkershawsc.gov +South Carolina,Charleston County,Kiawah Island,http://www.kiawahisland.org +South Carolina,Williamsburg County,Kingstree,http://www.kingstree.org/ +South Carolina,Florence County,Lake City,http://www.lakecitysc.gov +South Carolina,Darlington County,Lamar,https://www.lamarsc.org/ +South Carolina,Lancaster County,Lancaster,http://www.lancastercitysc.com +South Carolina,Spartanburg County,Landrum,http://cityoflandrumsc.com +South Carolina,Williamsburg County,Lane,https://townoflane.com/ +South Carolina,Dillon County,Latta,http://www.townoflatta.sc.gov +South Carolina,Laurens County,Laurens,http://www.cityoflaurenssc.com +South Carolina,Lexington County,Lexington,http://www.lexsc.com +South Carolina,Pickens County,Liberty,http://www.libertysc.com/ +South Carolina,Newberry County,Little Mountain,http://www.littlemountainsc.com/ +South Carolina,Horry County,Loris,http://www.cityoflorissc.com +South Carolina,Abbeville County,Lowndesville,https://www.facebook.com/LOWNDESVILLE-SOUTH-CAROLINA-181551731876991/ +South Carolina,Chester County,Lowrys,https://www.townoflowrys.org/ +South Carolina,Spartanburg County,Lyman,http://www.lymansc.gov/ +South Carolina,Clarendon County,Manning,http://www.cityofmanning.org +South Carolina,Marion County,Marion,http://www.marionsc.gov +South Carolina,Greenville County,Mauldin,http://www.cityofmauldin.org +South Carolina,Sumter County,Mayesville,http://mayesvillesc.com/ +South Carolina,Chesterfield County,McBee,http://TownOfMcBeeSC.com +South Carolina,Charleston County,McClellanville,https://www.mcclellanvillesc.org/ +South Carolina,Marlboro County,McColl,http://www.marlborocounty.sc.gov/History/McColl/Pages/default.aspx +South Carolina,York County,McConnells,https://www.townofmcconnells.com/ +South Carolina,McCormick County,McCormick,http://www.townofmccormicksc.org/ +South Carolina,Charleston County,Meggett,http://www.townofmeggettsc.org/ +South Carolina,Berkeley County,Moncks Corner,http://www.monckscornersc.gov +South Carolina,Chesterfield County,Mount Croghan,http://www.mtcroghan.com +South Carolina,Charleston County,Mount Pleasant,http://www.tompsc.com +South Carolina,Marion County,Mullins,http://www.mullinssc.us/ +South Carolina,Horry County,Myrtle Beach,http://www.cityofmyrtlebeach.com +South Carolina,Newberry County,New Ellenton,http://www.newellentonsc.com +South Carolina,Newberry County,Newberry,http://www.cityofnewberry.com/ +South Carolina,Greenwood County,Ninety Six,http://www.ninetysixsc.gov +South Carolina,Pickens County,Norris,http://www.townofnorris.org/ +South Carolina,Orangeburg County,North,https://townofnorth.sc.gov/ +South Carolina,Aiken County,North Augusta,http://www.northaugusta.net +South Carolina,Berkeley County,North Charleston,http://www.northcharleston.org +South Carolina,Horry County,North Myrtle Beach,http://www.nmb.us +South Carolina,Orangeburg County,Norway,http://www.orangeburgcounty.org/depts/voterReg/elections.asp#officials +South Carolina,Florence County,Olanta,http://www.olantasc.com +South Carolina,Orangeburg County,Orangeburg,http://www.orangeburg.sc.us +South Carolina,Spartanburg County,Pacolet,http://www.townofpacolet.com/ +South Carolina,Chesterfield County,Pageland,http://townofpageland.com +South Carolina,Florence County,Pamplico,http://townofpamplico.com +South Carolina,McCormick County,Parksville,https://mccormickscchamber.org/what-to-do/historic-railtowns/parksville/ +South Carolina,Chesterfield County,Patrick,http://www.townofpatrick.com +South Carolina,Georgetown County,Pawleys Island,http://www.townofpawleysisland.com/ +South Carolina,Anderson County,Pelzer,http://www.townofpelzer.us +South Carolina,Anderson County,Pendleton,http://www.townofpendleton.org +South Carolina,Pickens County,Pickens,http://cityofpickens.com/ +South Carolina,Lexington County,Pine Ridge,http://www.townofpineridgesc.com +South Carolina,McCormick County,Plum Branch,https://www.facebook.com/pages/category/Community/Town-of-Plum-Branch-SC-117224126355449/ +South Carolina,Newberry County,Pomaria,https://www.townofpomariasc.com/ +South Carolina,Beaufort County,Port Royal,http://www.portroyal.org/ +South Carolina,Newberry County,Prosperity,http://www.prosperitysc.com/ +South Carolina,Florence County,Quinby,https://www.townofquinby.com/ +South Carolina,Charleston County,Ravenel,http://www.townofravenel.com +South Carolina,Spartanburg County,Reidville,https://www.townofreidvillesc.com/ +South Carolina,Saluda County,Ridge Spring,http://www.ridgespringsc.com/ +South Carolina,Jasper County,Ridgeland,http://www.ridgelandsc.gov +South Carolina,Dorchester County,Ridgeville,https://ridgevillegov.com/ +South Carolina,Fairfield County,Ridgeway,http://www.ridgewaysc.org +South Carolina,York County,Rock Hill,http://www.cityofrockhill.com +South Carolina,Charleston County,Rockville,http://townofrockville.com +South Carolina,Oconee County,Salem,https://www.facebook.com/Salem-Town-Hall-1702501816656220/ +South Carolina,Oconee County,Salley,https://www.facebook.com/townofsalley/ +South Carolina,Saluda County,Saluda,http://www.townofsaluda.com/home-page +South Carolina,Orangeburg County,Santee,http://townofsantee-sc.org +South Carolina,Charleston County,Seabrook Island,http://www.townofseabrookisland.org +South Carolina,Oconee County,Seneca,http://www.seneca.sc.us/ +South Carolina,Newberry County,Silverstreet,https://sites.google.com/site/townofsilverstreet/ +South Carolina,Greenville County,Simpsonville,http://www.simpsonville.com +South Carolina,Pickens County,Six Mile,http://www.sixmilesc.org/ +South Carolina,Lexington County,South Congaree,http://www.townofsouthcongaree.org/ +South Carolina,Spartanburg County,Spartanburg,http://www.cityofspartanburg.org +South Carolina,Lexington County,Springdale,http://www.springdalesc.com +South Carolina,Orangeburg County,Springfield,http://www.springfieldsc.com/ +South Carolina,Dorchester County,St. George,https://saintgeorgesc.org/ +South Carolina,Calhoun County,St. Matthews,https://stmatthews.sc.gov/ +South Carolina,Anderson County,Starr,https://www.facebook.com/pages/category/Government-Organization/Town-of-Starr-576045745893248/ +South Carolina,Charleston County,Sullivan's Island,http://sullivansisland-sc.com +South Carolina,Clarendon County,Summerton,http://www.townofsummerton.com +South Carolina,Dorchester County,Summerville,https://www.summervillesc.gov/ +South Carolina,Sumter County,Sumter,http://www.sumtersc.gov +South Carolina,Horry County,Surfside Beach,http://www.surfsidebeach.org +South Carolina,Lexington County,Swansea,http://www.swanseatown.net/ +South Carolina,York County,Tega Cay,http://www.tegacaysc.org/ +South Carolina,Florence County,Timmonsville,https://www.timmonsvillesc.org/ +South Carolina,Greenville County,Travelers Rest,http://travelersrestsc.com +South Carolina,Edgefield County,Trenton,http://www.thetownoftrenton.com +South Carolina,Clarendon County,Turbeville,http://www.townofturbeville.com +South Carolina,Union County,Union,http://www.cityofunion.net/default.asp?sec_id=140005136 +South Carolina,Lancaster County,Van Wyck,http://townofvanwyck.net +South Carolina,Hampton County,Varnville,http://www.varnvillesc.org +South Carolina,Hampton County,Wagener,http://www.wagenersc.com +South Carolina,Oconee County,Walhalla,http://www.cityofwalhalla.com/ +South Carolina,Colleton County,Walterboro,http://www.walterborosc.org +South Carolina,Greenwood County,Ware Shoals,https://www.facebook.com/townofwareshoals/ +South Carolina,Spartanburg County,Wellford,http://www.cityofwellford.com/ +South Carolina,Lexington County,West Columbia,http://www.westcolumbiasc.gov +South Carolina,Anderson County,West Pelzer,http://westpelzer.com +South Carolina,Oconee County,West Union,https://townofwestunion.com/ +South Carolina,Oconee County,Westminster,http://www.westminstersc.org/ +South Carolina,Newberry County,Whitmire,https://townofwhitmire.godaddysites.com/ +South Carolina,Anderson County,Williamston,http://www.williamstonsc.us +South Carolina,Barnwell County,Williston,http://www.williston-sc.com +South Carolina,Barnwell County,Windsor,https://www.facebook.com/windsor.southcarolina/ +South Carolina,Fairfield County,Winnsboro,http://www.townofwinnsboro.com +South Carolina,Spartanburg County,Woodruff,http://www.cityofwoodruff.com +South Carolina,Hampton County,Yemassee,http://www.townofyemassee.org/ +South Carolina,York County,York,https://yorksc.gov/ +South Dakota,Brown County,Aberdeen,http://www.aberdeen.sd.us/ +South Dakota,Union County,Alcester,http://www.alcestersd.org +South Dakota,Hanson County,Alexandria,http://www.alexandriasd.com +South Dakota,Jerauld County,Alpena,http://www.alpenasd.com +South Dakota,Kingsbury County,Arlington,http://www.arlingtonsd.com +South Dakota,Douglas County,Armour,http://www.armoursd.com +South Dakota,Sanborn County,Artesian,http://www.artesiansd.com/ +South Dakota,Brookings County,Aurora,https://aurorasd.govoffice3.com +South Dakota,Bon Homme County,Avon,http://www.avonsd.com/ +South Dakota,Minnehaha County,Baltic,http://baltic.govoffice.com +South Dakota,Butte County,Belle Fourche,http://www.bellefourche.org +South Dakota,Union County,Beresford,http://www.beresfordsd.com/ +South Dakota,Perkins County,Bison,http://www.bisonsd.com/ +South Dakota,Edmunds County,Bowdle,https://bowdlesd.govoffice2.com +South Dakota,Pennington County,Box Elder,http://www.boxelder.us/ +South Dakota,Minnehaha County,Brandon,https://cityofbrandon.org/ +South Dakota,McCook County,Bridgewater,http://bridgewatersd.com/ +South Dakota,Day County,Bristol,http://www.bristolsd.com/ +South Dakota,Marshall County,Britton,https://cityofbritton.com/ +South Dakota,Brookings County,Brookings,http://www.cityofbrookings.org/ +South Dakota,Harding County,Buffalo,https://townofbuffalo.municipalimpact.com/ +South Dakota,McCook County,Canistota,http://www.canistotasd.com +South Dakota,Lincoln County,Canton,https://cantonsd.org/ +South Dakota,Miner County,Carthage,http://www.carthagesd.net +South Dakota,Hamlin County,Castlewood,https://www.castlewoodcity.com +South Dakota,Turner County,Centerville,http://www.centervillesd.com/ +South Dakota,Brule County,Chamberlain,http://www.chamberlainsd.org +South Dakota,Clark County,Clark,http://www.clarksd.com +South Dakota,Deuel County,Clear Lake,http://www.clearlakesd.com +South Dakota,Minnehaha County,Colton,https://coltonsd.govoffice3.com/ +South Dakota,Faulk County,Cresbard,http://www.cresbardsd.com +South Dakota,Minnehaha County,Crooks,http://crookssd.govoffice3.com/ +South Dakota,Custer County,Custer,http://www.custersd.com/ +South Dakota,Kingsbury County,De Smet,http://www.desmetsd.com/ +South Dakota,Lawrence County,Deadwood,http://www.cityofdeadwood.com +South Dakota,Minnehaha County,Dell Rapids,http://www.cityofdellrapids.org/ +South Dakota,Fall River County,Edgemont,http://www.edgemont-sd.com/ +South Dakota,Union County,Elk Point,http://www.elkpoint.org +South Dakota,Hanson County,Emery,http://www.cityofemerysd.com +South Dakota,Hamlin County,Estelline,http://www.estellinesd.com +South Dakota,Davison County,Ethan,http://www.ethansd.com +South Dakota,McPherson County,Eureka,http://www.eurekasd.com +South Dakota,Meade County,Faith,http://www.faithsd.com +South Dakota,Faulk County,Faulkton,http://www.faulktoncity.org +South Dakota,Moody County,Flandreau,http://www.cityofflandreau.com +South Dakota,Stanley County,Fort Pierre,http://www.fortpierre.com/ +South Dakota,Hutchinson County,Freeman,http://cityoffreeman.webs.com/ +South Dakota,Minnehaha County,Garretson,https://cityofgarretson.com/ +South Dakota,Yankton County,Gayville,http://www.gayvillesd.org +South Dakota,Potter County,Gettysburg,http://cityofgettysburgsd.com +South Dakota,Gregory County,Gregory,http://www.cityofgregory.com/ +South Dakota,Brown County,Groton,http://www.grotonsd.gov +South Dakota,Lincoln County,Harrisburg,http://harrisburgsd.gov/ +South Dakota,Minnehaha County,Hartford,http://www.hartfordsd.us/ +South Dakota,Custer County,Hermosa,https://www.hermosasd.com/ +South Dakota,Campbell County,Herreid,http://www.herreidsd.com/ +South Dakota,Hyde County,Highmore,http://highmoresd.govoffice3.com +South Dakota,Pennington County,Hill City,https://www.hillcitysd.com/ +South Dakota,Beadle County,Hitchcock,http://www.hitchcocksd.com +South Dakota,Fall River County,Hot Springs,https://www.hs-sd.org/ +South Dakota,Miner County,Howard,http://www.cityofhoward.com +South Dakota,Minnehaha County,Humboldt,http://www.humboldt.govoffice.com/ +South Dakota,Beadle County,Huron,http://www.huronsd.com/ +South Dakota,Edmunds County,Ipswich,http://www.ipswich-sd.com +South Dakota,Turner County,Irene,https://www.irenesd.com +South Dakota,Kingsbury County,Iroquois,http://www.iroquoissd.com +South Dakota,Jackson County,Kadoka,http://www.kadokasd.com +South Dakota,Marshall County,Langford,http://langfordsd.com +South Dakota,Lawrence County,Lead,http://cityoflead.com +South Dakota,Perkins County,Lemmon,http://www.lemmonsd.com/ +South Dakota,Lincoln County,Lennox,http://www.cityoflennoxsd.com +South Dakota,McPherson County,Leola,http://www.leolasd.com +South Dakota,Sanborn County,Letcher,http://www.letchersd.com/ +South Dakota,Lake County,Madison,http://www.cityofmadisonsd.com +South Dakota,Bennett County,Martin,http://www.martinsd.net/ +South Dakota,Hutchinson County,Menno,http://www.mennosd.org/ +South Dakota,Haakon County,Midland,http://www.midlandsd.com +South Dakota,Grant County,Milbank,http://www.milbanksd.com +South Dakota,Hand County,Miller,http://www.millersd.org/ +South Dakota,Todd County,Mission,http://www.mission-sd.com +South Dakota,Davison County,Mitchell,http://www.cityofmitchell.org/ +South Dakota,Walworth County,Mobridge,http://www.mobridge.org/ +South Dakota,McCook County,Montrose,http://www.cityofmontrosesd.com/ +South Dakota,Jones County,Murdo,http://www.murdosd.com/ +South Dakota,Pennington County,New Underwood,http://www.newunderwood.com/ +South Dakota,Union County,North Sioux City,http://northsiouxcity-sd.gov +South Dakota,Lyman County,Oacoma,http://oacomasd.com +South Dakota,Sully County,Onida,http://www.onida.org +South Dakota,Turner County,Parker,http://www.parkersd.org/ +South Dakota,Hutchinson County,Parkston,http://www.parkston.com +South Dakota,Charles Mix County,Pickstown,http://www.pickstown-sd.net +South Dakota,Meade County,Piedmont,http://www.piedmontsd.com/ +South Dakota,Hughes County,Pierre,http://www.pierre.sd.gov +South Dakota,Aurora County,Plankinton,http://www.plankinton.com +South Dakota,Charles Mix County,Platte,http://www.plattesd.org/ +South Dakota,Campbell County,Pollock,http://www.pollocksouthdakota.com/ +South Dakota,Pennington County,Rapid City,https://www.rcgov.org/ +South Dakota,Spink County,Redfield,http://www.redfield-sd.com/ +South Dakota,Edmunds County,Roscoe,http://www.roscoesd.org +South Dakota,Roberts County,Rosholt,http://www.rosholtsd.com/ +South Dakota,McCook County,Salem,http://www.salemsd.com +South Dakota,Bon Homme County,Scotland,http://www.cityofscotland.com/ +South Dakota,Walworth County,Selby,http://www.selbysd.govoffice2.com/ +South Dakota,Minnehaha County,Sherman,http://www.shermansd.com/ +South Dakota,Minnehaha County,Sioux Falls,https://www.siouxfalls.org +South Dakota,Roberts County,Sisseton,http://www.sisseton.com +South Dakota,Lawrence County,Spearfish,http://www.cityofspearfish.com +South Dakota,Bon Homme County,Springfield,http://www.springfieldsd.com/ +South Dakota,Aurora County,Stickney,http://www.stickneysd.com/ +South Dakota,Meade County,Sturgis,http://www.sturgis-sd.gov/ +South Dakota,Meade County,Summerset,http://www.summerset.us/ +South Dakota,Bon Homme County,Tabor,http://www.taborsd.com/ +South Dakota,Lincoln County,Tea,https://www.teasd.com/ +South Dakota,Dewey County,Timber Lake,http://www.timberlakesouthdakota.com +South Dakota,Deuel County,Toronto,http://www2.torontosd.com/home +South Dakota,Hutchinson County,Tripp,http://www.trippsd.com/ +South Dakota,Bon Homme County,Tyndall,https://www.mytyndallsd.com/ +South Dakota,Minnehaha County,Valley Springs,http://www.cityofvalleysprings.com/ +South Dakota,Clay County,Vermillion,https://www.vermillion.us/ +South Dakota,Turner County,Viborg,https://www.viborgsd.org/ +South Dakota,Brookings County,Volga,http://www.volgacity.com/ +South Dakota,Charles Mix County,Wagner,http://www.cityofwagner.org +South Dakota,Pennington County,Wall,https://www.wallsd.us/ +South Dakota,Codington County,Watertown,https://www.watertownsd.us/ +South Dakota,Day County,Webster,http://www.webstersd.com/ +South Dakota,Jerauld County,Wessington Springs,http://wessingtonsprings.com +South Dakota,Brookings County,White,http://www.whitesd.com +South Dakota,Aurora County,White Lake,http://www.whitelakesd.com +South Dakota,Lawrence County,Whitewood,http://www.cityofwhitewood.net +South Dakota,Roberts County,Wilmot,http://www.wilmotsouthdakota.com/ +South Dakota,Tripp County,Winner,http://www.winnersd.org +South Dakota,Sanborn County,Woonsocket,http://www.woonsocketsd.com +South Dakota,Lincoln County,Worthing,http://cityofworthing.com +South Dakota,Yankton County,Yankton,https://www.cityofyankton.org/ +Tennessee,Robertson County,Adams,http://www.adamstennessee.org +Tennessee,McNairy County,Adamsville,http://www.cityofadamsville.com +Tennessee,Crockett County,Alamo,http://www.townofalamo.net/ +Tennessee,Blount County,Alcoa,http://www.cityofalcoa-tn.gov +Tennessee,DeKalb County,Alexandria,http://www.townofalexandria.us +Tennessee,Putnam County,Algood,https://algood-tn.com/ +Tennessee,Giles County,Ardmore,http://www.cityofardmoretn.com/ +Tennessee,Shelby County,Arlington,http://www.townofarlington.org/ +Tennessee,Cheatham County,Ashland City,http://www.ashlandcity.net +Tennessee,McMinn County,Athens,http://www.cityofathenstn.com +Tennessee,Tipton County,Atoka,http://www.townofatoka.com +Tennessee,Jefferson County,Baneberry,https://cityofbaneberry.com/ +Tennessee,Shelby County,Bartlett,http://www.cityofbartlett.org/ +Tennessee,Putnam County,Baxter,https://cityofbaxter.com/ +Tennessee,Bedford County,Bell Buckle,http://townofbellbuckle.com +Tennessee,Davidson County,Belle Meade,http://www.citybellemeade.org +Tennessee,Crockett County,Bells,http://cityofbellstn.com/ +Tennessee,Davidson County,Berry Hill,http://www.berryhilltn.org +Tennessee,Benton County,Big Sandy,http://www.bigsandytn.com/ +Tennessee,Grainger County,Blaine,https://www.blainetn.gov/ +Tennessee,Sullivan County,Bluff City,http://www.bluffcitytn.org/ +Tennessee,Hardeman County,Bolivar,http://www.cityofbolivar.com +Tennessee,Williamson County,Brentwood,http://www.brentwoodtn.gov +Tennessee,Tipton County,Brighton,http://www.townofbrighton.com +Tennessee,Sullivan County,Bristol,http://www.bristoltn.org/ +Tennessee,Haywood County,Brownsville,http://brownsvilletn.gov +Tennessee,Dickson County,Burns,http://townofburnstn.net +Tennessee,Pickett County,Byrdstown,http://www.townofbyrdstown.com +Tennessee,Benton County,Camden,http://www.cityofcamdentn.com +Tennessee,Smith County,Carthage,https://townofcarthagetn.com/ +Tennessee,Campbell County,Caryville,https://www.townofcaryvilletn.com/ +Tennessee,Clay County,Celina,https://www.cityofcelinatn.com/ +Tennessee,Hickman County,Centerville,http://www.townofcenterville.com +Tennessee,Marshall County,Chapel Hill,http://www.townofchapelhilltn.com/ +Tennessee,Hamilton County,Chattanooga,http://www.chattanooga.gov +Tennessee,Hawkins County,Church Hill,http://www.churchhilltn.gov +Tennessee,Carroll County,Clarksburg,http://www.clarksburgtn.org +Tennessee,Montgomery County,Clarksville,http://www.cityofclarksville.com/ +Tennessee,Bradley County,Cleveland,http://www.clevelandtn.gov +Tennessee,Wayne County,Clifton,http://www.cityofclifton.com/ +Tennessee,Anderson County,Clinton,http://www.clintontn.net +Tennessee,Hamilton County,Collegedale,http://www.collegedaletn.gov +Tennessee,Shelby County,Collierville,http://www.collierville.com +Tennessee,Wayne County,Collinwood,http://www.cityofcollinwood.org +Tennessee,Maury County,Columbia,http://www.columbiatn.com +Tennessee,Putnam County,Cookeville,http://cookeville-tn.gov +Tennessee,Robertson County,Coopertown,http://www.coopertowntn.org +Tennessee,Marshall County,Cornersville,https://www.cornersvilletn.org/ +Tennessee,Tipton County,Covington,http://www.covingtontn.com +Tennessee,Franklin County,Cowan,https://www.cityofcowan.com/ +Tennessee,Cumberland County,Crossville,http://crossvilletn.gov +Tennessee,Claiborne County,Cumberland Gap,http://townofcumberlandgap.com +Tennessee,Jefferson County,Dandridge,http://www.dandridgetn.gov/ +Tennessee,Rhea County,Dayton,http://www.daytontn.net +Tennessee,Meigs County,Decatur,http://www.decaturtn.net +Tennessee,Franklin County,Decherd,http://www.decherd.net +Tennessee,Dickson County,Dickson,http://www.cityofdickson.com +Tennessee,Stewart County,Dover,https://www.dovertn.com/ +Tennessee,Weakley County,Dresden,http://www.cityofdresden.net/ +Tennessee,Polk County,Ducktown,http://www.cityofducktown.com +Tennessee,Sequatchie County,Dunlap,http://www.cityofdunlap.com +Tennessee,Gibson County,Dyer,http://www.cityofdyertn.com +Tennessee,Dyer County,Dyersburg,http://www.dyersburgtn.gov +Tennessee,Rutherford County,Eagleville,http://www.eaglevilletn.com +Tennessee,Hamilton County,East Ridge,http://www.eastridgetn.gov +Tennessee,Carter County,Elizabethton,http://www.elizabethton.org +Tennessee,Giles County,Elkton,http://www.elktontn.com +Tennessee,McMinn County,Englewood,http://www.townofenglewood.com +Tennessee,Houston County,Erin,http://www.erintn.org +Tennessee,Unicoi County,Erwin,http://www.erwintn.org/ +Tennessee,Franklin County,Estill Springs,https://www.estillspringstn.com/ +Tennessee,McMinn County,Etowah,https://www.cityofetowahtn.com +Tennessee,Williamson County,Fairview,http://www.fairview-tn.org/ +Tennessee,Knox County,Farragut,http://www.townoffarragut.org +Tennessee,Lincoln County,Fayetteville,http://www.fayettevilletn.com +Tennessee,Davidson County,Forest Hills,http://cityofforesthills.com +Tennessee,Williamson County,Franklin,http://franklintn.gov +Tennessee,Sumner County,Gallatin,http://gallatin-tn.gov +Tennessee,Fayette County,Gallaway,http://www.gallawaytn.gov/ +Tennessee,Sevier County,Gatlinburg,http://gatlinburgtn.gov +Tennessee,Shelby County,Germantown,http://www.germantown-tn.gov/ +Tennessee,Weakley County,Gleason,http://www.GleasonOnline.com +Tennessee,Davidson County,Goodlettsville,http://www.goodlettsville.gov/ +Tennessee,Smith County,Gordonsville,http://www.townofgordonsville.com/ +Tennessee,Hardeman County,Grand Junction,http://www.grandjunctiontn.com +Tennessee,Rhea County,Graysville,http://graysvilletn.org +Tennessee,Loudon County,Greenback,https://www.greenbackgov.com/ +Tennessee,Robertson County,Greenbrier,http://greenbriertn.org/ +Tennessee,Greene County,Greeneville,http://www.greenevilletn.gov +Tennessee,Weakley County,Greenfield,http://www.greenfieldtn.org/ +Tennessee,Lauderdale County,Halls,http://www.town.halls.tn.us/ +Tennessee,Roane County,Harriman,http://www.cityofharriman.net/ +Tennessee,Claiborne County,Harrogate,http://www.harrogate-tn.com/ +Tennessee,Trousdale County,Hartsville,https://www.trousdalecountytn.gov/ +Tennessee,Chester County,Henderson,http://hendersontn.org +Tennessee,Sumner County,Hendersonville,https://www.hvilletn.org/ +Tennessee,Lewis County,Hohenwald,http://hohenwald.com +Tennessee,Carroll County,Hollow Rock,http://carrollcounty-tn-chamber.com/hollow-rock-1.htm +Tennessee,Gibson County,Humboldt,http://www.humboldthistorical.com/ +Tennessee,Carroll County,Huntingdon,http://www.huntingdontn.com +Tennessee,Franklin County,Huntland,https://huntland.org/ +Tennessee,Scott County,Huntsville,http://www.townofhuntsville.com/ +Tennessee,Campbell County,Jacksboro,http://www.jacksboro.org +Tennessee,Madison County,Jackson,http://www.jacksontn.gov/ +Tennessee,Fentress County,Jamestown,http://jamestowntn.gov/ +Tennessee,Marion County,Jasper,http://www.jasper-tn.com/ +Tennessee,Jefferson County,Jefferson City,http://www.jeffcitytn.com +Tennessee,Campbell County,Jellico,https://www.jellicocity.com/ +Tennessee,Washington County,Johnson City,http://www.johnsoncitytn.org +Tennessee,Washington County,Jonesborough,http://www.jonesborough.com +Tennessee,Marion County,Kimball,https://www.townofkimball.com/ +Tennessee,Sullivan County,Kingsport,http://www.KingsportTN.gov +Tennessee,Roane County,Kingston,https://kingstontn.gov/ +Tennessee,Cheatham County,Kingston Springs,http://kingstonsprings.net/ +Tennessee,Knox County,Knoxville,http://www.knoxvilletn.gov +Tennessee,Campbell County,La Follette,http://www.lafollettetn.gov +Tennessee,Fayette County,La Grange,http://www.lagrangetn.com +Tennessee,Rutherford County,La Vergne,http://www.lavergnetn.gov/ +Tennessee,Macon County,Lafayette,http://www.lafayette-tn.org +Tennessee,Shelby County,Lakeland,https://www.lakelandtn.gov/ +Tennessee,Hamilton County,Lakesite,http://www.lakesitetn.gov/ +Tennessee,Lawrence County,Lawrenceburg,http://www.lawrenceburgtn.gov/ +Tennessee,Wilson County,Lebanon,http://www.lebanontn.org/ +Tennessee,Loudon County,Lenoir City,http://www.lenoircitytn.gov +Tennessee,Marshall County,Lewisburg,https://www.lewisburgtn.gov/ +Tennessee,Henderson County,Lexington,http://www.lexingtontn.gov +Tennessee,Perry County,Linden,http://lindentn.org/ +Tennessee,Overton County,Livingston,http://www.cityoflivingston.net +Tennessee,Perry County,Lobelville,http://www.lobelvilletn.org/ +Tennessee,Hamilton County,Lookout Mountain,http://www.lookoutmountaintn.org/ +Tennessee,Lawrence County,Loretto,http://cityoflorettotn.com +Tennessee,Loudon County,Loudon,http://www.cityofloudontn.org/ +Tennessee,Blount County,Louisville,http://www.louisvilletn.gov +Tennessee,Monroe County,Madisonville,http://www.cityofmadisonville.org/ +Tennessee,Coffee County,Manchester,http://www.cityofmanchestertn.com +Tennessee,Weakley County,Martin,http://www.cityofmartin.net/ +Tennessee,Blount County,Maryville,http://www.maryvillegov.com +Tennessee,Union County,Maynardville,http://www.maynardvilletn.com/ +Tennessee,Carroll County,McKenzie,http://www.mckenzietn.gov +Tennessee,Carroll County,McLemoresville,http://www.cityofmclemoresville.com/ +Tennessee,Warren County,McMinnville,http://www.mcminnvilletn.gov// +Tennessee,Gibson County,Medina,http://www.cityofmedinatn.org +Tennessee,Shelby County,Memphis,http://www.memphistn.gov +Tennessee,Hardeman County,Middleton,http://cityofmiddleton.org +Tennessee,Gibson County,Milan,http://www.cityofmilantn.com/ +Tennessee,Sumner County,Millersville,https://www.cityofmillersville.com/ +Tennessee,Shelby County,Millington,http://www.millingtontn.gov/ +Tennessee,Giles County,Minor Hill,http://www.minorhilltn.com +Tennessee,Grundy County,Monteagle,http://www.townofmonteagle-tn.gov +Tennessee,Putnam County,Monterey,http://www.exploremontereytn.com +Tennessee,Hamblen County,Morristown,http://www.mymorristown.com +Tennessee,Fayette County,Moscow,http://cityofmoscowtn.com +Tennessee,Greene County,Mosheim,http://www.mosheim-tn.org +Tennessee,Hawkins County,Mount Carmel,http://www.mountcarmeltn.gov +Tennessee,Wilson County,Mount Juliet,http://www.mtjuliet-tn.gov/ +Tennessee,Maury County,Mount Pleasant,https://www.mtpleasant-tn.gov +Tennessee,Johnson County,Mountain City,http://www.johnsoncountytn.org/ +Tennessee,Tipton County,Munford,http://www.munford.com +Tennessee,Rutherford County,Murfreesboro,http://www.murfreesborotn.gov +Tennessee,Davidson County,Nashville,http://nashville.gov +Tennessee,Humphreys County,New Johnsonville,http://www.cityofnewjohnsonville.com +Tennessee,Claiborne County,New Tazewell,http://newtazewelltn.org/ +Tennessee,Dyer County,Newbern,http://www.cityofnewbern.org/ +Tennessee,Cocke County,Newport,http://www.cityofnewport-tn.com +Tennessee,McMinn County,Niota,https://www.cityofniota.org/ +Tennessee,Williamson County,Nolensville,http://www.nolensvilletn.gov +Tennessee,Anderson County,Norris,http://www.cityofnorris.com +Tennessee,Davidson County,Oak Hill,http://www.oakhilltn.us +Tennessee,Anderson County,Oak Ridge,http://www.oakridgetn.gov +Tennessee,Fayette County,Oakland,http://www.oaklandtennessee.org +Tennessee,Anderson County,Oliver Springs,http://www.oliversprings-tn.gov/ +Tennessee,Scott County,Oneida,http://www.townofoneida.com/ +Tennessee,Henry County,Paris,http://paristn.gov/ +Tennessee,Henderson County,Parkers Crossroads,http://www.parkerscrossroad.org +Tennessee,Cocke County,Parrottsville,http://www.parrottsvilletn.org +Tennessee,Decatur County,Parsons,http://www.cityofparsons.com +Tennessee,Cheatham County,Pegram,http://www.pegram.net/ +Tennessee,Sevier County,Pigeon Forge,http://www.cityofpigeonforge.com/ +Tennessee,Fayette County,Piperton,http://www.pipertontn.com +Tennessee,Sevier County,Pittman Center,http://www.pittmancentertn.com +Tennessee,Cheatham County,Pleasant View,http://www.townofpleasantview.com/ +Tennessee,Sumner County,Portland,http://www.cityofportlandtn.gov/ +Tennessee,Giles County,Pulaski,http://www.pulaski-tn.com +Tennessee,Hamilton County,Red Bank,http://www.redbanktn.gov +Tennessee,Macon County,Red Boiling Springs,http://www.redboilingspringstn.com/ +Tennessee,Hamilton County,Ridgeside,http://www.ridgeside.net +Tennessee,Robertson County,Ridgetop,https://ridgetoptn.org/ +Tennessee,Lauderdale County,Ripley,http://www.cityofripleytn.com/ +Tennessee,Blount County,Rockford,https://www.rockfordtn.com/ +Tennessee,Roane County,Rockwood,https://cityofrockwood.com/ +Tennessee,Anderson County,Rocky Top,http://rockytoptn.org +Tennessee,Hawkins County,Rogersville,http://townofrogersville.com/ +Tennessee,Fayette County,Rossville,http://www.townofrossville.com +Tennessee,Hardin County,Savannah,http://www.cityofsavannah.org +Tennessee,Henderson County,Scotts Hill,http://cityofscottshill.com +Tennessee,McNairy County,Selmer,http://townofselmer.com/ +Tennessee,Sevier County,Sevierville,http://www.seviervilletn.org +Tennessee,Bedford County,Shelbyville,http://www.shelbyvilletn.org +Tennessee,Hamilton County,Signal Mountain,http://signalmountaintn.gov +Tennessee,DeKalb County,Smithville,http://smithvillecityhall.com +Tennessee,Rutherford County,Smyrna,http://townofsmyrna.org/ +Tennessee,Hancock County,Sneedville,http://www.hancockcountytn.com/Sneedville-City-Government.php +Tennessee,Hamilton County,Soddy-Daisy,http://www.soddy-daisy.org +Tennessee,Fayette County,Somerville,http://www.somervilletn.org +Tennessee,Marion County,South Pittsburg,http://southpittsburgtn.org/ +Tennessee,White County,Sparta,http://spartatn.com +Tennessee,Rhea County,Spring City,http://www.townofspringcitytn.org +Tennessee,Williamson County,Spring Hill,https://www.springhilltn.org +Tennessee,Robertson County,Springfield,http://www.springfield-tn.org +Tennessee,Haywood County,Stanton,https://haywoodcountybrownsville.com/haywood-county/stanton/ +Tennessee,Monroe County,Sweetwater,http://www.sweetwatertn.net/ +Tennessee,Monroe County,Tellico Plains,https://www.tellicoplainstn.com +Tennessee,Houston County,Tennessee Ridge,http://www.tnridge.com/ +Tennessee,Williamson County,Thompson's Station,http://www.thompsons-station.com +Tennessee,Madison County,Three Way,https://cityofthreeway.org/ +Tennessee,Lake County,Tiptonville,http://www.tiptonville.org/index.html +Tennessee,Blount County,Townsend,http://www.cityoftownsend.com +Tennessee,Gibson County,Trenton,http://trentontn.net +Tennessee,Carroll County,Trezevant,http://carrollcounty-tn-chamber.com/index-3.htm +Tennessee,Dyer County,Trimble,http://www.trimbletennessee.com +Tennessee,Obion County,Troy,http://www.troytn.com/ +Tennessee,Coffee County,Tullahoma,http://www.tullahomatn.gov +Tennessee,Greene County,Tusculum,http://www.tusculumcity.org/ +Tennessee,Unicoi County,Unicoi,http://www.unicoitn.net/ +Tennessee,Obion County,Union City,http://www.unioncitytn.gov +Tennessee,Monroe County,Vonore,https://www.town-of-vonore.com/ +Tennessee,Hamilton County,Walden,http://waldentn.gov/ +Tennessee,Wilson County,Watertown,http://www.watertowntn.com/ +Tennessee,Humphreys County,Waverly,http://waverlytn.org +Tennessee,Wayne County,Waynesboro,http://www.cityofwaynesboro.org +Tennessee,Sumner County,Westmoreland,http://www.westmorelandtn.gov +Tennessee,Dickson County,White Bluff,http://www.townofwhitebluff.com +Tennessee,Sumner County,White House,http://www.cityofwhitehouse.com/ +Tennessee,Jefferson County,White Pine,https://whitepinetn.gov/ +Tennessee,Hardeman County,Whiteville,http://www.townofwhiteville.com +Tennessee,Marion County,Whitwell,http://cityofwhitwell.com/ +Tennessee,Franklin County,Winchester,http://www.winchester-tn.com +Tennessee,Cannon County,Woodbury,https://cannoncountytn.org/woodbury-city-of/ +Texas,Lubbock County,Abernathy,http://cityofabernathy.org +Texas,Taylor County,Abilene,http://abilenetx.com +Texas,Dallas County,Addison,http://www.addisontx.gov/ +Texas,Hidalgo County,Alamo,http://www.alamotexas.org +Texas,Bexar County,Alamo Heights,http://www.alamoheightstx.gov +Texas,Parker County,Aledo,http://www.aledo-texas.com/ +Texas,Jim Wells County,Alice,http://www.cityofalice.org +Texas,Smith County,Allen,http://www.cityofallen.org +Texas,Brewster County,Alpine,http://cityofalpine.com +Texas,Cherokee County,Alto,https://cityofalto.com/ +Texas,Hidalgo County,Alton,http://www.alton-tx.gov +Texas,Johnson County,Alvarado,http://www.cityofalvarado.org +Texas,Brazoria County,Alvin,http://www.alvin-tx.gov +Texas,Potter County,Amarillo,http://www.amarillo.gov +Texas,Liberty County,Ames,http://www.cityofamestexas.com +Texas,Lamb County,Amherst,http://cityofamhersttx.com +Texas,Chambers County,Anahuac,http://www.anahuac.us +Texas,Grimes County,Anderson,http://andersontx.gov/ +Texas,Andrews County,Andrews,http://www.cityofandrews.org +Texas,Brazoria County,Angleton,http://www.angleton.tx.us +Texas,Collin County,Anna,http://www.annatexas.gov +Texas,Parker County,Annetta,http://www.annettatx.gov +Texas,Parker County,Annetta South,http://annettasouth.org +Texas,Jones County,Anson,http://anson-tx.us +Texas,El Paso County,Anthony,http://townofanthony.org +Texas,San Patricio County,Aransas Pass,http://www.aransaspasstx.gov +Texas,Archer County,Archer City,http://www.archercity.org/ +Texas,Fort Bend County,Arcola,http://www.arcolatexas.org +Texas,Denton County,Argyle,http://www.argyletx.com/ +Texas,Tarrant County,Arlington,http://www.ArlingtonTX.gov +Texas,Henderson County,Athens,http://athenstx.gov +Texas,Cass County,Atlanta,http://atlantatexas.org +Texas,Denton County,Aubrey,http://www.ci.aubrey.tx.us +Texas,Wise County,Aurora,http://www.auroratexas.gov +Texas,Travis County,Austin,http://austintexas.gov +Texas,Parker County,Azle,http://www.cityofazle.org/ +Texas,Brazoria County,Bailey's Prairie,http://baileysprairie.org +Texas,Dallas County,Balch Springs,http://www.cityofbalchsprings.com/ +Texas,Bexar County,Balcones Heights,http://bhtx.gov +Texas,Runnels County,Ballinger,http://www.ballinger-tx.com +Texas,Bandera County,Bandera,http://www.cityofbandera.com +Texas,Brown County,Bangs,https://cityofbangs.org/ +Texas,Williamson County,Bartlett,https://bartlett-tx.us/ +Texas,Denton County,Bartonville,http://www.townofbartonville.com +Texas,Bastrop County,Bastrop,http://www.cityofbastrop.org +Texas,Matagorda County,Bay City,http://www.cityofbaycity.org +Texas,Galveston County,Bayou Vista,http://bayouvista.us/ +Texas,Harris County,Baytown,http://www.baytown.org/ +Texas,Chambers County,Beach City,http://www.beachcitytx.us +Texas,Hays County,Bear Creek,http://vilbc.org +Texas,Jefferson County,Beaumont,http://beaumonttexas.gov +Texas,Rockwall County,Bedford,http://www.bedfordtx.gov/ +Texas,Grimes County,Bedias,http://bedias.com +Texas,Travis County,Bee Cave,http://www.beecavetexas.gov/ +Texas,Bee County,Beeville,http://www.beevilletx.org/ +Texas,Harris County,Bellaire,http://www.bellairetx.gov +Texas,McLennan County,Bellmead,http://www.bellmead.com +Texas,Grayson County,Bells,http://www.cityofbells.org +Texas,Austin County,Bellville,http://www.cityofbellville.com +Texas,Bell County,Belton,http://www.beltontexas.gov +Texas,Cameron County,Benbrook,http://www.ci.benbrook.tx.us/ +Texas,Henderson County,Berryville,http://www.cityofberryville.org +Texas,Burnet County,Bertram,http://www.cityofbertram.org/ +Texas,McLennan County,Beverly Hills,https://beverlyhillstexas.net/ +Texas,Jefferson County,Bevil Oaks,http://cityofbeviloaks.com +Texas,Reagan County,Big Lake,http://www.biglaketx.com/ +Texas,Upshur County,Big Sandy,http://bigsandytx.gov/ +Texas,Howard County,Big Spring,http://www.mybigspring.com +Texas,Nueces County,Bishop,https://www.bishoptx.com/ +Texas,Potter County,Bishop Hills,http://bishophillstx.org +Texas,Blanco County,Blanco,http://www.cityofblanco.com +Texas,Lamar County,Blossom,http://www.cityofblossom.tx.citygovt.org/ +Texas,Runnels County,Blue Mound,https://www.bluemoundtexas.org/ +Texas,Collin County,Blue Ridge,http://blueridgecity.com +Texas,Kendall County,Boerne,http://www.ci.boerne.tx.us +Texas,Fannin County,Bonham,http://www.cobon.net +Texas,Brazoria County,Bonney,http://www.bonneytexas.gov +Texas,Lipscomb County,Booker,http://www.bookertexas.com +Texas,Hutchinson County,Borger,http://borgertx.gov/ +Texas,Parmer County,Bovina,http://www.cityofbovina.net/ +Texas,Montague County,Bowie,https://www.cityofbowietx.com/ +Texas,Wise County,Boyd,https://cityofboyd.com/ +Texas,Kinney County,Brackettville,http://www.thecityofbrackettville.com +Texas,McCulloch County,Brady,http://www.bradytx.us +Texas,Brazoria County,Brazoria,http://cityofbrazoria.org/ +Texas,Austin County,Brazos Country,http://citybrazoscountry.org/ +Texas,Stephens County,Breckenridge,https://breckenridgetx.gov/ +Texas,Washington County,Brenham,https://www.cityofbrenham.org/ +Texas,Travis County,Briarcliff,https://www.briarclifftx.com/ +Texas,Orange County,Bridge City,http://www.bridgecitytex.com +Texas,Wise County,Bridgeport,http://www.cityofbridgeport.net +Texas,Waller County,Brookshire,http://cityofbrookshire.org +Texas,Brazoria County,Brookside Village,https://brooksidevillage-tx.org/ +Texas,Terry County,Brownfield,http://www.ci.brownfield.tx.us/ +Texas,Henderson County,Brownsboro,http://www.brownsboro.us +Texas,Cameron County,Brownsville,http://brownsvilletx.gov +Texas,Brown County,Brownwood,http://brownwoodtexas.gov +Texas,McLennan County,Bruceville-Eddy,http://bruceville-eddy.us +Texas,Brazos County,Bryan,https://www.bryantx.gov +Texas,Jack County,Bryson,http://cityofbrysontexas.com +Texas,Hays County,Buda,http://www.ci.buda.tx.us +Texas,Leon County,Buffalo,http://buffalotex.com +Texas,Smith County,Bullard,http://www.bullardtexas.net +Texas,Comal County,Bulverde,http://bulverdetx.gov +Texas,Harris County,Bunker Hill Village,https://bunkerhilltx.gov +Texas,Wichita County,Burkburnett,http://www.burkburnett.org/ +Texas,Johnson County,Burleson,http://www.burlesontx.com +Texas,Burnet County,Burnet,http://www.cityofburnet.com +Texas,Hunt County,Caddo Mills,http://www.cityofcaddomills.com +Texas,Burleson County,Caldwell,http://www.caldwelltx.gov +Texas,Cooke County,Callisburg,http://www.callisburgtx.com +Texas,Milam County,Cameron,https://www.camerontexas.net/ +Texas,Hemphill County,Canadian,http://www.canadiantx.com +Texas,Van Zandt County,Canton,http://www.cantontx.gov/index.php +Texas,Randall County,Canyon,http://www.canyontx.com/ +Texas,Dimmit County,Carrizo Springs,http://www.cityofcarrizo.org/ +Texas,Dallas County,Carrollton,http://www.cityofcarrollton.com +Texas,Panola County,Carthage,http://www.carthagetexas.com +Texas,Bexar County,Castle Hills,http://www.cityofcastlehills.com/ +Texas,Medina County,Castroville,http://www.castrovilletx.gov +Texas,Dallas County,Cedar Hill,http://cedarhilltx.com/ +Texas,Williamson County,Cedar Park,http://www.cedarparktexas.gov/ +Texas,Collin County,Celina,http://www.celina-tx.gov +Texas,Shelby County,Center,http://www.centertexas.org/ +Texas,Leon County,Centerville,http://centervilletx.gov +Texas,Henderson County,Chandler,http://www.chandlertx.com +Texas,Childress County,Childress,http://childresstexas.com/ +Texas,Jefferson County,China,http://chinatexas.net +Texas,Bexar County,China Grove,http://www.cityofchinagrove.org/ +Texas,Nacogdoches County,Chireno,http://www.chireno.com/ +Texas,Guadalupe County,Cibolo,http://www.cibolotx.gov +Texas,Eastland County,Cisco,http://www.cityofcisco.com +Texas,Red River County,Clarksville,https://clarksvilletx.com/ +Texas,Gregg County,Clarksville City,https://directory.tml.org/profile/city/1183 +Texas,Armstrong County,Claude,http://cityofclaude.com/ +Texas,Galveston County,Clear Lake Shores,http://www.clearlakeshores-tx.gov/ +Texas,Johnson County,Cleburne,http://www.cleburne.net +Texas,Liberty County,Cleveland,http://www.clevelandtexas.com +Texas,Bosque County,Clifton,http://www.cityofclifton.org +Texas,El Paso County,Clint,https://www.clinttexas.com/ +Texas,Brazoria County,Clute,http://ci.clute.tx.us/ +Texas,Callahan County,Clyde,http://clydetexas.us +Texas,La Salle County,Cockrell Hill,http://cockrell-hill.tx.us/ +Texas,Henderson County,Coffee City,http://www.cityofcoffeecity.com +Texas,Coleman County,Coleman,http://www.cityofcolemantx.us +Texas,Brazos County,College Station,http://www.cstx.gov +Texas,Dallas County,Colleyville,http://www.colleyville.com/ +Texas,Grayson County,Collinsville,http://www.collinsvilletexas.org +Texas,Mitchell County,Colorado City,http://www.coloradocitytexas.org/ +Texas,Colorado County,Columbus,http://www.columbustexas.net +Texas,Comanche County,Comanche,http://www.cityofcomanchetexas.net/ +Texas,Cameron County,Combes,https://www.townofcombes.com/ +Texas,Kaufman County,Combine,http://combinetx.com +Texas,Hunt County,Commerce,http://commercetx.org +Texas,Hopkins County,Como,http://cityofcomotx.com +Texas,Montgomery County,Conroe,http://www.cityofconroe.org/ +Texas,Bexar County,Converse,http://www.conversetx.net +Texas,Limestone County,Coolidge,http://www.cityofcoolidgetx.com +Texas,Delta County,Cooper,https://www.cityofcoopertx.municipalimpact.com/ +Texas,Dallas County,Coppell,http://www.coppelltx.gov/ +Texas,Denton County,Copper Canyon,http://www.coppercanyon-tx.org +Texas,Coryell County,Copperas Cove,http://www.copperascovetx.gov +Texas,Denton County,Corinth,http://www.cityofcorinth.com +Texas,Nueces County,Corpus Christi,http://www.cctexas.com +Texas,Navarro County,Corsicana,http://www.cityofcorsicana.com +Texas,Kaufman County,Cottonwood,http://www.cityofcottonwoodtexas.org +Texas,Burnet County,Cottonwood Shores,http://cottonwoodshores.org +Texas,Williamson County,Coupland,http://www.cityofcouplandtx.us/ +Texas,Hill County,Covington,https://tshaonline.org/handbook/online/articles/hlc55 +Texas,Kaufman County,Crandall,http://www.crandalltexas.com +Texas,Crane County,Crane,http://cityofcranetexas.com +Texas,Bosque County,Cranfills Gap,http://www.CranfillsGapTexas.com +Texas,Houston County,Crockett,http://www.crocketttexas.org +Texas,Crosby County,Crosbyton,http://www.cityofcrosbyton.org +Texas,Callahan County,Cross Plains,http://www.crossplains.org +Texas,Denton County,Cross Roads,http://www.crossroadstx.gov +Texas,Johnson County,Cross Timber,http://www.crosstimbertx.org +Texas,Foard County,Crowell,http://www.crowelltex.com/ +Texas,Tarrant County,Crowley,http://www.ci.crowley.tx.us +Texas,Zavala County,Crystal City,http://www.crystalcitytx.org +Texas,DeWitt County,Cuero,http://www.cityofcuero.com +Texas,Hopkins County,Cumby,http://cumbytx.com +Texas,Morris County,Daingerfield,https://www.cityofdaingerfield.com/ +Texas,Dallam County,Dalhart,http://www.dalharttx.gov +Texas,Dallas County,Dallas,http://www.dallascityhall.com/ +Texas,Rusk County,Dalworthington Gardens,http://www.cityofdwg.net/ +Texas,Brazoria County,Danbury,https://www.danburytx.gov/ +Texas,Lipscomb County,Darrouzett,http://www.darrouzett.org +Texas,Navarro County,Dawson,https://www.cityofdawsontx.com/ +Texas,Liberty County,Dayton,https://www.cityofdaytontx.com/ +Texas,Bowie County,De Kalb,https://dekalbtx.org/ +Texas,Comanche County,De Leon,https://www.cityofdeleon.org/ +Texas,Wise County,Decatur,http://www.decaturtx.org/ +Texas,Hood County,DeCordova,https://cityofdecordova.org/ +Texas,Harris County,Deer Park,http://www.deerparktx.gov +Texas,Val Verde County,Del Rio,http://www.cityofdelrio.com/ +Texas,Hudspeth County,Dell City,http://www.dellcity.com +Texas,Grayson County,Denison,http://www.cityofdenison.com +Texas,Denton County,Denton,http://www.cityofdenton.com/ +Texas,Yoakum County,Denver City,https://denvercitytexas.org/ +Texas,Lamar County,Deport,http://www.cityofdeport.org +Texas,Collin County,DeSoto,http://www.ci.desoto.tx.us +Texas,Red River County,Detroit,http://www.detroit.tx.citygovt.org/ +Texas,Liberty County,Devers,http://cityofdevers.com +Texas,Medina County,Devine,http://www.devinetx.com/ +Texas,Angelina County,Diboll,http://www.cityofdiboll.com +Texas,Galveston County,Dickinson,https://www.ci.dickinson.tx.us/ +Texas,Frio County,Dilley,http://www.cityofdilleytx.com +Texas,Denton County,DISH,http://www.townofdish.com +Texas,Hidalgo County,Donna,http://cityofdonna.org +Texas,Grayson County,Dorchester,https://cityofdorchester.org/ +Texas,Denton County,Double Oak,http://www.double-oak.com +Texas,Hays County,Dripping Springs,http://www.cityofdrippingsprings.com/ +Texas,Erath County,Dublin,http://www.ci.dublin.tx.us +Texas,Moore County,Dumas,http://www.ci.dumas.tx.us/ +Texas,Dallas County,Duncanville,https://www.duncanville.com/ +Texas,Colorado County,Eagle Lake,http://coeltx.net +Texas,Maverick County,Eagle Pass,http://www.eaglepasstx.us/ +Texas,Brown County,Early,http://www.earlytx.net +Texas,Wharton County,East Bernard,http://www.eastbernardtx.com/ +Texas,Rains County,East Tawakoni,http://cityofeasttawakoni.com/ +Texas,Eastland County,Eastland,http://www.cityofeastland.com +Texas,Gregg County,Easton,https://cityofeastontx.com/home +Texas,Hidalgo County,Edcouch,https://www.edcouchtx.us/ +Texas,Concho County,Eden,http://www.edentexas.com/ +Texas,Tarrant County,Edgecliff Village,http://cour60.wix.com/evgov +Texas,Van Zandt County,Edgewood,https://edgewoodtexas.org/ +Texas,Hidalgo County,Edinburg,http://www.cityofedinburg.com +Texas,Wise County,Edna,http://www.cityofedna.com +Texas,Van Zandt County,Edom,http://www.edomtexas.com/ +Texas,Wharton County,El Campo,http://www.cityofelcampo.org/ +Texas,Webb County,El Cenizo,http://www.cityofelcenizo.com/ +Texas,Harris County,El Lago,http://www.ellago-tx.com +Texas,El Paso County,El Paso,http://www.elpasotexas.gov +Texas,Schleicher County,Eldorado,http://www.eldoradotexas.us/ +Texas,Wichita County,Electra,http://www.electratexas.org/ +Texas,Bastrop County,Elgin,http://elgintx.com +Texas,Anderson County,Elkhart,https://www.cityofelkharttx.gov/ +Texas,Bexar County,Elmendorf,https://www.elmendorf-tx.com/ +Texas,Johnson County,Elsa,http://cityofelsa.net +Texas,Rains County,Emory,https://www.cityofemory.com/ +Texas,Henderson County,Enchanted Oaks,http://www.enchantedoaks.org +Texas,La Salle County,Encinal,https://www.cityofencinal.com/ +Texas,Ellis County,Ennis,http://www.ennistx.gov +Texas,Dallas County,Euless,http://www.eulesstx.gov/ +Texas,Henderson County,Eustace,http://www.eustacetexas.org +Texas,Coryell County,Evant,https://cityofevanttx.com/home +Texas,Gregg County,Everman,http://www.evermantx.net/ +Texas,Bexar County,Fair Oaks Ranch,http://fairoaksranchtx.org +Texas,Fort Bend County,Fairchilds,https://fairchildstx.com/ +Texas,Freestone County,Fairfield,http://www.fairfieldtexas.com +Texas,Collin County,Fairview,http://www.fairviewtexas.org +Texas,Brooks County,Falfurrias,http://www.ci.falfurrias.tx.us +Texas,Coryell County,Farmers Branch,http://www.farmersbranchtx.gov +Texas,Collin County,Farmersville,http://www.farmersvilletx.com +Texas,Rockwall County,Fate,http://www.cityoffate.com/ +Texas,Fayette County,Fayetteville,http://fayettevillecitytx.com +Texas,Ellis County,Ferris,https://www.ferristexas.gov/ +Texas,Fayette County,Flatonia,http://www.destinationflatonia.com +Texas,Wilson County,Floresville,http://www.cityoffloresville.org/ +Texas,Denton County,Flower Mound,http://www.flower-mound.com +Texas,Floyd County,Floydada,https://www.cityoffloydada.com/ +Texas,Cherokee County,Forest Hill,http://www.foresthilltx.org/ +Texas,Kaufman County,Forney,http://cityofforney.org +Texas,Pecos County,Fort Stockton,http://cityoffortstockton.com +Texas,Tarrant County,Fort Worth,http://www.fortworthtexas.gov/ +Texas,Robertson County,Franklin,http://cityoffranklintx.com/ +Texas,Anderson County,Frankston,http://www.frankstontexas.com +Texas,Gillespie County,Fredericksburg,http://www.fbgtx.org +Texas,Brazoria County,Freeport,http://www.freeport.tx.us +Texas,Duval County,Freer,http://www.freertx.org +Texas,Galveston County,Friendswood,http://www.ci.friendswood.tx.us +Texas,Parmer County,Friona,https://www.cityoffriona.com/ +Texas,Collin County,Frisco,http://www.friscotexas.gov +Texas,Hutchinson County,Fritch,http://www.fritchcityhall.com +Texas,Fort Bend County,Fulshear,https://www.fulsheartexas.gov/ +Texas,Aransas County,Fulton,http://www.fultontexas.org +Texas,Cooke County,Gainesville,http://www.gainesville.tx.us +Texas,Harris County,Galena Park,http://www.cityofgalenapark-tx.gov +Texas,Galveston County,Galveston,http://galvestontx.gov +Texas,Bell County,Ganado,http://www.cityofganado.com +Texas,Comal County,Garden Ridge,http://www.ci.garden-ridge.tx.us +Texas,Dallas County,Garland,http://www.garlandtx.gov +Texas,Ellis County,Garrett,http://cityofgarrett.com +Texas,Nacogdoches County,Garrison,http://www.garrisontx.us +Texas,Coryell County,Gatesville,http://ci.gatesville.tx.us +Texas,Live Oak County,George West,https://cityofgw.org/ +Texas,Williamson County,Georgetown,http://georgetown.org/ +Texas,Lee County,Giddings,http://www.giddings.net +Texas,Upshur County,Gilmer,http://gilmer-tx.com/ +Texas,Gregg County,Gladewater,http://cityofgladewater.com +Texas,Somervell County,Glen Rose,https://www.glenrosetexas.org/ +Texas,Dallas County,Glenn Heights,http://www.glennheightstx.gov +Texas,Johnson County,Godley,http://godleytx.gov +Texas,Mills County,Goldthwaite,https://www.visitgoldthwaite.com/ +Texas,Goliad County,Goliad,http://www.goliadtx.net +Texas,Gonzales County,Gonzales,http://www.cityofgonzales.org +Texas,Palo Pinto County,Gordon,https://www.discovergordon.com/ +Texas,Eastland County,Gorman,http://www.gormantx.com +Texas,Young County,Graham,http://www.cityofgrahamtexas.com/ +Texas,Hood County,Granbury,http://www.granbury.org +Texas,Dallas County,Grand Prairie,https://www.gptx.org +Texas,Van Zandt County,Grand Saline,https://grandsalinetx.gov/ +Texas,Johnson County,Grandview,http://www.cityofgrandview.org +Texas,Williamson County,Granger,https://grangertx.us/ +Texas,Burnet County,Granite Shoals,http://www.graniteshoals.org +Texas,Houston County,Grapeland,https://www.grapeland.com/ +Texas,Denton County,Grapevine,https://www.grapevinetexas.gov/ +Texas,Hunt County,Greenville,http://www.ci.greenville.tx.us +Texas,San Patricio County,Gregory,https://www.cityofgregorytx.com/ +Texas,Bexar County,Grey Forest,http://greyforest-tx.gov +Texas,Limestone County,Groesbeck,http://www.cityofgroesbeck.com/ +Texas,Jefferson County,Groves,http://www.cigrovestx.com +Texas,Henderson County,Gun Barrel City,http://www.gunbarrelcity.net +Texas,Grayson County,Gunter,http://ci.gunter.tx.us +Texas,Denton County,Hackberry,http://cityofhackberry.net +Texas,Hale County,Hale Center,http://www.cityofhalecenter.com +Texas,Lavaca County,Hallettsville,http://www.cityofhallettsville.org/ +Texas,Harrison County,Hallsville,http://cityofhallsvilletx.com +Texas,Walker County,Haltom City,http://www.haltomcitytx.com/ +Texas,Hamilton County,Hamilton,http://hamiltontexas.com +Texas,Liberty County,Hardin,http://www.hardintexas.com +Texas,Bell County,Harker Heights,http://www.ci.harker-heights.tx.us/ +Texas,Cameron County,Harlingen,http://myharlingen.us +Texas,Haskell County,Haskell,http://haskelltexasusa.com +Texas,Tarrant County,Haslet,http://haslet.org/ +Texas,Hays County,Hays,https://cityofhays.org/ +Texas,Robertson County,Hearne,https://www.cityofhearne.org/ +Texas,Rockwall County,Heath,http://heathtx.com +Texas,Harris County,Hedwig Village,http://www.hedwigtx.gov +Texas,Bexar County,Helotes,http://www.helotes-tx.gov +Texas,Sabine County,Hemphill,https://www.cityofhemphill.com/ +Texas,Waller County,Hempstead,http://hempsteadcitytx.com/ +Texas,Rusk County,Henderson,http://www.hendersontx.us +Texas,Clay County,Henrietta,http://www.cityofhenrietta.com +Texas,Deaf Smith County,Hereford,http://www.hereford-tx.gov +Texas,McLennan County,Hewitt,http://www.cityofhewitt.com/ +Texas,Denton County,Hickory Creek,http://www.hickorycreek-tx.gov +Texas,Hamilton County,Hico,http://hico-tx.com +Texas,Moore County,Hidalgo,http://cityofhidalgo.net +Texas,Smith County,Hideaway,https://cityofhideaway.org/ +Texas,Burnet County,Highland Haven,http://highlandhaventx.com +Texas,Dallas County,Highland Park,http://www.hptx.org/ +Texas,Denton County,Highland Village,http://www.highlandvillage.org +Texas,Bexar County,Hill Country Village,http://www.hcv.org/ +Texas,Brazoria County,Hillcrest,https://www.hillcrestvillagetx.gov +Texas,Hill County,Hillsboro,http://www.hillsborotx.org +Texas,Harris County,Hilshire Village,http://www.hilshirevillagetexas.com +Texas,Galveston County,Hitchcock,http://www.cityofhitchcock.org/ +Texas,Brazoria County,Holiday Lakes,http://holidaylakestexas.com +Texas,Bell County,Holland,https://www.cityofholland.org/ +Texas,Archer County,Holliday,http://www.hollidaytx.org +Texas,Bexar County,Hollywood Park,http://www.hollywoodpark-tx.gov/ +Texas,Medina County,Hondo,http://www.cityofhondo.com +Texas,Fannin County,Honey Grove,http://cityofhoneygrove.org +Texas,El Paso County,Horizon City,http://www.horizoncity.org +Texas,Llano County,Horseshoe Bay,http://www.horseshoe-bay-tx.gov +Texas,Gibson County,Houston,http://www.houstontx.gov/ +Texas,Grayson County,Howe,http://cityofhowe.org +Texas,Hill County,Hubbard,http://hubbardcity.com +Texas,Angelina County,Hudson,https://hudsontx.com/ +Texas,Parker County,Hudson Oaks,https://hudsonoaks.com/ +Texas,Cass County,Hughes Springs,http://www.hughesspringstxusa.com +Texas,Harris County,Humble,http://www.cityofhumble.net +Texas,Harris County,Hunters Creek Village,http://www.cityofhunterscreek.com +Texas,Angelina County,Huntington,http://www.cityofhuntington.org +Texas,Walker County,Huntsville,http://www.huntsvilletx.gov/ +Texas,Galveston County,Hurst,https://www.hursttx.gov/ +Texas,Dallas County,Hutchins,http://www.cityofhutchins.org/ +Texas,Williamson County,Hutto,http://www.huttotx.gov/ +Texas,Lubbock County,Idalou,http://idaloutx.com +Texas,Cameron County,Indian Lake,http://www.townofindianlake.com/ +Texas,Austin County,Industry,http://www.industry-tx.com +Texas,San Patricio County,Ingleside,http://www.inglesidetx.gov/ +Texas,Kerr County,Ingram,http://www.cityofingram.com +Texas,Grimes County,Iola,https://tshaonline.org/handbook/online/articles/hli07 +Texas,Brazoria County,Iowa Colony,https://www.iowacolonytx.gov/ +Texas,Wichita County,Iowa Park,http://www.iowapark.com/ +Texas,Dallas County,Irving,http://www.cityofirving.org/ +Texas,Ellis County,Italy,http://www.ci.italy.tx.us +Texas,Hill County,Itasca,http://www.biglittletowntx.com/ +Texas,Tyler County,Ivanhoe,http://cityofivanhoetx.com/ +Texas,Harris County,Jacinto City,http://www.jacintocity-tx.gov +Texas,Jack County,Jacksboro,http://www.cityofjacksboro.com +Texas,Cherokee County,Jacksonville,http://www.jacksonvilletx.org +Texas,Galveston County,Jamaica Beach,http://www.ci.jamaicabeach.tx.us/ +Texas,Williamson County,Jarrell,http://www.cityofjarrell.com/ +Texas,Kaufman County,Jasper,http://jaspertx.org +Texas,Marion County,Jefferson,http://www.jeffersontexas.us +Texas,Harris County,Jersey Village,http://www.jerseyvillagetx.com +Texas,Leon County,Jewett,http://cityofjewett.com +Texas,Blanco County,Johnson City,http://www.johnsoncitytx.org +Texas,Brazoria County,Jones Creek,http://www.villageofjonescreektexas.com +Texas,Travis County,Jonestown,https://jonestowntx.gov/ +Texas,Collin County,Josephine,http://www.cityofjosephinetx.com +Texas,Johnson County,Joshua,http://www.cityofjoshuatx.us +Texas,Atascosa County,Jourdanton,http://jourdantontexas.org/ +Texas,Kimble County,Junction,http://cityofjunction.com +Texas,Denton County,Justin,http://cityofjustin.com +Texas,Karnes County,Karnes City,http://cityofkctx.com +Texas,Harris County,Katy,http://cityofkaty.com +Texas,Kaufman County,Kaufman,http://www.kaufmantx.org +Texas,Johnson County,Keene,http://www.keenetx.com +Texas,Walker County,Keller,http://www.cityofkeller.com/ +Texas,Galveston County,Kemah,http://www.kemah-tx.gov +Texas,Kaufman County,Kemp,http://www.cityofkemp.org +Texas,Fort Bend County,Kendleton,http://www.kendletontx.net/ +Texas,Karnes County,Kenedy,http://www.cityofkenedy.org +Texas,Liberty County,Kenefick,http://cityofkenefick.com +Texas,Liberty County,Kennedale,http://www.cityofkennedale.com +Texas,Navarro County,Kerens,http://ci.kerens.tx.us/ +Texas,Winkler County,Kermit,http://www.kermittexas.us/ +Texas,Kerr County,Kerrville,http://kerrvilletx.gov +Texas,Gregg County,Kilgore,http://cityofkilgore.com +Texas,Bell County,Killeen,http://www.killeentexas.gov +Texas,Guadalupe County,Kingsbury,http://www.kingsburytexas.org/ +Texas,Kleberg County,Kingsville,http://www.cityofkingsville.com/ +Texas,Bexar County,Kirby,http://www.kirbytx.org/ +Texas,Jasper County,Kirbyville,http://www.cityofkirbyville.com +Texas,Grayson County,Knollwood,http://www.knollwoodvillage.com +Texas,Limestone County,Kosse,http://www.kossetexas.com +Texas,Hardin County,Kountze,http://cityofkountze.org +Texas,Denton County,Krugerville,http://www.krugerville.org +Texas,Denton County,Krum,http://www.ci.krum.tx.us +Texas,Brazos County,Kurten,http://www.kurtentexas.com +Texas,Hays County,Kyle,http://www.cityofkyle.com +Texas,Cameron County,La Feria,http://www.cityoflaferia.com +Texas,Fayette County,La Grange,http://www.cityoflg.com +Texas,Hidalgo County,La Joya,http://www.cityoflajoya.com +Texas,Galveston County,La Marque,http://www.ci.la-marque.tx.us/ +Texas,Harris County,La Porte,http://www.ci.la-porte.tx.us/ +Texas,Wilson County,La Vernia,http://www.lavernia-tx.gov/ +Texas,Hidalgo County,La Villa,http://www.cityoflavilla.org +Texas,McLennan County,Lacy-Lakeview,http://www.lacylakeview.org/ +Texas,Fannin County,Ladonia,http://www.cityofladonia.com +Texas,Travis County,Lago Vista,https://lagovistatexas.gov +Texas,Cameron County,Laguna Vista,http://lvtexas.com/ +Texas,Denton County,Lake Dallas,http://www.lakedallas.com +Texas,Brazoria County,Lake Jackson,http://www.lakejackson-tx.gov +Texas,Denton County,Lake Worth,http://www.lakeworthtx.org/ +Texas,Gregg County,Lakeport,http://www.lakeporttx.gov +Texas,Tarrant County,Lakeside,http://www.lakesidetexas.us/ +Texas,Archer County,Lakeside City,http://www.lakesidecitytx.org +Texas,Travis County,Lakeway,http://www.lakeway-tx.gov +Texas,Denton County,Lakewood Village,http://www.lakewoodvillagetx.us +Texas,Dawson County,Lamesa,http://www.ci.lamesa.tx.us +Texas,Lampasas County,Lampasas,http://www.cityoflampasas.com +Texas,Galveston County,Lancaster,http://www.lancaster-tx.com/ +Texas,Webb County,Laredo,http://www.laredotexas.gov/ +Texas,Collin County,Lavon,http://cityoflavon.com +Texas,Galveston County,League City,http://www.leaguecitytx.gov/ +Texas,Williamson County,Leander,http://www.leandertx.gov/ +Texas,Bexar County,Leon Valley,http://www.leonvalleytexas.gov/ +Texas,Fannin County,Leonard,http://www.cityofleonard.net +Texas,Hockley County,Levelland,http://www.levellandtexas.org +Texas,Denton County,Lewisville,http://www.cityoflewisville.com +Texas,Lee County,Lexington,http://cityoflexingtontx.com +Texas,Liberty County,Liberty,http://www.cityofliberty.org +Texas,Smith County,Lindale,http://www.lindaletx.gov +Texas,Cass County,Linden,http://lindentexas.org +Texas,Cooke County,Lindsay,http://lindsay.texas.gov/ +Texas,Denton County,Little Elm,http://www.littleelm.org +Texas,Lamb County,Littlefield,http://www.littlefieldtexas.org +Texas,Bexar County,Live Oak,http://www.liveoaktx.net/ +Texas,Brazoria County,Liverpool,http://cityofliverpooltexas.com +Texas,Polk County,Livingston,http://www.cityoflivingston-tx.com/ +Texas,Llano County,Llano,http://www.cityofllano.com/ +Texas,Caldwell County,Lockhart,http://www.lockhart-tx.org +Texas,Henderson County,Log Cabin,http://logcabin.texas.gov +Texas,Lampasas County,Lometa,http://www.lometatx.com +Texas,Morris County,Lone Star,https://www.lonestartx.net/ +Texas,Gregg County,Longview,http://www.longviewtexas.gov +Texas,McLennan County,Lorena,https://www.ci.lorena.tx.us/ +Texas,Crosby County,Lorenzo,http://www.cityoflorenzo.net/ +Texas,Cameron County,Los Fresnos,http://www.citylf.us +Texas,Collin County,Lowry Crossing,https://www.lowrycrossingtexas.org/ +Texas,Lubbock County,Lubbock,http://www.ci.lubbock.tx.us +Texas,Collin County,Lucas,http://www.lucastexas.us +Texas,Angelina County,Lufkin,http://cityoflufkin.com +Texas,Caldwell County,Luling,http://www.cityofluling.net +Texas,Hardin County,Lumberton,http://cityoflumberton.com +Texas,Willacy County,Lyford,https://www.lyfordtx.us/ +Texas,Atascosa County,Lytle,http://www.lytletx.org +Texas,Kaufman County,Mabank,http://www.cityofmabanktx.org +Texas,Madison County,Madisonville,https://madisonvilletexas.us/ +Texas,Montgomery County,Magnolia,http://www.cityofmagnolia.com/ +Texas,Henderson County,Malakoff,http://cityofmalakoff.net +Texas,Travis County,Manor,http://cityofmanor.org +Texas,Tarrant County,Mansfield,https://www.mansfieldtexas.gov +Texas,Brazoria County,Manvel,http://www.cityofmanvel.com +Texas,Burnet County,Marble Falls,http://ci.marble-falls.tx.us +Texas,Presidio County,Marfa,https://cityofmarfa.com/ +Texas,Guadalupe County,Marion,http://cityofmariontx.org +Texas,Denton County,Marlin,http://www.marlintexas.com/ +Texas,Harrison County,Marshall,http://www.marshalltexas.net +Texas,McLennan County,Mart,http://www.cityofmart.net +Texas,Caldwell County,Martindale,http://www.martindale.texas.gov/ +Texas,Mason County,Mason,http://www.mason.tx.citygovt.org/ +Texas,San Patricio County,Mathis,https://www.cityofmathis.com/ +Texas,Ellis County,Maypearl,http://ci.maypearl.tx.us +Texas,Hidalgo County,McAllen,http://www.mcallen.net +Texas,Upton County,McCamey,https://mccameycity.com/ +Texas,McLennan County,McGregor,http://cityofmcgregor.com +Texas,Collin County,McKinney,http://www.mckinneytexas.org +Texas,Rockwall County,McLendon-Chisholm,http://www.mclendon-chisholm.com/ +Texas,Burnet County,Meadowlakes,http://meadowlakestexas.org +Texas,Fort Bend County,Meadows Place,http://www.cityofmeadowsplace.org +Texas,Collin County,Melissa,http://cityofmelissa.com +Texas,Harris County,Mercedes,http://cityofmercedes.com +Texas,Bosque County,Meridian,https://www.meridiantexas.us/ +Texas,Taylor County,Merkel,http://merkeltexas.com/ +Texas,Dallas County,Mesquite,http://cityofmesquite.com +Texas,Limestone County,Mexia,https://cityofmexia.com/ +Texas,Midland County,Midland,http://www.midlandtexas.gov/ +Texas,Ellis County,Midlothian,http://midlothian.tx.us +Texas,Ellis County,Milford,http://cityofmilfordtx.com +Texas,Wood County,Mineola,http://www.Mineola.com +Texas,Palo Pinto County,Mineral Wells,http://www.mineralwellstx.gov/ +Texas,Hidalgo County,Mission,https://missiontexas.us/ +Texas,Fort Bend County,Missouri City,http://www.missouricitytx.gov +Texas,Ward County,Monahans,http://www.cityofmonahans.org/ +Texas,Chambers County,Mont Belvieu,http://www.montbelvieu.net +Texas,Montgomery County,Montgomery,http://www.montgomerytexas.gov +Texas,McLennan County,Moody,http://www.cityofmoody.net/ +Texas,Harris County,Morgan's Point,http://morganspoint-tx.com +Texas,Bell County,Morgan's Point Resort,http://www.morganspointresorttx.com +Texas,Lavaca County,Moulton,http://www.cityofmoulton.com +Texas,Titus County,Mount Pleasant,http://www.mpcity.net/ +Texas,Franklin County,Mount Vernon,http://www.comvtx.com +Texas,Cooke County,Muenster,https://cityofmuenstertx.org +Texas,Bailey County,Muleshoe,http://www.city-of-muleshoe.com/ +Texas,Knox County,Munday,http://www.mundaytexas.com +Texas,Galveston County,Murphy,http://www.murphytx.org +Texas,Nacogdoches County,Nacogdoches,http://www.ci.nacogdoches.tx.us/ +Texas,Morris County,Naples,http://city-of-naples-texas.com/ +Texas,Bowie County,Nash,http://nashtx.org +Texas,Harris County,Nassau Bay,http://www.nassaubay.com +Texas,Medina County,Natalia,http://cityofnatalia.com/ +Texas,Brazos County,Navasota,http://www.navasotatx.gov +Texas,Jefferson County,Nederland,http://www.ci.nederland.tx.us +Texas,Fort Bend County,Needville,http://cityofneedville.com +Texas,Collin County,Nevada,http://cityofnevadatx.org/ +Texas,Guadalupe County,New Berlin,http://www.newberlintx.org +Texas,Bowie County,New Boston,http://www.nbcity.org +Texas,Comal County,New Braunfels,https://newbraunfels.gov +Texas,Smith County,New Chapel Hill,https://tshaonline.org/handbook/online/articles/hrnhb +Texas,Lubbock County,New Deal,https://www.cityofnewdealtx.com/ +Texas,Wise County,New Fairview,https://newfairview.org/ +Texas,Lynn County,New Home,https://tshaonline.org/handbook/online/articles/hln09 +Texas,Collin County,New Hope,http://www.NewHopeTx.gov +Texas,Cherokee County,New Summerfield,https://www.newsummerfield.us/ +Texas,Wise County,Newark,http://newarktexas.com/ +Texas,Newton County,Newton,http://www.newtontexas.org/ +Texas,Hays County,Niederwald,http://www.cityofniederwald.org/ +Texas,Gonzales County,Nixon,https://nixon.texas.gov/ +Texas,Bell County,Nolanville,http://ci.nolanville.tx.us +Texas,Cameron County,North Richland Hills,https://www.nrhtx.com/ +Texas,Denton County,Northlake,http://town.northlake.tx.us +Texas,Ellis County,Oak Leaf,http://www.oakleaftexas.org +Texas,Denton County,Oak Point,http://www.oakpointtexas.com +Texas,Cooke County,Oak Ridge,https://www.townofoakridge.com/ +Texas,Montgomery County,Oak Ridge North,http://www.oakridgenorth.com +Texas,Leon County,Oakwood,http://www.cityofoakwood.tx.citygovt.org +Texas,San Patricio County,Odem,https://www.cityofodemtx.com/ +Texas,Ector County,Odessa,http://www.odessa-tx.gov/ +Texas,Chambers County,Old River-Winfree,http://cityofoldriverwinfree.com +Texas,Bexar County,Olmos Park,http://www.olmospark.org/ +Texas,Young County,Olney,http://www.olney.tx.citygovt.org/ +Texas,Polk County,Onalaska,http://cityofonalaska.us/ +Texas,Orange County,Orange,http://www.orangetexas.net/ +Texas,Fort Bend County,Orchard,http://orchardtexas.net +Texas,Rusk County,Overton,https://cityofoverton.com/ +Texas,Ellis County,Ovilla,https://www.cityofovilla.org/ +Texas,Matagorda County,Palacios,http://www.palaciostexas.com// +Texas,Anderson County,Palestine,http://www.cityofpalestinetx.com +Texas,Cameron County,Palm Valley,https://palmvalleytx.com/ +Texas,Ellis County,Palmer,http://www.ci.palmer.tx.us +Texas,Grayson County,Palmhurst,http://cityofpalmhursttx.com +Texas,Denton County,Palmview,http://cityofpalmview.com +Texas,Gray County,Pampa,http://www.cityofpampa.org +Texas,Carson County,Panhandle,http://www.panhandletx.govoffice2.com +Texas,Montgomery County,Panorama Village,https://www.panoramavillagetx.gov/ +Texas,Tarrant County,Pantego,http://www.townofpantego.com +Texas,Lamar County,Paris,http://www.paristexas.gov/ +Texas,Collin County,Parker,http://www.parkertexas.us +Texas,Harris County,Pasadena,http://www.pasadenatx.gov/ +Texas,Waller County,Pattison,http://pattisontexas.org/ +Texas,Montgomery County,Patton Village,http://www.pattonvillage.us/ +Texas,Houston County,Peñitas,http://www.cityofpenitas.com +Texas,Brazoria County,Pearland,http://www.pearlandtx.gov +Texas,Frio County,Pearsall,http://cityofpearsall.org +Texas,Ellis County,Pecan Hill,http://www.pecanhill.com +Texas,Reeves County,Pecos,http://www.pecostx.gov/ +Texas,Wharton County,Pelican Bay,http://cityofpelicanbay.com/ +Texas,Ochiltree County,Perryton,https://www.cityofperryton.com/ +Texas,Hale County,Petersburg,https://petersburgtx.com/ +Texas,Travis County,Pflugerville,http://www.pflugervilletx.gov/ +Texas,Gregg County,Pharr,http://www.pharr-tx.gov +Texas,Denton County,Pilot Point,http://www.cityofpilotpoint.org +Texas,Orange County,Pinehurst,http://www.cityofpinehursttexas.com/ +Texas,Harris County,Piney Point Village,http://www.cityofpineypoint.com/ +Texas,Camp County,Pittsburg,http://www.pittsburgtexas.com +Texas,Hale County,Plainview,http://plainviewtx.org +Texas,Collin County,Plano,http://plano.gov +Texas,Grimes County,Plantersville,https://cityofplantersville.net/ +Texas,Fort Bend County,Pleak,http://villageofpleak.com +Texas,Atascosa County,Pleasanton,http://www.pleasantontx.org +Texas,Liberty County,Plum Grove,http://cityofplumgrovetexas.com +Texas,Travis County,Point Venture,http://vopv.org/ +Texas,Nueces County,Port Aransas,http://www.cityofportaransas.org/ +Texas,Jefferson County,Port Arthur,http://PortArthur.net +Texas,Cameron County,Port Isabel,http://www.portisabel-texas.com/ +Texas,Calhoun County,Port Lavaca,http://www.portlavaca.org +Texas,Jefferson County,Port Neches,http://ci.port-neches.tx.us +Texas,San Patricio County,Portland,http://www.portlandtx.com +Texas,Garza County,Post,http://www.cityofposttexas.com/ +Texas,Kaufman County,Post Oak Bend City,http://www.postoakbend.org +Texas,Atascosa County,Poteet,https://www.poteettx.org/ +Texas,Wilson County,Poth,http://www.cityofpoth.org/ +Texas,Grayson County,Pottsboro,http://www.pottsboro.govoffice2.com +Texas,Waller County,Prairie View,http://www.prairieviewtexas.gov/ +Texas,Presidio County,Presidio,http://presidiotx.us/ +Texas,Cameron County,Primera,https://cityofprimera.com/ +Texas,Collin County,Princeton,http://princetontx.gov +Texas,Wood County,Progreso,https://cityofprogreso.com/ +Texas,Collin County,Prosper,http://www.prospertx.gov +Texas,Denton County,Providence Village,https://www.pvtx.gov +Texas,Hardeman County,Quanah,http://www.quanah.tx.citygovt.org +Texas,Cass County,Queen City,http://www.queencitytx.org +Texas,Hunt County,Quinlan,http://www.cityofquinlan.net/ +Texas,Brazoria County,Quintana,http://www.quintanatx.org +Texas,Wood County,Quitman,https://quitmantx.org/ +Texas,Cameron County,Rancho Viejo,http://www.ranchoviejotexas.com/ +Texas,Lubbock County,Ransom Canyon,http://www.ci.ransom-canyon.tx.us +Texas,Willacy County,Raymondville,https://raymondvilletx.us/ +Texas,Ellis County,Red Oak,http://www.redoaktx.org +Texas,Bowie County,Redwater,https://redwatertexas.com/ +Texas,Lamar County,Reno,http://www.renotexas.us/ +Texas,Parker County,Reno,http://www.renotx.gov +Texas,Wise County,Rhome,http://www.cityofrhome.com/ +Texas,Navarro County,Rice,http://www.ricetx.com/ +Texas,Dallas County,Richardson,https://www.cor.net +Texas,Liberty County,Richland Hills,http://www.richlandhills.com/ +Texas,Fort Bend County,Richmond,http://richmondtx.gov +Texas,Brazoria County,Richwood,http://www.richwoodtx.gov +Texas,Starr County,Rio Grande City,http://www.cityofrgc.com/ +Texas,Angelina County,Rio Hondo,http://www.riohondo.us +Texas,Eastland County,Rising Star,http://www.risingstartexas.net +Texas,Wilson County,River Oaks,http://www.riveroakstx.com/ +Texas,Denton County,Roanoke,http://www.roanoketexas.com +Texas,McLennan County,Robinson,https://www.robinsontexas.org/ +Texas,Nueces County,Robstown,https://www.cityofrobstown.com/ +Texas,Milam County,Rockdale,http://www.rockdalecityhall.com/ +Texas,Aransas County,Rockport,http://www.cityofrockport.com +Texas,Rockwall County,Rockwall,http://www.rockwall.com/ +Texas,Bell County,Rogers,https://www.cityofrogerstx.gov/index.php +Texas,Travis County,Rollingwood,https://rollingwoodtx.gov/ +Texas,Starr County,Roma,https://www.cityofroma.net/ +Texas,Montgomery County,Roman Forest,https://www.rftx.org/ +Texas,Hockley County,Ropesville,https://cityofropesville.com/ +Texas,Nolan County,Roscoe,http://roscoetx.com/ +Texas,Hardin County,Rose Hill Acres,http://rosehillacres.org/ +Texas,Fisher County,Rosebud,http://www.rosebudtexas.us +Texas,Fort Bend County,Rosenberg,http://www.rosenbergtx.gov +Texas,Williamson County,Round Rock,http://www.roundrocktexas.gov/ +Texas,Dallas County,Rowlett,http://www.ci.rowlett.tx.us/ +Texas,Rockwall County,Royse City,http://www.roysecity.com +Texas,Wise County,Runaway Bay,https://runawaybaytexas.com/ +Texas,Cherokee County,Rusk,https://www.rusktx.org/ +Texas,Uvalde County,Sabinal,https://www.cityofsabinal.org +Texas,Collin County,Sachse,http://www.cityofsachse.com +Texas,Lamar County,Saginaw,http://www.ci.saginaw.tx.us/ +Texas,Bell County,Salado,https://www.saladotx.gov/ +Texas,Tom Green County,San Angelo,http://www.cosatx.us/ +Texas,Bexar County,San Antonio,http://www.sanantonio.gov/ +Texas,San Augustine County,San Augustine,https://www.cityofsanaugustinetx.gov/ +Texas,Cameron County,San Benito,http://www.cityofsanbenito.com +Texas,El Paso County,San Elizario,http://cityofsanelizario.com/ +Texas,Austin County,San Felipe,http://townofsanfelipe.net +Texas,Harris County,San Juan,http://www.cityofsanjuantexas.com +Texas,Travis County,San Leanna,http://www.sanleannatx.com/ +Texas,Hays County,San Marcos,http://www.sanmarcostx.gov +Texas,San Saba County,San Saba,http://www.sansabatexas.com/ +Texas,Bexar County,Sandy Oaks,http://www.cityofsandyoaks.com/ +Texas,Denton County,Sanger,http://www.sangertexas.org +Texas,Milam County,Sansom Park,http://www.sansompark.org/ +Texas,Coleman County,Santa Anna,http://www.santaannatex.org +Texas,Guadalupe County,Santa Clara,http://www.cisantaclaratx.us +Texas,Galveston County,Santa Fe,http://ci.santa-fe.tx.us/ +Texas,Fannin County,Savoy,http://cityofsavoy.org +Texas,Guadalupe County,Schertz,http://schertz.com +Texas,Fayette County,Schulenburg,http://schulenburgtx.org +Texas,Kaufman County,Scurry,https://tshaonline.org/handbook/online/articles/hls33 +Texas,Chambers County,Seabrook,http://www.seabrooktx.gov +Texas,Calhoun County,Seadrift,https://seadrifttx.org/ +Texas,Dallas County,Seagoville,http://www.seagoville.us/ +Texas,Gaines County,Seagraves,http://seagravestx.us/ +Texas,Austin County,Sealy,http://www.ci.sealy.tx.us +Texas,Guadalupe County,Seguin,http://www.seguintexas.gov +Texas,Bexar County,Selma,http://ci.selma.tx.us +Texas,Henderson County,Seven Points,http://www.sevenpointstx.com +Texas,Baylor County,Seymour,http://www.cityofseymour.org +Texas,Denton County,Shady Shores,http://www.shady-shores.com/ +Texas,Lubbock County,Shallowater,http://www.shallowatertx.us/ +Texas,Wheeler County,Shamrock,http://www.shamrocktexas.net +Texas,Bexar County,Shavano Park,http://shavanopark.org/ +Texas,Montgomery County,Shenandoah,https://www.shenandoahtx.us/ +Texas,San Jacinto County,Shepherd,https://www.shepherdtx.org/ +Texas,Grayson County,Sherman,http://www.cityofsherman.com +Texas,Lavaca County,Shiner,http://www.shinertexas.gov +Texas,Chambers County,Shoreacres,http://www.cityofshoreacres.us +Texas,Hardin County,Silsbee,http://www.cityofsilsbee.com +Texas,Fort Bend County,Simonton,http://simontontexas.org +Texas,San Patricio County,Sinton,https://www.sintontexas.org/ +Texas,Carson County,Skellytown,http://www.skellytowntexas.com +Texas,Lubbock County,Slaton,https://cityofslaton.com/ +Texas,Gonzales County,Smiley,https://smileytx.com/ +Texas,Bastrop County,Smithville,http://www.ci.smithville.tx.us +Texas,Hockley County,Smyer,https://www.smyer-isd.org +Texas,Scurry County,Snyder,http://ci.snyder.tx.us/ +Texas,El Paso County,Socorro,http://www.ci.socorro.tx.us +Texas,Bexar County,Somerset,https://cityofsomerset.org/ +Texas,Burleson County,Somerville,http://somervilletx.gov/ +Texas,Sutton County,Sonora,http://www.sonoratx-chamber.com/ +Texas,Hardin County,Sour Lake,https://www.cityofsourlake.com/ +Texas,Harris County,South Houston,http://www.southhoustontx.org +Texas,Cameron County,South Padre Island,http://myspi.org +Texas,Tarrant County,Southlake,https://www.cityofsouthlake.com/ +Texas,Grayson County,Southmayd,http://southmaydtx.com +Texas,Harris County,Southside Place,http://www.ci.southside-place.tx.us/ +Texas,Montgomery County,Splendora,https://cityofsplendora.org/ +Texas,Comal County,Spring Branch,http://cityofspringbranch.org/ +Texas,Harris County,Spring Valley Village,http://www.springvalleytx.com +Texas,Parker County,Springtown,https://cityofspringtown.com/ +Texas,Bexar County,St. Hedwig,http://sainthedwigcity.com/ +Texas,Collin County,St. Paul,http://www.stpaultexas.us +Texas,Fort Bend County,Stafford,http://www.staffordtx.gov +Texas,Jones County,Stamford,http://www.stamfordtx.org +Texas,Martin County,Stanton,http://www.cityofstantontx.com/ +Texas,Guadalupe County,Staples,http://www.cityofstaples.com +Texas,Erath County,Stephenville,http://www.stephenvilletx.gov/ +Texas,Sterling County,Sterling City,http://www.sterlingcitytexas.com +Texas,Hutchinson County,Stinnett,http://www.cityofstinnett.com/ +Texas,Wilson County,Stockdale,http://stockdaletx.org +Texas,Sherman County,Stratford,http://www.stratfordtx.com/ +Texas,Palo Pinto County,Strawn,http://www.StrawnTexas.net +Texas,Lamb County,Sudan,http://www.cityofsudantx.com +Texas,Fort Bend County,Sugar Land,http://www.sugarlandtx.gov/ +Texas,Coleman County,Sullivan City,http://www.sullivancity.org/ +Texas,Hopkins County,Sulphur Springs,http://www.sulphurspringstx.org +Texas,Dallas County,Sunnyvale,http://www.townofsunnyvale.org/ +Texas,Llano County,Sunrise Beach Village,http://cityofsunrisebeach.org/ +Texas,Travis County,Sunset Valley,http://www.sunsetvalley.org/ +Texas,Brazoria County,Surfside Beach,http://www.surfsidetx.org +Texas,Brazoria County,Sweeny,http://www.sweenytx.gov +Texas,Nolan County,Sweetwater,http://www.cityofsweetwatertx.com/ +Texas,San Patricio County,Taft,https://www.cityoftaft.us/ +Texas,Lynn County,Tahoka,http://www.tahoka-texas.com/ +Texas,Kaufman County,Talty,http://www.taltytexas.com +Texas,Rusk County,Tatum,https://tatumtexas.com/ +Texas,Williamson County,Taylor,http://www.ci.taylor.tx.us/ +Texas,Harris County,Taylor Lake Village,https://www.taylorlakevillage.us/ +Texas,Freestone County,Teague,http://www.cityofteaguetx.com +Texas,Limestone County,Tehuacana,http://www.tehuacana.com +Texas,Bell County,Temple,http://www.templetx.gov +Texas,Kaufman County,Terrell,http://cityofterrell.org +Texas,Bexar County,Terrell Hills,http://terrell-hills.com +Texas,Bowie County,Texarkana,http://ci.texarkana.tx.us/ +Texas,Galveston County,Texas City,http://www.texas-city-tx.org/ +Texas,Denton County,The Colony,http://www.thecolonytx.gov +Texas,Travis County,The Hills,http://www.villageofthehills.org +Texas,Limestone County,Thornton,http://cityofthorntontx.com +Texas,Williamson County,Thrall,http://www.thrallisd.com +Texas,Live Oak County,Three Rivers,http://www.gothreerivers.com +Texas,Throckmorton County,Throckmorton,http://www.throckmortontx.org/index.html +Texas,Galveston County,Tiki Island,http://www.villageoftikiisland.org/ +Texas,Shelby County,Timpson,http://www.cityoftimpson.com +Texas,Grayson County,Tioga,https://www.tiogatx.gov/ +Texas,Hood County,Tolar,http://www.cityoftolar.com +Texas,Grayson County,Tom Bean,http://www.tombean.net +Texas,Harris County,Tomball,http://www.ci.tomball.tx.us +Texas,Henderson County,Tool,http://tooltexas.org +Texas,Henderson County,Trinidad,http://www.trinidadtexas.com +Texas,Trinity County,Trinity,http://www.cityoftrinity.com +Texas,Denton County,Trophy Club,http://www.trophyclub.org +Texas,Smith County,Troup,https://trouptx.com/ +Texas,Bell County,Troy,https://www.cityoftroy.us/ +Texas,Swisher County,Tulia,http://www.tuliatexas.org/ +Texas,Taylor County,Tye,http://www.cityoftye.org/ +Texas,Smith County,Tyler,http://www.cityoftyler.org +Texas,Hays County,Uhland,http://www.cityofuhland.com +Texas,Harrison County,Uncertain,http://www.cityofuncertain.com +Texas,Bexar County,Universal City,http://www.universalcitytexas.com/ +Texas,Dallas County,University Park,https://www.uptexas.org/ +Texas,Uvalde County,Uvalde,https://www.uvaldetx.gov/ +Texas,Bosque County,Valley Mills,http://www.vmtx.us +Texas,Cooke County,Valley View,http://www.cityofvv.com +Texas,Van Zandt County,Van,http://www.vantexas.org/ +Texas,Grayson County,Van Alstyne,http://www.cityofvanalstyne.us +Texas,Culberson County,Van Horn,http://www.vanhorntexas.org/ +Texas,Oldham County,Vega,http://www.oldhamcofc.org/ +Texas,Johnson County,Venus,http://cityofvenus.org +Texas,Wilbarger County,Vernon,http://www.vernontx.gov/faq.aspx +Texas,Victoria County,Victoria,https://www.victoriatx.gov/ +Texas,Orange County,Vidor,https://cityofvidor.com/ +Texas,El Paso County,Vinton,http://www.vintontx.govoffice2.com +Texas,Travis County,Volente,http://www.villageofvolente-tx.gov +Texas,McLennan County,Waco,http://www.waco-texas.com/ +Texas,Gonzales County,Waelder,http://www.cityofwaelder.org/ +Texas,Bowie County,Wake Village,http://wakevillagetx.com +Texas,Waller County,Waller,http://www.wallertexas.com +Texas,Austin County,Wallis,http://www.wallistexas.org +Texas,Harrison County,Waskom,http://cityofwaskom.com +Texas,Collin County,Watauga,http://www.ci.watauga.tx.us/ +Texas,Ellis County,Waxahachie,http://www.waxahachie.com +Texas,Parker County,Weatherford,http://www.weatherfordtx.gov +Texas,Travis County,Webberville,http://www.webberville.org/village_commission/ +Texas,Harris County,Webster,http://www.cityofwebster.com +Texas,Colorado County,Weimar,http://weimartexas.org +Texas,Hidalgo County,Weslaco,http://www.weslacotx.gov +Texas,McLennan County,West,http://www.cityofwest.com/ +Texas,Brazoria County,West Columbia,http://westcolumbiatx.org +Texas,Travis County,West Lake Hills,http://www.westlakehills.org/ +Texas,Orange County,West Orange,http://www.cityofwestorange.com/ +Texas,Hunt County,West Tawakoni,http://www.cityofwesttawakoni.com +Texas,Harris County,West University Place,http://westutx.gov/ +Texas,Tarrant County,Westlake,http://www.westlake-tx.org +Texas,Collin County,Weston,http://www.westontexas.com +Texas,Fort Bend County,Weston Lakes,http://cityofwestonlakes-tx.gov +Texas,Tarrant County,Westover Hills,http://westoverhills.us/ +Texas,Grayson County,Westworth Village,http://www.cityofwestworth.com/ +Texas,Wharton County,Wharton,http://www.cityofwharton.com +Texas,Wheeler County,Wheeler,http://wheelertexas.org/ +Texas,Carson County,White Deer,http://www.whitedeer.us +Texas,Gregg County,White Oak,http://www.cityofwhiteoak.com/ +Texas,Washington County,White Settlement,http://www.wstx.us/ +Texas,Smith County,Whitehouse,http://www.whitehousetx.org +Texas,Grayson County,Whitesboro,http://www.whitesborotexas.com +Texas,Grayson County,Whitewright,http://www.whitewright.com +Texas,Hill County,Whitney,http://cityofwhitneytx.org +Texas,Wichita County,Wichita Falls,http://www.wichitafallstx.gov +Texas,Montgomery County,Willis,https://www.ci.willis.tx.us/ +Texas,Parker County,Willow Park,http://www.willowpark.org +Texas,Van Zandt County,Wills Point,https://willspointtx.org/ +Texas,Dallas County,Wilmer,http://www.cityofwilmer.net/ +Texas,Lynn County,Wilson,http://www.tshaonline.org/handbook/online/articles/hlw37 +Texas,Hays County,Wimberley,http://www.cityofwimberley.com +Texas,Bexar County,Windcrest,http://www.ci.windcrest.tx.us +Texas,Wood County,Winnsboro,http://winnsborotexas.com +Texas,Smith County,Winona,http://www.winonatexas.com/ +Texas,Runnels County,Winters,http://www.winters-texas.us +Texas,Hunt County,Wolfe City,http://wolfecitytx.org +Texas,Lubbock County,Wolfforth,http://www.wolfforthtx.us +Texas,Montgomery County,Woodbranch,https://woodbranchtx.us/ +Texas,Hays County,Woodcreek,http://woodcreektx.gov +Texas,Refugio County,Woodsboro,https://www.woodsborotx.net/ +Texas,Tyler County,Woodville,http://www.woodville-tx.gov/ +Texas,McLennan County,Woodway,https://www.woodwaytexas.gov +Texas,Collin County,Wylie,http://www.ci.wylie.tx.us/index.php +Texas,Lavaca County,Yoakum,http://www.cityofyoakum.org +Texas,DeWitt County,Yorktown,http://www.yorktowntx.com +Utah,Utah County,Alpine,http://www.alpinecity.org +Utah,Salt Lake County,Alta,http://www.townofalta.com/ +Utah,Cache County,Amalga,http://www.amalgatown.com/ +Utah,Utah County,American Fork,https://www.americanfork.gov/ +Utah,Washington County,Apple Valley,http://www.applevalleyut.org/ +Utah,Sevier County,Aurora,http://www.auroracity.org/ +Utah,Uintah County,Ballard,http://www.ballardcity.org +Utah,Beaver County,Beaver,http://www.beaverutah.net +Utah,San Juan County,Blanding,http://www.visitblanding.com/ +Utah,San Juan County,Bluff,http://townofbluff.org/ +Utah,Salt Lake County,Bluffdale,http://www.bluffdale.com/ +Utah,Davis County,Bountiful,http://bountifulutah.gov +Utah,Box Elder County,Brigham City,http://brighamcity.utah.gov +Utah,Garfield County,Bryce Canyon City,http://www.brycecanyoncityut.gov/ +Utah,Emery County,Castle Dale,http://www.emerycounty.com/castledale/castledale.htm +Utah,Grand County,Castle Valley,http://www.castlevalleyutah.com +Utah,Iron County,Cedar City,http://www.cedarcity.org +Utah,Utah County,Cedar Fort,http://www.townofcedarfort.com +Utah,Utah County,Cedar Hills,http://www.cedarhills.org +Utah,Sanpete County,Centerfield,https://www.centerfieldcity.org/ +Utah,Davis County,Centerville,http://centervilleut.net +Utah,Wasatch County,Charleston,http://www.charlestonutah.org/ +Utah,Piute County,Circleville,http://www.circlevilleutah.org/ +Utah,Davis County,Clearfield,https://clearfield.city/ +Utah,Davis County,Clinton,http://clintoncity.net +Utah,Summit County,Coalville,http://www.coalvillecity.org/ +Utah,Salt Lake County,Copperton,https://coppertonutah.org +Utah,Box Elder County,Corinne,http://corinnecity.com +Utah,Salt Lake County,Cottonwood Heights,http://www.cottonwoodheights.utah.gov/ +Utah,Wasatch County,Daniel,http://danielutah.org/ +Utah,Millard County,Delta,http://www.delta.utah.gov/ +Utah,Box Elder County,Deweyville,http://www.townofdeweyville.org/ +Utah,Salt Lake County,Draper,https://www.draperutah.gov +Utah,Duchesne County,Duchesne,http://www.duchesnecity.com +Utah,Daggett County,Dutch John,https://dutchjohn.org/ +Utah,Utah County,Eagle Mountain,http://www.emcity.org +Utah,Utah County,Elk Ridge,http://www.elkridgecity.org +Utah,Box Elder County,Elwood,http://www.elwoodtown.com +Utah,Emery County,Emery,http://www.emerycounty.com/emery/emery.htm +Utah,Emery County,Emigration Canyon,https://www.ecmetro.org/ +Utah,Iron County,Enoch,https://www.cityofenoch.org/ +Utah,Washington County,Enterprise,https://enterpriseutah.org/ +Utah,Sanpete County,Ephraim,http://www.ephraimcity.org/ +Utah,Garfield County,Escalante,http://www.escalantecity-utah.com +Utah,Juab County,Eureka,http://www.eurekautah.org +Utah,Sanpete County,Fairview,http://fairviewcity.com/ +Utah,Davis County,Farmington,http://www.farmington.utah.gov +Utah,Weber County,Farr West,http://farrwestcity.net/ +Utah,Seneca County,Fayette,http://townoffayetteny.org/ +Utah,Emery County,Ferron,http://www.ferroncity.org +Utah,Millard County,Fillmore,http://www.fillmorecity.org +Utah,Sanpete County,Fountain Green,http://fountaingreencity.com/ +Utah,Davis County,Fruit Heights,http://www.fruitheightscity.com +Utah,Box Elder County,Garland,http://www.garlandutah.org +Utah,Utah County,Genola,http://genola.org +Utah,Litchfield County,Goshen,http://www.goshenct.gov +Utah,Tooele County,Grantsville,http://grantsvilleut.gov/gcc/ +Utah,Emery County,Green River,http://greenriverutah.com +Utah,Sanpete County,Gunnison,http://www.gunnisoncity.org/ +Utah,Wayne County,Hanksville,http://www.hanksvilleutah.gov +Utah,Butler County,Harmony,http://www.harmony-pa.us +Utah,Weber County,Harrisville,http://www.cityofharrisville.com/ +Utah,Wasatch County,Heber City,https://www.heberut.gov/ +Utah,Carbon County,Helper,http://www.helpercity.net +Utah,Salt Lake County,Herriman,http://www.herriman.org +Utah,Utah County,Highland,http://www.highlandcity.org +Utah,Washington County,Hildale,http://hildalecity.com/ +Utah,Salt Lake County,Holladay,http://www.cityofholladay.com/ +Utah,Box Elder County,Honeyville,http://www.honeyvillecity.org +Utah,Weber County,Hooper,http://www.hoopercity.com +Utah,Emery County,Huntington,https://www.huntingtonut.com/ +Utah,Weber County,Huntsville,http://www.huntsvilletown.com/ +Utah,Washington County,Hurricane,http://www.cityofhurricane.com/ +Utah,Cache County,Hyde Park,http://hydepark.utahlinks.org +Utah,Cache County,Hyrum,http://hyrumcity.org +Utah,Wasatch County,Independence,http://www.independenceut.org +Utah,Wasatch County,Interlaken,http://www.town-of-interlaken.com +Utah,Washington County,Ivins,http://www.ivins.com/ +Utah,Sevier County,Joseph,http://josephtown.com +Utah,Summit County,Kamas,https://kamascityut.gov/ +Utah,Kane County,Kanab,http://kanab.utah.gov +Utah,Iron County,Kanarraville,http://www.kanarraville.org +Utah,Davis County,Kaysville,http://www.kaysvillecity.com +Utah,Salt Lake County,Kearns,https://www.kmtutah.org/ +Utah,Washington County,La Verkin,http://www.laverkin.org/ +Utah,Tooele County,Lake Point,https://lakepoint.gov/ +Utah,Rich County,Laketown,http://www.laketownutah.org/ +Utah,Davis County,Layton,http://laytoncity.org +Utah,Utah County,Lehi,https://www.lehi-ut.gov +Utah,Juab County,Levan,http://levantown.org +Utah,Cache County,Lewiston,http://lewiston-ut.org/ +Utah,Utah County,Lindon,http://www.lindoncity.org +Utah,Cache County,Logan,http://www.loganutah.org +Utah,Millard County,Lynndyl,http://lynndyl.utah.gov +Utah,Salt Lake County,Magna,https://www.magnametrotownship.org/ +Utah,Daggett County,Manila,http://www.manilautah.com +Utah,Sanpete County,Manti,http://manticity.com/ +Utah,Mantua Township,Mantua,https://www.mantuautah.org/ +Utah,Portage County,Mantua,http://mantuavillage.com/ +Utah,Utah County,Mapleton,http://www.mapleton.org +Utah,Weber County,Marriott-Slaterville,http://www.marriott-slaterville.org/ +Utah,Cache County,Mendon,http://mendoncity.org/ +Utah,Worcester County,Mendon,http://mendonma.gov/ +Utah,Salt Lake County,Midvale,http://www.midvalecity.org/ +Utah,Wasatch County,Midway,http://www.midwaycityut.org/ +Utah,Beaver County,Milford,http://www.milfordcityutah.com +Utah,Salt Lake County,Millcreek,https://millcreek.us/ +Utah,Cache County,Millville,http://millvillecity.org +Utah,Grand County,Moab,http://moabcity.org +Utah,Juab County,Mona,http://www.monacity.org +Utah,Sevier County,Monroe,http://www.littlegreenvalley.com +Utah,San Juan County,Monticello,http://www.monticelloutah.org/ +Utah,Morgan County,Morgan,https://morgancityut.org/ +Utah,Sanpete County,Moroni,https://moronicity.org/ +Utah,Sanpete County,Mount Pleasant,http://www.mtpleasantcity.com/ +Utah,Salt Lake County,Murray,http://www.murray.utah.gov/ +Utah,Duchesne County,Myton,http://www.mytoncity.com +Utah,Uintah County,Naples,http://naplescityut.gov +Utah,Juab County,Nephi,http://nephi.utah.gov +Utah,Washington County,New Harmony,http://newharmonyutah.org/ +Utah,Cache County,Nibley,https://www.nibleycity.com/ +Utah,Cache County,North Logan,http://www.ci.north-logan.ut.us/ +Utah,Weber County,North Ogden,https://www.northogdencity.com/ +Utah,Davis County,North Salt Lake,http://nslcity.org +Utah,Summit County,Oakley,https://www.oakleycity.com/ +Utah,Weber County,Ogden,http://ogdencity.com/ +Utah,Emery County,Orangeville,https://orangevillecity.org/ +Utah,Kane County,Orderville,https://www.townoforderville.com/ +Utah,Utah County,Orem,http://www.orem.org +Utah,Garfield County,Panguitch,http://panguitch.com +Utah,Cache County,Paradise,http://paradise.utah.gov +Utah,Summit County,Park City,http://www.parkcity.org/ +Utah,Iron County,Parowan,http://parowan.org +Utah,Utah County,Payson,http://www.paysonutah.org +Utah,Box Elder County,Perry,http://www.perrycity.org +Utah,Weber County,Plain City,http://plaincityutah.org +Utah,Utah County,Pleasant Grove,http://www.plgrove.org/ +Utah,Weber County,Pleasant View,http://www.pleasantviewcity.com +Utah,Portage County,Portage,http://www.citlink.net/~portagetown/ +Utah,Carbon County,Price,http://www.pricecityutah.com +Utah,Cache County,Providence,http://www.providencecity.com +Utah,Utah County,Provo,http://www.provo.org/ +Utah,Sevier County,Richfield,http://www.richfieldcity.com +Utah,Cache County,Richmond,http://richmondutah.org +Utah,Cache County,River Heights,https://www.riverheights.org/ +Utah,Weber County,Riverdale,http://www.riverdalecity.com/ +Utah,Salt Lake County,Riverton,http://rivertonutah.gov +Utah,Juab County,Rocky Ridge,http://www.rockyridgetown.com +Utah,Duchesne County,Roosevelt,http://www.rooseveltcity.com +Utah,Weber County,Roy,https://www.royutah.org +Utah,Rush Lake (Tooele County,Rush Valley,http://www.rushvalleytown.com/ +Utah,Utah County,Salem,http://www.salemcity.org +Utah,Essex County,Salem,http://www.salem.com +Utah,Sevier County,Salina,http://www.salinacity.org/ +Utah,Salt Lake County,Sandy,http://www.sandy.utah.gov/ +Utah,Washington County,Santa Clara,https://sccity.org/ +Utah,Utah County,Santaquin,http://www.santaquin.org +Utah,Utah County,Saratoga Springs,http://www.saratogaspringscity.com +Utah,Saratoga County,Saratoga Springs,http://www.saratoga-springs.org/ +Utah,Carbon County,Scofield,http://www.utah.com/stateparks/scofield.htm +Utah,Cache County,Smithfield,http://www.smithfieldcity.org +Utah,Salt Lake County,South Jordan,https://www.sjc.utah.gov +Utah,Weber County,South Ogden,https://www.southogdencity.com/ +Utah,Salt Lake County,South Salt Lake,https://sslc.gov/ +Utah,Davis County,South Weber,http://www.southwebercity.com +Utah,Utah County,Spanish Fork,http://www.spanishfork.org +Utah,Utah County,Springville,http://www.springville.org +Utah,Washington County,St. George,https://www.sgcity.org/ +Utah,San Joaquin County,Stockton,http://www.stocktongov.com +Utah,Davis County,Sunset,http://sunset-ut.com +Utah,Davis County,Syracuse,http://www.syracuseut.com +Utah,Onondaga County,Syracuse,https://www.syr.gov/ +Utah,Salt Lake County,Taylorsville,http://www.taylorsvilleut.gov/ +Utah,Tooele County,Tooele,http://tooelecity.org/ +Utah,Washington County,Toquerville,https://www.toquerville.org/ +Utah,Wayne County,Torrey,http://www.torreyutah.gov +Utah,Tazewell County,Tremont,https://www.tremontil.com/ +Utah,Box Elder County,Tremonton,http://www.tremontoncity.com +Utah,Mercer County,Trenton,https://www.trentonnj.org/ +Utah,Garfield County,Tropic,http://www.townoftropicut.gov +Utah,Weber County,Uintah,http://www.uintahcity.com/ +Utah,Uintah County,Vernal,http://www.vernalcity.org/ +Utah,Utah County,Vineyard,http://www.vineyard.utah.gov +Utah,Washington County,Virgin,http://virgin.utah.gov +Utah,Sanpete County,Wales,https://www.walesutah.org/ +Utah,Washington County,Washington,https://www.washingtoncity.org/ +Utah,Weber County,Washington Terrace,http://www.wt.govoffice.com +Utah,Carbon County,Wellington,http://wellingtonutah.us +Utah,Cache County,Wellsville,http://www.wellsvillecity.com +Utah,Tooele County,Wendover,http://wendovercityutah.com/ +Utah,Davis County,West Bountiful,http://wbcity.org +Utah,Weber County,West Haven,http://www.westhavencity.com/ +Utah,Salt Lake County,West Jordan,http://www.westjordan.utah.gov +Utah,Davis County,West Point,http://westpointcity.org +Utah,Salt Lake County,West Valley City,http://www.wvc-ut.gov/ +Utah,Salt Lake County,White City,https://www.whitecity-ut.org/ +Utah,Box Elder County,Willard,http://www.willardcity.com +Utah,Utah County,Woodland Hills,http://woodlandhills-ut.gov +Utah,Davis County,Woods Cross,http://www.woodscross.com +Vermont,Addison County,Addison,https://www.addisonvt.net/ +Vermont,Grand Isle County,Alburgh,http://alburghvt.org +Vermont,Grand Isle County,Alburgh (village),http://alburghvt.org/ +Vermont,Bennington County,Arlington,http://www.arlingtonvt.org +Vermont,Franklin County,Bakersfield,http://townofbakersfield.org +Vermont,Caledonia County,Barnet,http://www.barnetvermont.org +Vermont,Washington County,Barre (city),http://www.barrecity.org +Vermont,Washington County,Barre (town),http://www.barretown.org +Vermont,Windham County,Bellows Falls (village),https://www.rockinghamvt.org/ +Vermont,Bennington County,Bennington,http://www.townofbennington.org +Vermont,Rutland County,Benson,http://www.benson-vt.com +Vermont,Washington County,Berlin,http://www.berlinvt.org +Vermont,Windsor County,Bethel,http://bethelvt.govoffice3.com +Vermont,Chittenden County,Bolton,http://boltonvt.com +Vermont,Orange County,Bradford,http://www.bradford-vt.us/ +Vermont,Orange County,Braintree,http://www.braintreevt.com/ +Vermont,Rutland County,Brandon,http://www.town.brandon.vt.us +Vermont,Windham County,Brattleboro,http://www.brattleboro.org/ +Vermont,Essex County,Brighton,https://brightonvt.org +Vermont,Addison County,Bristol,http://bristolvt.org +Vermont,Orange County,Brookfield,http://www.brookfieldvt.org/ +Vermont,Windham County,Brookline,http://www.brooklinevt.com/ +Vermont,Caledonia County,Burke,http://www.burkevermont.org +Vermont,Chittenden County,Burlington,http://www.BurlingtonVT.gov +Vermont,Washington County,Cabot,http://www.cabotvt.us +Vermont,Washington County,Calais,http://www.calaisvermont.gov +Vermont,Lamoille County,Cambridge,http://www.cambridge.vermont.gov +Vermont,Essex County,Canaan,http://www.canaan-vt.org +Vermont,Rutland County,Castleton,http://castletonvermont.org/ +Vermont,Chittenden County,Charlotte,http://www.charlottevt.org +Vermont,Orange County,Chelsea,http://www.chelseavt.org +Vermont,Windsor County,Chester,http://chestervt.gov +Vermont,Chittenden County,Colchester,http://www.colchestervt.gov +Vermont,Essex County,Concord,http://www.concordvt.us +Vermont,Addison County,Cornwall,http://cornwallvt.com +Vermont,Orleans County,Craftsbury,http://www.townofcraftsbury.com +Vermont,Caledonia County,Danville,http://www.danvillevermont.org +Vermont,Bennington County,Dorset,http://dorsetvt.org +Vermont,Windham County,Dover,https://www.doververmont.com/ +Vermont,Washington County,Duxbury,http://www.duxburyvermont.org +Vermont,Lamoille County,Eden,http://www.edenvt.org/ +Vermont,Lamoille County,Elmore,http://www.elmorevt.org +Vermont,Franklin County,Enosburg Falls (village),http://villageofenosburgfalls.org +Vermont,Franklin County,Enosburgh,http://www.enosburghvermont.org +Vermont,Chittenden County,Essex,https://www.essexvt.org/ +Vermont,Chittenden County,Essex Junction,http://www.essexjunction.org +Vermont,Rutland County,Fair Haven,http://www.fairhavenvt.org/ +Vermont,Franklin County,Fairfax,http://www.fairfax-vt.gov +Vermont,Franklin County,Fairfield,http://fairfieldvermont.us +Vermont,Orange County,Fairlee,http://www.fairleevt.org/ +Vermont,Washington County,Fayston,http://www.faystonvt.com +Vermont,Addison County,Ferrisburgh,http://www.ferrisburghvt.org +Vermont,Franklin County,Franklin,https://www.franklinvermont.org/ +Vermont,Franklin County,Georgia,http://www.townofgeorgia.com +Vermont,Addison County,Goshen,http://goshenvt.org +Vermont,Grand Isle County,Grand Isle,http://www.grandislevt.org +Vermont,Addison County,Granville,http://www.granvillevermont.org +Vermont,Caledonia County,Groton,http://www.grotonvt.com +Vermont,Essex County,Guildhall,http://www.guildhallvt.org +Vermont,Addison County,Hancock,https://www.hancockvt.org/ +Vermont,Caledonia County,Hardwick,http://hardwickvt.org +Vermont,Windsor County,Hartford,http://www.hartford-vt.org +Vermont,Franklin County,Highgate,http://highgatevt.org +Vermont,Chittenden County,Hinesburg,http://www.hinesburg.org +Vermont,Chittenden County,Huntington,http://huntingtonvt.org +Vermont,Lamoille County,Hyde Park (town),http://hydeparkvt.com +Vermont,Lamoille County,Hyde Park (village),http://www.villageofhydepark.com +Vermont,Grand Isle County,Isle La Motte,http://islelamotte.us +Vermont,Chittenden County,Jericho,http://www.jerichovt.org +Vermont,Lamoille County,Johnson,http://www.townofjohnson.com +Vermont,Rutland County,Killington,http://www.killingtontown.com +Vermont,Addison County,Leicester,http://www.leicestervt.org +Vermont,Addison County,Lincoln,http://www.lincolnvermont.org +Vermont,Windham County,Londonderry,http://www.londonderryvt.org/ +Vermont,Windsor County,Ludlow (town),http://www.ludlow.vt.us +Vermont,Caledonia County,Lyndon,http://www.lyndonvt.org +Vermont,Essex County,Maidstone,http://www.maidstone-vt.org +Vermont,Bennington County,Manchester,http://manchester-vt.gov +Vermont,Bennington County,Manchester (village),http://villageofmanchester.com +Vermont,Washington County,Marshfield,http://www.town.marshfield.vt.us/ +Vermont,Addison County,Middlebury,http://www.townofmiddlebury.org +Vermont,Washington County,Middlesex,http://middlesexvermont.org +Vermont,Chittenden County,Milton,http://www.miltonvt.org/ +Vermont,Addison County,Monkton,http://monktonvt.com +Vermont,Franklin County,Montgomery,https://montgomeryvt.us/ +Vermont,Washington County,Montpelier,http://www.montpelier-vt.org/ +Vermont,Washington County,Moretown,http://www.moretownvt.org +Vermont,Lamoille County,Morristown,http://www.morristownvt.org +Vermont,Rutland County,Mount Holly,http://www.mounthollyvt.org/ +Vermont,Addison County,New Haven,http://www.newhavenvt.com +Vermont,Orange County,Newbury (town),http://www.newburyvt.org/ +Vermont,Orleans County,Newport (city),http://www.newportvermont.org/ +Vermont,Bennington County,North Bennington,https://northbennington.org/village/ +Vermont,Grand Isle County,North Hero,http://www.northherovt.com +Vermont,Washington County,Northfield,http://www.northfield-vt.gov +Vermont,Windsor County,Norwich,http://www.norwich.vt.us +Vermont,Addison County,Orwell,https://townoforwellvt.org/ +Vermont,Addison County,Panton,http://www.pantonvt.us +Vermont,Rutland County,Pawlet,http://pawlet.vt.gov/ +Vermont,Caledonia County,Peacham,http://www.peacham.net +Vermont,Bennington County,Peru,http://www.peruvt.org/ +Vermont,Washington County,Plainfield,http://www.plainfieldvt.us +Vermont,Windsor County,Pomfret,http://pomfretvt.us +Vermont,Bennington County,Pownal,https://www.townofpownal.org/ +Vermont,Windham County,Putney,http://www.putneyvt.org +Vermont,Orange County,Randolph,http://randolphvt.org +Vermont,Windsor County,Reading,http://www.readingvt.govoffice.com +Vermont,Bennington County,Readsboro,http://readsborovt.org +Vermont,Franklin County,Richford,http://richfordvt.org +Vermont,Chittenden County,Richmond,http://www.richmondvt.gov +Vermont,Addison County,Ripton,http://www.riptonvermont.org +Vermont,Windsor County,Rochester,http://www.rochestervermont.org +Vermont,Windsor County,Royalton,http://www.royaltonvt.com +Vermont,Rutland County,Rutland (city),http://www.rutlandcity.org/ +Vermont,Caledonia County,Ryegate,http://www.ryegatevt.org +Vermont,Addison County,Salisbury,http://townofsalisbury.org +Vermont,Bennington County,Sandgate,http://www.sandgatevermont.org/ +Vermont,Bennington County,Shaftsbury,http://www.shaftsbury.net +Vermont,Windsor County,Sharon,http://sharonvt.net +Vermont,Chittenden County,Shelburne,http://www.shelburnevt.org +Vermont,Addison County,Shoreham,http://www.shorehamvt.org +Vermont,Chittenden County,South Burlington,https://www.southburlingtonvt.gov/ +Vermont,Grand Isle County,South Hero,http://www.southherovt.org +Vermont,Windsor County,Springfield,https://springfieldvt.gov/ +Vermont,Franklin County,St. Albans (city),http://www.stalbansvt.com/ +Vermont,Franklin County,St. Albans (town),http://www.stalbanstown.com +Vermont,Chittenden County,St. George,http://www.stgeorgevt.com +Vermont,Caledonia County,St. Johnsbury,http://www.stjvt.com +Vermont,Bennington County,Stamford,http://stamfordvt.org +Vermont,Addison County,Starksboro,http://www.starksborovt.org +Vermont,Windsor County,Stockbridge,http://www.stockbridgevt.org/ +Vermont,Lamoille County,Stowe,http://www.townofstowevt.org +Vermont,Orange County,Strafford,http://www.straffordvt.net/ +Vermont,Bennington County,Sunderland,http://www.sunderlandvt.org +Vermont,Franklin County,Swanton (town),http://townofswantonvermont.weebly.com +Vermont,Franklin County,Swanton (village),http://www.swanton.net +Vermont,Orange County,Thetford,https://www.thetfordvt.gov/ +Vermont,Orange County,Topsham,http://townoftopshamvt.org +Vermont,Orange County,Tunbridge,http://www.tunbridgevt.org +Vermont,Addison County,Vergennes,http://www.vergennes.org +Vermont,Windham County,Vernon,http://www.vernon-vt.org/ +Vermont,Washington County,Waitsfield,http://www.waitsfieldvt.us +Vermont,Rutland County,Wallingford,http://www.wallingfordvt.com/ +Vermont,Addison County,Waltham,https://sites.google.com/site/townofwalthamvermont/ +Vermont,Washington County,Warren,http://www.warrenvt.org +Vermont,Washington County,Waterbury,http://www.waterburyvt.com +Vermont,Lamoille County,Waterville,http://www.watervillevt.org +Vermont,Windsor County,Weathersfield,http://www.weathersfield.org +Vermont,Windsor County,West Windsor,http://www.westwindsorvt.govoffice2.com +Vermont,Chittenden County,Westford,http://westfordvt.us +Vermont,Windham County,Westminster,http://www.westminstervt.org/ +Vermont,Windsor County,Weston,http://www.westonvt.com +Vermont,Addison County,Weybridge,http://www.townofweybridge.org +Vermont,Chittenden County,Williston,http://www.town.williston.vt.us +Vermont,Windham County,Wilmington,http://www.wilmingtonvermont.us/ +Vermont,Windsor County,Windsor,http://www.windsorvt.org +Vermont,Bennington County,Winhall,http://www.winhall.org +Vermont,Chittenden County,Winooski,https://www.winooskivt.gov/ +Vermont,Lamoille County,Wolcott,http://www.wolcottvt.org +Vermont,Bennington County,Woodford,http://woodfordvt.org +Vermont,Windsor County,Woodstock,https://www.woodstockvt.com/ +Virginia,Washington County,Abingdon,http://www.abingdon-va.gov +Virginia,Accomack County,Accomac,http://accomac.org +Virginia,Amherst County,Amherst,http://www.amherstva.gov/ +Virginia,Amherst County,Appomattox,https://townofappomattox.com/ +Virginia,Amherst County,Arlington,http://www.arlingtonva.us/ +Virginia,Bedford County,Bedford,http://www.bedfordva.gov +Virginia,Chesterfield County,Berryville,http://www.berryvilleva.gov +Virginia,Caroline County,Bowling Green,http://www.townofbowlinggreen.com/ +Virginia,Charlotte County,Charlotte Court House,http://www.towncch.com +Virginia,Accomack County,Charlottesville,http://www.charlottesville.gov/ +Virginia,Pittsylvania County,Chatham,http://www.chatham-va.gov/ +Virginia,Montgomery County,Christiansburg,http://www.christiansburg.org/ +Virginia,Dickenson County,Clintwood,http://www.townofclintwood.com +Virginia,Accomack County,Covington,https://covington.va.us/ +Virginia,Culpeper County,Culpeper,http://www.culpeperva.gov +Virginia,Northampton County,Eastville,http://eastville.esva.net/ +Virginia,Greene County,Emporia,http://www.ci.emporia.va.us/ +Virginia,Essex County,Fairfax,http://www.fairfaxva.gov +Virginia,Prince Edward County,Farmville,http://www.farmvilleva.com +Virginia,Floyd County,Floyd,https://floydcova.org/ +Virginia,Warren County,Front Royal,http://www.frontroyalva.com +Virginia,Scott County,Gate City,http://www.mygatecity.com/ +Virginia,Gloucester County,Gloucester,https://www.gloucesterva.info/ +Virginia,Buchanan County,Grundy,https://www.townofgrundy.com/ +Virginia,Halifax County,Halifax,http://townofhalifax.com +Virginia,Richmond County,Harrisonburg,https://www.harrisonburgva.gov/ +Virginia,Carroll County,Hillsville,http://www.townofhillsville.com +Virginia,Grayson County,Independence,http://www.independenceva.com +Virginia,Lee County,Jonesville,http://www.townofjonesville.org +Virginia,Brunswick County,Lawrenceville,https://lawrencevilleweb.us/ +Virginia,Russell County,Lebanon,http://www.lebanonva.net/ +Virginia,Loudoun County,Leesburg,http://www.leesburgva.gov +Virginia,Richmond County,Lexington,http://lexingtonva.gov/ +Virginia,Louisa County,Louisa,http://louisatown.org/ +Virginia,Page County,Luray,http://www.townofluray.com +Virginia,Madison County,Madison,http://www.madisonco.virginia.gov/ +Virginia,File:Flag of Prince William County,Manassas,http://www.manassasva.gov +Virginia,Smyth County,Marion,http://www.marionva.org/ +Virginia,Henrico County,Martinsville,http://www.martinsville-va.gov +Virginia,Westmoreland County,Montross,https://www.townofmontross.org +Virginia,Orange County,Orange,http://www.townoforangeva.org/index.asp?NID=31 +Virginia,Giles County,Pearisburg,http://www.pearisburg.org +Virginia,Pulaski County,Pulaski,http://www.pulaskitown.org/ +Virginia,Franklin County,Rocky Mount,http://www.rockymountva.org +Virginia,Richmond County,Salem,http://www.salemva.gov/ +Virginia,Stafford County,Stafford,https://staffordcountyva.gov/ +Virginia,Stafford County,Stafford,https://www.staffordbc.gov.uk +Virginia,Greene County,Stanardsville,http://www.stanardsville.org +Virginia,Amherst County,Staunton,http://www.staunton.va.us/ +Virginia,Patrick County,Stuart,http://www.townofstuartva.com/ +Virginia,Essex County,Tappahannock,http://www.tappahannock-va.gov +Virginia,Tazewell County,Tazewell,http://www.townoftazewell.org/ +Virginia,Fauquier County,Warrenton,http://www.warrentonva.gov +Virginia,Richmond County,Warsaw,https://www.townofwarsaw.com/government +Virginia,Rappahannock County,Washington,http://washingtonva.gov +Virginia,Isle of Wight County,Williamsburg,http://www.williamsburgva.gov/ +Virginia,Franklin County,Winchester,http://www.winchesterva.gov/ +Virginia,Wise County,Wise,http://www.townofwise.net/ +Virginia,Shenandoah County,Woodstock,https://townofwoodstockva.gov/ +Virginia,Wythe County,Wytheville,http://www.wytheville.org/ +Washington,Grays Harbor County,Aberdeen,http://www.aberdeenwa.gov +Washington,Spokane County,Airway Heights,http://cawh.org/ +Washington,King County,Algona,http://www.algonawa.gov/ +Washington,Skagit County,Anacortes,http://www.cityofanacortes.org/ +Washington,Snohomish County,Arlington,http://www.arlingtonwa.gov +Washington,Asotin County,Asotin,http://cityofasotin.org/ +Washington,King County,Auburn,https://www.auburnwa.gov/ +Washington,Kitsap County,Bainbridge Island,https://www.bainbridgewa.gov/ +Washington,Clark County,Battle Ground,http://www.cityofbg.org/ +Washington,King County,Bellevue,http://www.bellevuewa.gov +Washington,Whatcom County,Bellingham,https://cob.org/ +Washington,Benton County,Benton City,http://ci.benton-city.wa.us +Washington,Klickitat County,Bingen,http://www.bingenwashington.org/ +Washington,King County,Black Diamond,https://www.blackdiamondwa.gov +Washington,Whatcom County,Blaine,http://www.cityofblaine.com/ +Washington,Pierce County,Bonney Lake,http://www.ci.bonney-lake.wa.us/ +Washington,King County,Bothell,http://www.bothellwa.gov/ +Washington,Kitsap County,Bremerton,http://www.ci.bremerton.wa.us +Washington,Okanogan County,Brewster,http://www.cityofbrewsterwashington.org/ +Washington,Douglas County,Bridgeport,http://www.bridgeportwashington.net/ +Washington,Snohomish County,Brier,http://www.ci.brier.wa.us/ +Washington,Pierce County,Buckley,http://www.cityofbuckley.com/ +Washington,King County,Burien,http://www.burienwa.gov/ +Washington,Skagit County,Burlington,http://burlingtonwa.gov +Washington,Clark County,Camas,https://www.cityofcamas.us/ +Washington,King County,Carnation,http://www.carnationwa.gov/ +Washington,Chelan County,Cashmere,http://www.cityofcashmere.org/ +Washington,Cowlitz County,Castle Rock,http://ci.castle-rock.wa.us/ +Washington,Lewis County,Centralia,http://www.cityofcentralia.com/ +Washington,Lewis County,Chehalis,http://www.ci.chehalis.wa.us/ +Washington,Chelan County,Chelan,http://www.cityofchelan.com/ +Washington,Spokane County,Cheney,http://www.cityofcheney.org/ +Washington,Stevens County,Chewelah,http://www.cityofchewelah.org/ +Washington,Asotin County,Clarkston,http://www.clarkston-wa.com/ +Washington,Kittitas County,Cle Elum,http://www.cityofcleelum.com +Washington,King County,Clyde Hill,http://www.clydehill.org/ +Washington,Whitman County,Colfax,http://www.colfaxwa.org/ +Washington,Walla Walla County,College Place,http://www.cpwa.us/ +Washington,Stevens County,Colville,http://www.colville.wa.us/ +Washington,Franklin County,Connell,http://www.cityofconnell.com/ +Washington,Grays Harbor County,Cosmopolis,http://cosmopoliswa.gov/ +Washington,King County,Covington,http://www.covingtonwa.gov/ +Washington,Lincoln County,Davenport,http://www.davenportwa.us +Washington,Columbia County,Dayton,http://www.daytonwa.com/ +Washington,Spokane County,Deer Park,http://www.cityofdeerparkwa.com/ +Washington,King County,Des Moines,https://www.desmoineswa.gov/ +Washington,Pierce County,DuPont,http://dupontwa.gov +Washington,King County,Duvall,http://www.duvallwa.gov/ +Washington,Douglas County,East Wenatchee,http://www.east-wenatchee.com +Washington,Pierce County,Edgewood,http://www.cityofedgewood.org/ +Washington,Snohomish County,Edmonds,http://edmondswa.gov +Washington,Grant County,Electric City,http://www.electriccity.us/ +Washington,Kittitas County,Ellensburg,http://www.ci.ellensburg.wa.us/ +Washington,Grays Harbor County,Elma,http://www.cityofelma.com/ +Washington,Chelan County,Entiat,https://www.entiatwa.us/ +Washington,King County,Enumclaw,http://www.cityofenumclaw.net/ +Washington,Grant County,Ephrata,http://www.ephrata.org/ +Washington,Snohomish County,Everett,http://everettwa.gov +Washington,Whatcom County,Everson,http://www.ci.everson.wa.us/ +Washington,King County,Federal Way,https://www.cityoffederalway.com/ +Washington,Whatcom County,Ferndale,https://www.cityofferndale.org/ +Washington,Pierce County,Fife,https://www.cityoffife.org/ +Washington,Pierce County,Fircrest,http://www.cityoffircrest.net/ +Washington,Clallam County,Forks,https://forkswashington.org/ +Washington,Grant County,George,http://www.cityofgeorge.org/ +Washington,Pierce County,Gig Harbor,http://www.cityofgigharbor.net/ +Washington,Snohomish County,Gold Bar,https://cityofgoldbar.us/ +Washington,Klickitat County,Goldendale,http://www.cityofgoldendale.com/ +Washington,Yakima County,Grandview,https://grandview.wa.us/ +Washington,Yakima County,Granger,https://www.grangerwashington.org/ +Washington,Snohomish County,Granite Falls,http://granitefallswa.gov +Washington,Lincoln County,Harrington,http://www.harringtonbiz.com +Washington,Grays Harbor County,Hoquiam,http://www.cityofhoquiam.com/ +Washington,Pacific County,Ilwaco,http://www.ilwaco-wa.gov/ +Washington,King County,Issaquah,https://www.issaquahwa.gov/ +Washington,Cowlitz County,Kalama,https://www.cityofkalama.com/ +Washington,Cowlitz County,Kelso,http://www.kelso.gov/ +Washington,King County,Kenmore,http://www.kenmorewa.gov +Washington,Benton County,Kennewick,https://www.go2kennewick.com/ +Washington,King County,Kent,https://www.kentwa.gov/ +Washington,Stevens County,Kettle Falls,http://www.kettle-falls.com/ +Washington,King County,Kirkland,http://www.kirklandwa.gov +Washington,Kittitas County,Kittitas,http://www.cityofkittitas.com +Washington,Clark County,La Center,https://ci.lacenter.wa.us/ +Washington,Thurston County,Lacey,https://cityoflacey.org/ +Washington,King County,Lake Forest Park,https://www.cityoflfp.gov/ +Washington,Snohomish County,Lake Stevens,http://lakestevenswa.gov +Washington,Pierce County,Lakewood,https://www.cityoflakewood.us/ +Washington,Island County,Langley,http://www.langleywa.org +Washington,Chelan County,Leavenworth,http://www.cityofleavenworth.com +Washington,Spokane County,Liberty Lake,https://www.libertylakewa.gov/ +Washington,Pacific County,Long Beach,http://www.longbeachwa.gov/ +Washington,Cowlitz County,Longview,http://www.mylongview.com +Washington,Whatcom County,Lynden,https://www.lyndenwa.org/ +Washington,Snohomish County,Lynnwood,http://www.lynnwoodwa.gov/ +Washington,Yakima County,Mabton,https://www.cityofmabton.com/ +Washington,King County,Maple Valley,http://www.maplevalleywa.gov/ +Washington,Snohomish County,Marysville,http://www.marysvillewa.gov/ +Washington,Grant County,Mattawa,http://www.cityofmattawa.com/ +Washington,Grays Harbor County,McCleary,http://www.cityofmccleary.com/ +Washington,Spokane County,Medical Lake,https://medical-lake.org/ +Washington,King County,Medina,http://www.medina-wa.gov/ +Washington,King County,Mercer Island,https://www.mercerisland.gov +Washington,Snohomish County,Mill Creek,https://www.cityofmillcreek.com/ +Washington,Spokane County,Millwood,http://millwoodwa.us/ +Washington,Pierce County,Milton,http://www.cityofmilton.net/ +Washington,Snohomish County,Monroe,http://www.ci.monroe.wa.us/ +Washington,Grays Harbor County,Montesano,http://www.cityofmontesano.com +Washington,Lewis County,Morton,http://www.visitmorton.com/ +Washington,Grant County,Moses Lake,http://www.cityofml.com/ +Washington,Lewis County,Mossyrock,http://www.cityofmossyrock.com/ +Washington,Skagit County,Mount Vernon,http://www.mountvernonwa.gov/ +Washington,Snohomish County,Mountlake Terrace,http://cityofmlt.com +Washington,Yakima County,Moxee,https://cityofmoxee.us/ +Washington,Snohomish County,Mukilteo,http://mukilteowa.gov +Washington,Lewis County,Napavine,http://www.cityofnapavine.com/ +Washington,King County,Newcastle,http://www.newcastlewa.gov +Washington,Pend Oreille County,Newport,http://www.newport-wa.org/ +Washington,Whatcom County,Nooksack,http://www.cityofnooksack.com/ +Washington,King County,Normandy Park,https://normandyparkwa.gov/ +Washington,King County,North Bend,https://northbendwa.gov/ +Washington,Skamania County,North Bonneville,http://www.northbonneville.net/ +Washington,Island County,Oak Harbor,http://www.oakharbor.org/ +Washington,Grays Harbor County,Oakville,http://www.oakvillecityhall.com/ +Washington,Grays Harbor County,Ocean Shores,http://www.osgov.com/ +Washington,Okanogan County,Okanogan,http://www.okanogancity.com +Washington,Thurston County,Olympia,http://www.olympiawa.gov +Washington,Okanogan County,Omak,http://www.omakcity.com +Washington,Okanogan County,Oroville,http://www.oroville-wa.com +Washington,Pierce County,Orting,http://www.cityoforting.org +Washington,Adams County,Othello,https://www.othellowa.gov/ +Washington,King County,Pacific,http://www.pacificwa.gov/ +Washington,Whitman County,Palouse,http://www.visitpalouse.com/ +Washington,Franklin County,Pasco,http://www.pasco-wa.gov/ +Washington,Okanogan County,Pateros,http://www.pateros.com/ +Washington,Garfield County,Pomeroy,https://www.cityofpomeroy1.com/ +Washington,Clallam County,Port Angeles,https://www.cityofpa.us/ +Washington,Kitsap County,Port Orchard,http://www.cityofportorchard.us +Washington,Jefferson County,Port Townsend,http://www.cityofpt.us +Washington,Kitsap County,Poulsbo,http://www.cityofpoulsbo.com +Washington,Walla Walla County,Prescott,http://www.prescottwa.com/ +Washington,Benton County,Prosser,http://cityofprosser.com/ +Washington,Whitman County,Pullman,http://www.pullman-wa.gov/ +Washington,Whitman County,Puyallup,https://www.cityofpuyallup.org/ +Washington,Grant County,Quincy,http://quincywashington.us/ +Washington,Thurston County,Rainier,http://cityofrainierwa.org/ +Washington,Pacific County,Raymond,http://cityofraymond.com/ +Washington,King County,Redmond,http://redmond.gov +Washington,King County,Renton,https://www.rentonwa.gov/ +Washington,Ferry County,Republic,http://www.republicwa.org/ +Washington,Benton County,Richland,http://www.ci.richland.wa.us/ +Washington,Clark County,Ridgefield,https://ridgefieldwa.us/ +Washington,Adams County,Ritzville,http://www.cityofritzville.com/ +Washington,Douglas County,Rock Island,http://rockislandwa.org/ +Washington,Kittitas County,Roslyn,http://www.ci.roslyn.wa.us/ +Washington,Pierce County,Roy,http://www.cityofroywa.us/ +Washington,Grant County,Royal City,http://www.royalcitywa.org/ +Washington,Pierce County,Ruston,http://www.rustonwa.org/ +Washington,King County,Sammamish,http://www.sammamish.us +Washington,King County,SeaTac,https://www.seatacwa.gov +Washington,Skagit County,Sedro-Woolley,https://www.ci.sedro-woolley.wa.us +Washington,Yakima County,Selah,https://selahwa.gov/ +Washington,Clallam County,Sequim,http://www.sequimwa.gov/ +Washington,Mason County,Shelton,http://www.ci.shelton.wa.us/ +Washington,King County,Shoreline,http://www.shorelinewa.gov/ +Washington,Snohomish County,Snohomish,https://www.snohomishwa.gov/ +Washington,King County,Snoqualmie,http://www.snoqualmiewa.gov +Washington,Grant County,Soap Lake,https://www.soaplakewa.gov/ +Washington,Pacific County,South Bend,http://www.southbend-wa.gov/ +Washington,Spokane County,Spokane,https://my.spokanecity.org/ +Washington,Spokane County,Spokane Valley,https://www.spokanevalley.org/ +Washington,Lincoln County,Sprague,https://sprague-wa.us/ +Washington,Snohomish County,Stanwood,https://stanwoodwa.org/ +Washington,Skamania County,Stevenson,http://www.cityofstevenson.com/ +Washington,Snohomish County,Sultan,http://ci.sultan.wa.us +Washington,Whatcom County,Sumas,http://cityofsumas.com/ +Washington,Pierce County,Sumner,https://sumnerwa.gov/ +Washington,Yakima County,Sunnyside,http://sunnyside-wa.gov/ +Washington,Yakima County,Tacoma,https://www.cityoftacoma.org/ +Washington,Whitman County,Tekoa,http://www.tekoawa.com/ +Washington,Thurston County,Tenino,https://cityoftenino.us/ +Washington,Yakima County,Tieton,http://cityoftieton.com/ +Washington,Lewis County,Toledo,http://www.toledowa.us/ +Washington,Okanogan County,Tonasket,http://www.tonasketcity.org/ +Washington,Yakima County,Toppenish,http://www.cityoftoppenish.us/ +Washington,King County,Tukwila,http://www.tukwilawa.gov +Washington,Thurston County,Tumwater,http://www.ci.tumwater.wa.us/ +Washington,Yakima County,Union Gap,https://uniongapwa.gov/ +Washington,Pierce County,University Place,http://cityofup.com/ +Washington,Lewis County,Vader,http://www.vaderwa.org/ +Washington,Clark County,Vancouver,https://www.cityofvancouver.us/ +Washington,Walla Walla County,Waitsburg,http://www.cityofwaitsburg.com/ +Washington,Walla Walla County,Walla Walla,https://www.wallawallawa.gov/ +Washington,Yakima County,Wapato,https://wapato-city.org/ +Washington,Grant County,Warden,http://www.cityofwarden.org/ +Washington,Clark County,Washougal,http://www.cityofwashougal.us/ +Washington,Chelan County,Wenatchee,http://www.wenatcheewa.gov +Washington,Benton County,West Richland,http://www.westrichland.org/ +Washington,Grays Harbor County,Westport,https://www.ci.westport.wa.us/ +Washington,Klickitat County,White Salmon,http://white-salmon.net/ +Washington,Lewis County,Winlock,https://cityofwinlock.com/ +Washington,King County,Woodinville,http://www.ci.woodinville.wa.us/ +Washington,Cowlitz County,Woodland,http://www.ci.woodland.wa.us/ +Washington,Snohomish County,Woodway,https://www.townofwoodway.com/ +Washington,Yakima County,Yakima,https://www.yakimawa.gov/ +Washington,Thurston County,Yelm,https://ci.yelm.wa.us/ +Washington,Yakima County,Zillah,https://www.cityofzillah.us/ +West Virginia,Greenbrier County,Alderson,http://aldersonwv.org +West Virginia,Fayette County,Ansted,http://www.anstedwv.com/ +West Virginia,Mercer County,Athens,http://www.townofathens.com +West Virginia,Putnam County,Bancroft,http://www.local.wv.gov/bancroft/Pages/default.aspx +West Virginia,Cabell County,Barboursville,http://www.barboursville.org/ +West Virginia,Marion County,Barrackville,https://local.wv.gov/barrackville/Pages/default.aspx +West Virginia,Raleigh County,Beckley,http://www.beckley.org/ +West Virginia,Kanawha County,Belle,http://townofbelle.com/ +West Virginia,Fayette County,Benwood,https://www.benwoodwv.com/ +West Virginia,Morgan County,Berkeley Springs,http://www.berkeleysprings.com/ +West Virginia,Brooke County,Bethany,https://www.bethanywv.org/ +West Virginia,Mercer County,Bluefield,http://www.cityofbluefield.com +West Virginia,Jefferson County,Bolivar,http://www.bolivarwv.org/ +West Virginia,Harrison County,Bridgeport,http://www.bridgeportwv.com/ +West Virginia,Upshur County,Buckhannon,http://www.buckhannonwv.org/ +West Virginia,Putnam County,Buffalo,https://buffalo.wv.gov/ +West Virginia,Hampshire County,Capon Bridge,http://townofcaponbridge.wv.gov/Pages/default.aspx +West Virginia,Logan County,Chapmanville,https://townofchapmanville.com +West Virginia,Jefferson County,Charles Town,http://www.charlestownwv.us/ +West Virginia,Kanawha County,Charleston,https://charlestonwv.gov/ +West Virginia,Hancock County,Chester,http://chesterwv.org/ +West Virginia,Harrison County,Clarksburg,http://www.cityofclarksburgwv.com/ +West Virginia,Kanawha County,Clendenin,http://www.clendeninwv.org/ +West Virginia,Boone County,Danville,https://local.wv.gov/danville/ +West Virginia,Mingo County,Delbarton,http://delbartonwv.us +West Virginia,Kanawha County,Dunbar,http://www.cityofdunbarwv.gov +West Virginia,Putnam County,Eleanor,http://eleanorwv.com/ +West Virginia,Mineral County,Elk Garden,http://www.mineralcountywv.com/elkgarden/index.asp +West Virginia,Randolph County,Elkins,http://www.CityOfElkinsWV.com/ +West Virginia,Ritchie County,Ellenboro,https://local.wv.gov/Ellenboro/Pages/default.aspx +West Virginia,Marion County,Fairmont,http://fairmontwv.gov/ +West Virginia,Fayette County,Fayetteville,https://fayettevillewv.gov/ +West Virginia,Brooke County,Follansbee,https://thecityoffollansbee.com/ +West Virginia,Pendleton County,Franklin,http://www.local.wv.gov/Franklin +West Virginia,Jefferson County,Glen Dale,http://www.cityofglendalewv.com/ +West Virginia,Gilmer County,Glenville,http://cityofglenvillewv.com/ +West Virginia,Taylor County,Grafton,http://www.graftonwv.org/ +West Virginia,Lincoln County,Hamlin,https://local.wv.gov/hamlin/Pages/default.aspx +West Virginia,Jefferson County,Harpers Ferry,http://www.harpersferrywv.us/ +West Virginia,Summers County,Hinton,http://www.hintonwva.com +West Virginia,Cabell County,Huntington,http://www.cityofhuntington.com +West Virginia,Putnam County,Hurricane,http://www.hurricanewv.com/ +West Virginia,Lewis County,Jane Lew,http://townofjanelew.com +West Virginia,Wayne County,Kenova,https://kenovawv.com/ +West Virginia,Mineral County,Keyser,https://www.cityofkeyser.com/ +West Virginia,McDowell County,Keystone,http://www.coalcampusa.com/sowv/flattop/keystone/keystone.htm +West Virginia,Preston County,Kingwood,https://www.kingwoodwv.org +West Virginia,Greenbrier County,Lewisburg,http://www.lewisburg-wv.org/ +West Virginia,Raleigh County,Mabscott,https://local.wv.gov/Mabscott/Pages/default.aspx +West Virginia,Boone County,Madison,http://local.wv.gov/madison +West Virginia,Marion County,Mannington,https://www.cityofmannington.com/ +West Virginia,Kanawha County,Marmet,http://townofmarmetwv.us/ +West Virginia,Berkeley County,Martinsburg,http://www.cityofmartinsburg.org/ +West Virginia,Mason County,Mason,https://local.wv.gov/Mason/Pages/default.aspx +West Virginia,Hampshire County,McMechen,http://www.local.wv.gov/mcmechen/Pages/default.aspx +West Virginia,Cabell County,Milton,https://www.cityofmiltonwv.com/ +West Virginia,Marion County,Monongah,http://www.local.wv.gov/monongah/Pages/default.aspx +West Virginia,Hardy County,Moorefield,https://www.townofmoorefield.com/ +West Virginia,Wood County,Morgantown,http://www.morgantownwv.gov/ +West Virginia,Fayette County,Moundsville,http://www.cityofmoundsville.com/ +West Virginia,Fayette County,Mount Hope,http://mthopewv.org/ +West Virginia,Hancock County,New Cumberland,https://www.cityofnewcumberland.net/ +West Virginia,Mason County,New Haven,https://www.townofnewhavenwv.com/ +West Virginia,Wetzel County,New Martinsville,http://www.cityofnewmartinsvillewv.com/ +West Virginia,Kanawha County,Nitro,http://www.cityofnitro.org/ +West Virginia,Wood County,North Hills,https://northhillswv.com +West Virginia,Harrison County,Nutter Fort,http://townofnutterfort.com/ +West Virginia,Fayette County,Oak Hill,https://oakhillwv.gov +West Virginia,Wetzel County,Paden City,https://padencity.org/ +West Virginia,Wood County,Parkersburg,https://parkersburgcity.com +West Virginia,Tucker County,Parsons,https://cityofparsonswv.com/ +West Virginia,Ritchie County,Pennsboro,https://local.wv.gov/Pennsboro +West Virginia,Grant County,Petersburg,https://local.wv.gov/Petersburg +West Virginia,Mingo County,Philippi,http://www.philippi.org/ +West Virginia,Mineral County,Piedmont,https://local.wv.gov/Piedmont/Pages/default.aspx +West Virginia,Marion County,Pleasant Valley,http://www.cityofpleasantvalley.com +West Virginia,Mason County,Point Pleasant,http://www.ptpleasantwv.org/ +West Virginia,Kanawha County,Pratt,http://townofpratt.com/ +West Virginia,Mercer County,Princeton,http://www.cityofprinceton.org/ +West Virginia,Greenbrier County,Rainelle,http://www.rainelle-wv.com +West Virginia,Jefferson County,Ranson,http://www.cityofransonwv.net/ +West Virginia,Jackson County,Ravenswood,https://cityofravenswood.com +West Virginia,Nicholas County,Richwood,https://www.cityofrichwoodwv.com/ +West Virginia,Jackson County,Ripley,http://www.cityofripley.org/ +West Virginia,Hampshire County,Romney,http://townofromney.com +West Virginia,Greenbrier County,Ronceverte,https://www.cityofronceverte.com/ +West Virginia,Harrison County,Salem,https://local.wv.gov/Salem/Pages/default.aspx +West Virginia,Jefferson County,Shepherdstown,https://shepherdstown.info/ +West Virginia,Harrison County,Shinnston,http://www.shinnstonwv.com/ +West Virginia,Tyler County,Sistersville,https://www.cityofsistersville.com/ +West Virginia,Raleigh County,Sophia,https://local.wv.gov/Sophia/Pages/default.aspx +West Virginia,Kanawha County,South Charleston,http://cityofsouthcharleston.com/ +West Virginia,Roane County,Spencer,http://www.cityofspencer.com/ +West Virginia,Kanawha County,St. Albans,http://www.stalbanswv.com/ +West Virginia,Pleasants County,St. Marys,https://stmarys.wv.gov/Pages/default.aspx +West Virginia,Pleasants County,Star City,http://www.starcitywv.com +West Virginia,Harrison County,Stonewood,https://www.cityofstonewood.com +West Virginia,Nicholas County,Summersville,https://www.summersvillewv.org/ +West Virginia,Braxton County,Sutton,http://suttonwv.com/home.aspx +West Virginia,Boone County,Sylvester,https://local.wv.gov/Sylvester/ +West Virginia,Monroe County,Union,https://local.wv.gov/union/Pages/default.aspx +West Virginia,Wood County,Vienna,https://vienna-wv.com/ +West Virginia,McDowell County,War,http://www.warwestvirginia.com/ +West Virginia,Webster County,Webster Springs,https://local.wv.gov/Addison/Pages/default.aspx +West Virginia,Hancock County,Weirton,https://www.cityofweirton.com/ +West Virginia,McDowell County,Welch,https://local.wv.gov/welch/Pages/default.aspx +West Virginia,Brooke County,Wellsburg,https://www.cityofwellsburg.us/ +West Virginia,Lincoln County,West Hamlin,http://local.wv.gov/westhamlin +West Virginia,Lewis County,Weston,http://www.cityofwestonwv.com +West Virginia,Cabell County,Westover,https://www.westoverwv.org +West Virginia,Ohio County,Wheeling,http://www.wheelingwv.gov/ +West Virginia,Greenbrier County,White Sulphur Springs,https://www.whitesulphurspringswv.org/ +West Virginia,Boone County,Whitesville,http://whitesvillewv.com/ +West Virginia,Mingo County,Williamson,http://cityofwilliamson.org +West Virginia,Wood County,Williamstown,https://williamstownwv.org/ +West Virginia,Putnam County,Winfield,http://www.cityofwinfield.net/ +Wisconsin,Clark County,Abbotsford,http://www.ci.abbotsford.wi.us +Wisconsin,Adams County,Adams,http://www.cityofadams-wi.gov/ +Wisconsin,Kewaunee County,Algoma,http://www.algomacity.org +Wisconsin,Buffalo County,Alma,http://cityofalmawi.com +Wisconsin,Eau Claire County,Altoona,http://www.ci.altoona.wi.us +Wisconsin,Polk County,Amery,http://www.amerywisconsin.org +Wisconsin,Langlade County,Antigo,http://www.antigo-city.org +Wisconsin,Outagamie County,Appleton,http://www.appleton.org +Wisconsin,Trempealeau County,Arcadia,http://cityofarcadiawi.com/ +Wisconsin,Ashland County,Ashland,http://www.coawi.org +Wisconsin,Eau Claire County,Augusta,http://cityofaugusta.org +Wisconsin,Sauk County,Baraboo,http://www.cityofbaraboo.com/ +Wisconsin,Barron County,Barron,http://cityofbarron.com +Wisconsin,Bayfield County,Bayfield,http://cityofbayfield.com +Wisconsin,Dodge County,Beaver Dam,http://www.cityofbeaverdam.com +Wisconsin,Rock County,Beloit,http://www.beloitwi.gov/ +Wisconsin,Green Lake County,Berlin,http://cityofberlin.net +Wisconsin,Jackson County,Black River Falls,http://blackriverfalls.us +Wisconsin,Trempealeau County,Blair,http://cityofblair.org +Wisconsin,Chippewa County,Bloomer,http://ci.bloomer.wi.us +Wisconsin,Grant County,Boscobel,http://www.boscobelwisconsin.com/ +Wisconsin,Calumet County,Brillion,http://www.ci.brillion.wi.us +Wisconsin,Green County,Brodhead,http://cityofbrodheadwi.us +Wisconsin,Waukesha County,Brookfield,http://ci.brookfield.wi.us +Wisconsin,Buffalo County,Buffalo City,http://www.buffalocitywisconsin.com +Wisconsin,Racine County,Burlington,http://www.burlington-wi.gov +Wisconsin,Ozaukee County,Cedarburg,http://www.ci.cedarburg.wi.us/ +Wisconsin,Barron County,Chetek,http://cityofchetek-wi.gov +Wisconsin,Calumet County,Chilton,http://chilton.govoffice.com +Wisconsin,Chippewa County,Chippewa Falls,http://www.ci.chippewa-falls.wi.us +Wisconsin,Waupaca County,Clintonville,http://clintonvillewi.org +Wisconsin,Clark County,Colby,http://www.ci.colby.wi.us +Wisconsin,Columbia County,Columbus,http://www.cityofcolumbuswi.com/ +Wisconsin,Chippewa County,Cornell,http://cityofcornell.com +Wisconsin,Forest County,Crandon,http://www.cityofcrandon.info/ +Wisconsin,Grant County,Cuba City,http://cubacity.org +Wisconsin,Milwaukee County,Cudahy,http://www.cudahy-wi.gov +Wisconsin,Barron County,Cumberland,http://www.cityofcumberland.net +Wisconsin,Lafayette County,Darlington,http://darlingtonwi.org +Wisconsin,Brown County,De Pere,https://www.deperewi.gov/ +Wisconsin,Waukesha County,Delafield,http://www.cityofdelafield.com +Wisconsin,Waukesha County Airport,Delavan,http://www.ci.delavan.wi.us/ +Wisconsin,Iowa County,Dodgeville,http://cityofdodgeville.com +Wisconsin,Pepin County,Durand,http://durand-wi.com/ +Wisconsin,Vilas County,Eagle River,http://eagleriver.govoffice2.com +Wisconsin,Eau Claire County,Eau Claire,http://www.eauclairewi.gov +Wisconsin,Rock County,Edgerton,http://www.cityofedgerton.com/ +Wisconsin,Walworth County,Elkhorn,http://www.cityofelkhorn.org +Wisconsin,Juneau County,Elroy,http://elroywi.com +Wisconsin,Rock County,Evansville,http://www.ci.evansville.wi.gov +Wisconsin,Grant County,Fennimore,http://www.fennimore.com/ +Wisconsin,Dane County,Fitchburg,http://fitchburgwi.gov +Wisconsin,Fond du Lac County,Fond du Lac,http://www.fdl.wi.gov +Wisconsin,Jefferson County,Fort Atkinson,http://www.fortatkinsonwi.net +Wisconsin,Buffalo County,Fountain City,http://www.fountaincitywisconsin.com +Wisconsin,Dodge County,Fox Lake,http://cityoffoxlake.org +Wisconsin,Milwaukee County,Franklin,http://www.franklinwi.gov +Wisconsin,Trempealeau County,Galesville,http://cityofgalesville.com +Wisconsin,Oconto County,Gillett,http://cityofgillett.com +Wisconsin,Milwaukee County,Glendale,http://glendalewi.gov +Wisconsin,St. Croix County,Glenwood City,http://glenwoodcitywi.com +Wisconsin,Brown County,Green Bay,http://greenbaywi.gov +Wisconsin,Green Lake County,Green Lake,http://cityofgreenlake.com +Wisconsin,Milwaukee County,Greenfield,http://www.ci.greenfield.wi.us +Wisconsin,Clark County,Greenwood,http://greenwoodwi.com +Wisconsin,Washington County,Hartford,http://www.ci.hartford.wi.us +Wisconsin,Sawyer County,Hayward,http://www.cityofhaywardwi.gov/ +Wisconsin,Vernon County,Hillsboro,http://www.hillsborowi.com +Wisconsin,Dodge County,Horicon,http://cityhoriconwi.us +Wisconsin,St. Croix County,Hudson,http://www.ci.hudson.wi.us +Wisconsin,Trempealeau County,Independence,http://www.independencewi.org +Wisconsin,Rock County,Janesville,https://www.janesvillewi.gov +Wisconsin,Jefferson County,Jefferson,http://www.jeffersonwis.com +Wisconsin,Dodge County,Juneau,http://www.cityofjuneau.net/ +Wisconsin,Outagamie County,Kaukauna,http://www.cityofkaukauna.com/ +Wisconsin,Kenosha County,Kenosha,http://www.kenosha.org/ +Wisconsin,Kewaunee County,Kewaunee,http://cityofkewaunee.org +Wisconsin,Manitowoc County,Kiel,https://kielwi.gov +Wisconsin,La Crosse County,La Crosse,https://www.cityoflacrosse.org/ +Wisconsin,Rusk County,Ladysmith,http://www.cityofladysmithwi.com +Wisconsin,Walworth County,Lake Geneva,http://www.cityoflakegeneva.com/ +Wisconsin,Jefferson County,Lake Mills,http://www.ci.lake-mills.wi.us +Wisconsin,Grant County,Lancaster,http://www.lancasterwisconsin.com/ +Wisconsin,Columbia County,Lodi,http://www.cityoflodi.us +Wisconsin,Clark County,Loyal,http://loyalwi.com +Wisconsin,Dane County,Madison,http://cityofmadison.com +Wisconsin,Waupaca County,Manawa,http://cityofmanawa.org +Wisconsin,Manitowoc County,Manitowoc,http://www.manitowoc.org +Wisconsin,Marinette County,Marinette,http://marinette.wi.us +Wisconsin,Waupaca County,Marion,http://cityofmarionwi.gov +Wisconsin,Green Lake County,Markesan,http://www.markesanwi.gov/ +Wisconsin,Wood County,Marshfield,http://ci.marshfield.wi.us +Wisconsin,Juneau County,Mauston,http://www.mauston.com +Wisconsin,Dodge County,Mayville,http://mayvillecity.com +Wisconsin,Taylor County,Medford,http://citymedfordwi.com +Wisconsin,Ashland County,Mellen,http://www.mellenwi.com/ +Wisconsin,Winnebago County,Menasha,http://www.cityofmenasha-wi.gov +Wisconsin,Dunn County,Menomonie,http://www.menomonie-wi.gov +Wisconsin,Ozaukee County,Mequon,http://www.ci.mequon.wi.us +Wisconsin,Lincoln County,Merrill,http://www.ci.merrill.wi.us +Wisconsin,Dane County,Middleton,https://cityofmiddleton.us +Wisconsin,Rock County,Milton,http://www.ci.milton.wi.us/ +Wisconsin,Iowa County,Mineral Point,http://www.mineralpoint.net/ +Wisconsin,Buffalo County,Mondovi,http://www.mondovi.com +Wisconsin,Dane County,Monona,http://www.mymonona.com/ +Wisconsin,Green County,Monroe,http://www.cityofmonroe.org +Wisconsin,Marquette County,Montello,http://montellowi.com +Wisconsin,Iron County,Montreal,http://montrealwis.com +Wisconsin,Marathon County,Mosinee,http://mosinee.wi.us +Wisconsin,Waukesha County,Muskego,http://www.cityofmuskego.org +Wisconsin,Winnebago County,Neenah,http://www.ci.neenah.wi.us +Wisconsin,Clark County,Neillsville,http://www.neillsville-wi.com/ +Wisconsin,Wood County,Nekoosa,http://www.cityofnekoosa.org/index.php +Wisconsin,Waukesha County,New Berlin,http://www.newberlin.org/ +Wisconsin,Calumet County,New Holstein,http://cityofnewholstein.org +Wisconsin,Juneau County,New Lisbon,http://www.newlisbon.net/ +Wisconsin,Waupaca County,New London,http://www.newlondonwi.org +Wisconsin,St. Croix County,New Richmond,http://www.newrichmondwi.gov/ +Wisconsin,Marinette County,Niagara,http://www.cityofniagara.org/ +Wisconsin,Milwaukee County,Oak Creek,https://www.oakcreekwi.gov +Wisconsin,Waukesha County,Oconomowoc,http://www.oconomowoc-wi.gov +Wisconsin,Oconto County,Oconto,http://cityofoconto.com +Wisconsin,Oconto County,Oconto Falls,http://www.ci.ocontofalls.wi.us +Wisconsin,Winnebago County,Omro,http://omro-wi.com +Wisconsin,La Crosse County,Onalaska,http://www.cityofonalaska.com/ +Wisconsin,Winnebago County,Oshkosh,http://www.ci.oshkosh.wi.us +Wisconsin,Trempealeau County,Osseo,http://www.cityofosseo.us/ +Wisconsin,Clark County,Owen,http://cityofowen.com +Wisconsin,Price County,Park Falls,http://www.cityofparkfalls.com/ +Wisconsin,Marinette County,Peshtigo,http://ci.peshtigo.wi.us +Wisconsin,Waukesha County,Pewaukee,https://www.cityofpewaukee.us/ +Wisconsin,Price County,Phillips,http://cityofphillips.com +Wisconsin,Wood County,Pittsville,http://pittsvillewi.com +Wisconsin,Grant County,Platteville,http://www.platteville.org/ +Wisconsin,Sheboygan County,Plymouth,http://www.plymouthgov.com +Wisconsin,Ozaukee County,Port Washington,https://portwashingtonwi.gov +Wisconsin,Columbia County,Portage,https://www.portagewi.gov/ +Wisconsin,Columbia County,Prairie du Chien,http://www.prairieduchien.info +Wisconsin,Pierce County,Prescott,http://prescottwi.org +Wisconsin,Green Lake County,Princeton,http://cityofprincetonwi.com +Wisconsin,Racine County,Racine,http://cityofracine.org +Wisconsin,Sauk County,Reedsburg,http://www.reedsburgwi.gov +Wisconsin,Oneida County,Rhinelander,http://www.rhinelandercityhall.org +Wisconsin,Barron County,Rice Lake,http://www.ci.rice-lake.wi.us +Wisconsin,Richland County,Richland Center,http://ci.richland-center.wi.us +Wisconsin,Richland County,Ripon,http://www.cityofripon.com +Wisconsin,Pierce County,River Falls,http://www.rfcity.org +Wisconsin,Marathon County,Schofield,http://cityofschofield.org +Wisconsin,Outagamie County,Seymour,http://cityofseymourwi.org +Wisconsin,Shawano County,Shawano,http://www.cityofshawano.com/ +Wisconsin,Sheboygan County,Sheboygan,http://sheboyganwi.gov +Wisconsin,Sheboygan County,Sheboygan Falls,https://sheboyganfallswi.gov +Wisconsin,Washburn County,Shell Lake,http://shelllake.org +Wisconsin,Lafayette County,Shullsburg,http://www.shullsburgwisconsin.org +Wisconsin,Milwaukee County,South Milwaukee,https://southmilwaukee.gov +Wisconsin,Monroe County,Sparta,http://www.spartawisconsin.org +Wisconsin,Washburn County,Spooner,http://www.cityofspooner.org/cms/ +Wisconsin,Polk County,St. Croix Falls,http://www.cityofstcroixfalls.com/ +Wisconsin,Milwaukee County,St. Francis,http://www.stfranciswi.org +Wisconsin,Chippewa County,Stanley,http://stanleywisconsin.us +Wisconsin,Portage County,Stevens Point,http://www.stevenspoint.com +Wisconsin,Dane County,Stoughton,http://ci.stoughton.wi.us +Wisconsin,Door County,Sturgeon Bay,http://www.sturgeonbaywi.org/ +Wisconsin,Dane County,Sun Prairie,https://cityofsunprairie.com/ +Wisconsin,Douglas County,Superior,http://www.ci.superior.wi.us +Wisconsin,Clark County,Thorp,http://www.cityofthorp.com +Wisconsin,Monroe County,Tomah,http://www.tomahonline.com +Wisconsin,Lincoln County,Tomahawk,http://www.cityoftomahawkwi.com +Wisconsin,Manitowoc County,Two Rivers,http://www.two-rivers.org +Wisconsin,Dane County,Verona,http://www.ci.verona.wi.us +Wisconsin,Vernon County,Viroqua,https://viroqua-wisconsin.com +Wisconsin,Bayfield County,Washburn,http://www.cityofwashburn.org +Wisconsin,Jefferson County,Waterloo,http://www.waterloowi.us +Wisconsin,Jefferson County,Watertown,http://www.ci.watertown.wi.us +Wisconsin,Waukesha County,Waukesha,http://waukesha-wi.gov +Wisconsin,Waupaca County,Waupaca,http://www.cityofwaupaca.org +Wisconsin,Dodge County,Waupun,http://www.cityofwaupun.org +Wisconsin,Marathon County,Wausau,http://www.ci.wausau.wi.us +Wisconsin,Waushara County,Wautoma,http://www.cityofwautoma.com/ +Wisconsin,Milwaukee County,Wauwatosa,http://www.wauwatosa.net +Wisconsin,Milwaukee County,West Allis,http://www.westalliswi.gov +Wisconsin,Washington County,West Bend,http://www.ci.west-bend.wi.us +Wisconsin,La Crosse County,West Salem,http://www.westsalemwi.com +Wisconsin,Vernon County,Westby,https://www.cityofwestby.org +Wisconsin,Waupaca County,Weyauwega,http://www.cityofweyauwega-wi.gov/ +Wisconsin,Trempealeau County,Whitehall,https://sites.google.com/site/cityofwhitehallwi/ +Wisconsin,Walworth County,Whitewater,http://www.whitewater-wi.gov +Wisconsin,Columbia County,Wisconsin Dells,http://www.citywd.org/ +Wisconsin,Wood County,Wisconsin Rapids,http://www.wirapids.org +Wyoming,Lincoln County,Afton,http://www.aftonwyoming.gov +Wyoming,Lincoln County,Alpine,http://www.alpinewyoming.org +Wyoming,Carbon County,Baggs,http://www.townofbaggs.com +Wyoming,Natrona County,Bar Nunn,http://www.townofbarnunn.com/ +Wyoming,Big Horn County,Basin,http://www.thetownofbasin.com +Wyoming,Uinta County,Bear River,http://www.townofbearriver.com/ +Wyoming,Sublette County,Big Piney,http://www.townofbigpiney.com/ +Wyoming,Johnson County,Buffalo,https://cityofbuffalowy.com/ +Wyoming,Laramie County,Burns,http://www.burnswy.com/ +Wyoming,Big Horn County,Byron,https://byronwyoming.org/index.html +Wyoming,Natrona County,Casper,http://www.casperwy.gov/ +Wyoming,Laramie County,Cheyenne,http://www.cheyennecity.org +Wyoming,Platte County,Chugwater,http://www.chugwater.com/ +Wyoming,Park County,Cody,https://codywy.gov +Wyoming,Big Horn County,Cowley,http://cowleywyoming.com/ +Wyoming,Sheridan County,Dayton,http://www.daytonwyoming.org +Wyoming,Lincoln County,Diamondville,http://www.diamondvillewyo.com +Wyoming,Converse County,Douglas,https://cityofdouglas.org +Wyoming,Fremont County,Dubois,https://townofdubois.org/ +Wyoming,Carbon County,Evanston,https://www.evanstonwy.org +Wyoming,Natrona County,Evansville,http://www.townofevansville.org +Wyoming,Big Horn County,Frannie,https://franniewy.govoffice2.com/ +Wyoming,Campbell County,Gillette,https://www.gillettewy.gov +Wyoming,Platte County,Glendo,http://www.glendowy.com +Wyoming,Converse County,Glenrock,https://glenrock.org/ +Wyoming,Sweetwater County,Green River,https://www.cityofgreenriver.org/ +Wyoming,Big Horn County,Greybull,http://townofgreybull.com/Home.html +Wyoming,Platte County,Guernsey,http://townofguernseywy.us/ +Wyoming,Platte County,Hartville,http://www.hartvillewyoming.com +Wyoming,Crook County,Hulett,http://townofhulettwy.com/ +Wyoming,Teton County,Jackson,https://www.jacksonwy.gov/ +Wyoming,Johnson County,Kaycee,http://www.kayceewyoming.org/ +Wyoming,Lincoln County,Kemmerer,http://www.kemmerer.org +Wyoming,Lincoln County,La Barge,http://www.townoflabarge.org +Wyoming,Fremont County,Lander,https://www.landerwyoming.org +Wyoming,Albany County,Laramie,https://www.cityoflaramie.org/ +Wyoming,Big Horn County,Lovell,http://www.townoflovell.com +Wyoming,Niobrara County,Lusk,http://www.townoflusk.org +Wyoming,Uinta County,Lyman,https://www.lymanwy.com/ +Wyoming,Carbon County,Medicine Bow,http://www.medicinebow.org/ +Wyoming,Park County,Meeteetse,http://www.townofmeeteetse.org/ +Wyoming,Natrona County,Mills,https://millswy.gov// +Wyoming,Crook County,Moorcroft,http://townofmoorcroft.com/ +Wyoming,Uinta County,Mountain View,https://www.mtvwy.com/ +Wyoming,Uinta County,Newcastle,http://www.newcastlewyoming.org/ +Wyoming,Laramie County,Pine Bluffs,http://pinebluffswy.gov/ +Wyoming,Crook County,Pine Haven,http://www.pinehavenwy.govoffice2.com/ +Wyoming,Sublette County,Pinedale,http://www.townofpinedale.us/ +Wyoming,Park County,Powell,http://www.cityofpowell.com/ +Wyoming,Sheridan County,Ranchester,https://ranchesterwyoming.com/ +Wyoming,Sheridan County,Rawlins,https://www.rawlins-wyoming.com +Wyoming,Fremont County,Riverton,http://www.rivertonwy.gov +Wyoming,Fremont County,Rock River,http://www.town.rock-river.wy.us/home.aspx +Wyoming,Sweetwater County,Rock Springs,https://www.rswy.net +Wyoming,Carbon County,Saratoga,http://www.saratoga.govoffice2.com/ +Wyoming,Carbon County,Sheridan,https://www.sheridanwy.gov +Wyoming,Fremont County,Shoshoni,http://www.shoshoniwyoming.org +Wyoming,Lincoln County,Star Valley Ranch,http://www.starvalleyranchwy.org +Wyoming,Crook County,Sundance,http://www.cityofsundancewy.com/ +Wyoming,Washakie County,Ten Sleep,http://www.townoftensleep.com/ +Wyoming,Lincoln County,Thayne,http://www.thayne-wy.com/ +Wyoming,Hot Springs County,Thermopolis,http://www.townofthermopolis.com +Wyoming,Hot Springs County,Torrington,https://www.torringtonwy.gov +Wyoming,Weston County,Upton,https://www.townofupton.com/ +Wyoming,Sweetwater County,Wheatland,https://www.townofwheatlandwy.org/ +Wyoming,Washakie County,Worland,https://www.cityofworland.org +Wyoming,Campbell County,Wright,http://www.wrightwyoming.com diff --git a/backend/scripts/populateCountiesCities/United_States_Counties_with_URLs.csv b/backend/scripts/populateCountiesCities/United_States_Counties_with_URLs.csv new file mode 100644 index 00000000..6dedb681 --- /dev/null +++ b/backend/scripts/populateCountiesCities/United_States_Counties_with_URLs.csv @@ -0,0 +1,2891 @@ +County,State,Wikipedia_URL +Autauga County,Alabama,http://www.autaugaco.org +Baldwin County,Alabama,https://baldwincountyal.gov/ +Eufaula,Alabama,http://www.eufaulaalabama.com/ +Bibb County,Alabama,http://www.bibbal.com +Blount County,Alabama,http://www.blountcountyal.gov +Bullock County,Alabama,http://bullockcountyalrev.com/ +Butler County,Alabama,http://butlercountyal.com/ +Calhoun County,Alabama,http://www.calhouncounty.org +Chambers County,Alabama,http://www.chamberscountyal.gov +Cherokee County,Alabama,http://www.cherokeecounty-al.gov +Chilton County,Alabama,http://chiltoncounty.org +Clarke County,Alabama,http://www.clarkecountyal.com +Clay County,Alabama,https://alabamaclaycounty.com/ +Cleburne County,Alabama,http://www.cleburnecounty.us +Coffee County,Alabama,http://www.coffeecounty.us +Colbert County,Alabama,http://www.colbertcounty.org/ +Coosa County,Alabama,http://www.coosacountyal.com/ +Covington County,Alabama,http://www.covcounty.com +Crenshaw County,Alabama,http://www.crenshawcountyalonline.com +Cullman County,Alabama,http://www.co.cullman.al.us +Dale County,Alabama,http://www.dalecountyal.org +Dallas County,Alabama,http://www.dallascounty-al.org/ +DeKalb County,Alabama,http://www.dekalbcountyal.us +Elmore County,Alabama,http://www.elmoreco.org +Escambia County,Alabama,http://www.co.escambia.al.us +Etowah County,Alabama,http://www.etowahcounty.org +Franklin County,Alabama,http://www.franklincountyal.org +Geneva County,Alabama,http://www.genevacounty.us/ +Hale County,Alabama,http://www.halecountyal.com +Henry County,Alabama,http://www.henrycountyal.com/ +Houston County,Alabama,https://houstoncountyal.gov/ +Jackson County,Alabama,http://www.jacksoncountyal.gov/ +Jefferson County,Alabama,http://jeffconline.jccal.org/ +Lamar County,Alabama,http://www.lamarcounty.us/ +Lauderdale County,Alabama,https://lauderdalecountyal.gov/ +Lawrence County,Alabama,http://www.lawrencealabama.com +Lee County,Alabama,http://www.leeco.us +Limestone County,Alabama,http://limestonecounty-al.gov/ +Macon County,Alabama,https://www.maconalabama.com/ +Madison County,Alabama,https://www.madisoncountyal.gov +Marengo County,Alabama,http://marengocountyal.com/ +Marion County,Alabama,http://marioncountyalabama.org/ +Marshall County,Alabama,http://www.marshallco.org +Mobile County,Alabama,http://MobileCountyAL.gov +Monroe County,Alabama,http://www.monroecountyal.com +Montgomery County,Alabama,http://www.mc-ala.org +Morgan County,Alabama,http://www.co.morgan.al.us +Perry County,Alabama,http://www.perrysheriff.com +Pickens County,Alabama,http://www.pickenscountyal.com/ +Pike County,Alabama,http://www.alabamagis.com/Pike/ +Randolph County,Alabama,http://randolphcountyalabama.gov/ +Russell County,Alabama,http://www.rcala.com +St. Clair County,Alabama,http://www.stclairco.com +Shelby County,Alabama,http://www.shelbycountyalabama.com +Sumter County,Alabama,http://sumtercountyal.com/ +Talladega County,Alabama,http://www.talladegacountyal.org/ +Tallapoosa County,Alabama,http://www.tallaco.com/ +Tuscaloosa County,Alabama,http://www.tuscco.com +Walker County,Alabama,http://www.walkercounty.com +Mobile,AL MSA,http://MobileCountyAL.gov +Winston County,Alabama,http://www.winstoncountyalabama.org/ +Aleutians East Borough,Alaska,http://www.aleutianseast.org +Anchorage,Alaska,https://www.muni.org/ +Bristol Bay Borough,Alaska,http://www.bristolbayboroughak.us/ +Denali Borough,Alaska,http://www.denaliborough.com +Fairbanks North Star Borough,Alaska,http://www.co.fairbanks.ak.us +Haines Borough,Alaska,http://www.hainesborough.us +Juneau,Alaska,https://juneau.org/ +Kenai Peninsula Borough,Alaska,http://www.borough.kenai.ak.us +Ketchikan Gateway Borough,Alaska,http://www.kgbak.us +Kodiak Island Borough,Alaska,http://www.kodiakak.us +Lake and Peninsula Borough,Alaska,http://www.lakeandpen.com +Matanuska-Susitna Borough,Alaska,http://www.matsugov.us +North Slope Borough,Alaska,https://www.north-slope.org/ +Northwest Arctic Borough,Alaska,http://www.nwabor.org +Petersburg Borough,Alaska,https://www.petersburgak.gov/ +Sitka,Alaska,https://www.cityofsitka.com +Skagway,Alaska,http://www.skagway.org +Wrangell,Alaska,http://www.wrangell.com +Yakutat,Alaska,http://yakutatak.govoffice2.com +Apache County,Arizona,https://www.apachecountyaz.gov +Cochise County,Arizona,https://www.cochise.az.gov +Coconino County,Arizona,http://coconino.az.gov +Gila County,Arizona,http://www.gilacountyaz.gov/ +Graham County,Arizona,http://www.graham.az.gov +Greenlee County,Arizona,http://www.co.greenlee.az.us +La Paz County,Arizona,http://www.co.la-paz.az.us +Maricopa County,Arizona,http://www.maricopa.gov +Mohave County,Arizona,https://www.mohave.gov +Navajo County,Arizona,https://www.navajocountyaz.gov/ +Pima County,Arizona,http://www.pima.gov +Pinal County,Arizona,http://www.pinalcountyaz.gov +Santa Cruz County,Arizona,http://www.co.santa-cruz.az.us +Yavapai County,Arizona,https://yavapaiaz.gov/ +Yuma County,Arizona,http://www.yumacountyaz.gov +Ashley County,Arkansas,https://www.ashleycountyar.com +Baxter County,Arkansas,http://www.baxtercounty.org/ +Benton County,Arkansas,http://www.bentoncountyar.gov +Boone County,Arkansas,http://www.boonecountyar.com/ +Bradley County,Arkansas,http://www.bradleycountyarkansas.com +Calhoun County,Arkansas,https://calhouncounty.arkansas.gov/ +Carroll County,Arkansas,http://carrollcounty.us/ +Chicot County,Arkansas,http://chicotcounty.arkansas.gov/index +Clark County,Arkansas,https://clarkcountyar.gov/ +Clay County,Arkansas,http://claycounty.arkansas.gov +Cleburne County,Arkansas,http://www.cleburnecountyar.com/ +Cleveland County,Arkansas,http://clevelandcounty.arkansas.gov/ +Columbia County,Arkansas,http://www.countyofcolumbia.org/ +Conway County,Arkansas,https://conwaycountyar.com/ +Craighead County,Arkansas,http://www.craigheadcounty.org/ +Crawford County,Arkansas,http://www.crawford-county.org/ +Crittenden County,Arkansas,http://crittenden.ark.org/ +Cross County,Arkansas,http://crosscountyar.org/ +Desha County,Arkansas,http://deshacounty.arkansas.gov +Drew County,Arkansas,http://drewcounty.arkansas.gov/ +Faulkner County,Arkansas,http://www.faulknercounty.org +Fulton County,Arkansas,http://fulton.ark.org/ +Grant County,Arkansas,http://www.grantcountyar.com +Greene County,Arkansas,http://county.arkansas.gov/greene/ +Hempstead County,Arkansas,https://hempsteadcountyar.com/ +Hot Spring County,Arkansas,http://www.hotspringcounty.org +Independence County,Arkansas,http://www.independencecounty.com/ +Izard County,Arkansas,http://www.izardcountyar.org/ +Jackson County,Arkansas,http://www.jacksoncountyar.org/ +Jefferson County,Arkansas,http://jeffersoncounty.arkansas.gov +Johnson County,Arkansas,http://johnsoncounty.arkansas.gov/ +Lafayette County,Arkansas,http://www.lafayettecounty.arkansas.gov +Lawrence County,Arkansas,http://www.lawrencecountyarkansas.com/ +Lee County,Arkansas,http://leecounty.arkansas.gov +Lincoln County,Arkansas,http://lincolncounty.arkansas.gov/ +Madison County,Arkansas,http://madisoncogov.com/ +Marion County,Arkansas,http://marioncounty.arkansas.gov/ +Miller County,Arkansas,http://www.millercountyar.com/ +Mississippi County,Arkansas,https://www.mississippicountyar.org +Montgomery County,Arkansas,https://montgomerycounty.arkansas.gov/ +Nevada County,Arkansas,http://nevadacounty.arkansas.gov/ +Perry County,Arkansas,http://perrycoarkansas.org/ +Phillips County,Arkansas,http://phillipscounty.arkansas.gov/ +Poinsett County,Arkansas,http://www.poinsettcounty.us +Pope County,Arkansas,http://www.popecountyar.com +Pulaski County,Arkansas,http://pulaskicounty.net/ +Sebastian County,Arkansas,http://www.sebastiancountyar.gov/ +Sharp County,Arkansas,http://sharpcounty.arkansas.gov/ +Union County,Arkansas,http://www.unioncountyar.com +Van Buren County,Arkansas,http://www.vanburencountyark.com/ +Washington County,Arkansas,http://www.co.washington.ar.us +White County,Arkansas,http://www.whitecountyar.org/ +Woodruff County,Arkansas,https://woodruffcounty.arkansas.gov/ +Yell County,Arkansas,http://yellcountyar.gov +Alameda County,California,http://www.acgov.org +Alpine County,California,http://www.alpinecountyca.gov +Amador County,California,http://www.co.amador.ca.us +Butte County,California,http://www.buttecounty.net +Calaveras County,California,http://calaverasgov.us +Colusa County,California,http://www.countyofcolusa.org +Contra Costa County,California,http://www.contracosta.ca.gov +Del Norte County,California,http://www.co.del-norte.ca.us +El Dorado County,California,http://www.edcgov.us +Fresno County,California,http://www.co.fresno.ca.us +Glenn County,California,http://www.countyofglenn.net/ +Humboldt County,California,http://humboldtgov.org +Imperial County,California,http://www.co.imperial.ca.us +Inyo County,California,http://www.inyocounty.us +Kern County,California,http://www.co.kern.ca.us +Kings County,California,http://countyofkings.com +Lake County,California,https://www.lakecountyca.gov/ +Lassen County,California,http://www.co.lassen.ca.us +Los Angeles County,California,https://lacounty.gov/ +Madera County,California,http://www.maderacounty.com +Marin County,California,http://www.co.marin.ca.us +Mariposa County,California,http://www.mariposacounty.org +Mendocino County,California,https://www.mendocinocounty.org/ +Merced County,California,http://www.co.merced.ca.us +Modoc County,California,http://www.co.modoc.ca.us +Mono County,California,http://www.monocounty.ca.gov +Monterey County,California,http://www.co.monterey.ca.us/ +Napa County,California,http://www.countyofnapa.org +Nevada County,California,http://www.mynevadacounty.com +Orange County,California,http://OCGov.com +Placer County,California,http://www.Placer.CA.gov +Plumas County,California,http://www.countyofplumas.com +Riverside County,California,http://www.countyofriverside.us/ +Sacramento County,California,http://www.saccounty.net +San Benito County,California,http://www.cosb.us +San Bernardino County,California,http://www.SBCounty.gov +San Diego County,California,http://www.sandiegocounty.gov +San Joaquin County,California,http://www.sjgov.org +San Luis Obispo County,California,http://www.co.slo.ca.us +San Mateo County,California,http://www.smcgov.org +Santa Barbara County,California,https://www.countyofsb.org +Santa Clara County,California,http://www.sccgov.org +Santa Cruz County,California,http://www.co.santa-cruz.ca.us +Shasta County,California,https://www.shastacounty.gov +Sierra County,California,http://www.sierracounty.ca.gov +Siskiyou County,California,http://www.co.siskiyou.ca.us +Solano County,California,http://www.solanocounty.com +Sonoma County,California,https://sonomacounty.ca.gov +Stanislaus County,California,http://www.stancounty.com +Sutter County,California,http://www.co.sutter.ca.us +Tehama County,California,http://www.co.tehama.ca.us +Trinity County,California,http://www.trinitycounty.org +Tulare County,California,http://tularecounty.ca.gov +Tuolumne County,California,http://www.co.tuolumne.ca.us +Ventura County,California,http://www.countyofventura.org +Yolo County,California,http://www.yolocounty.org +Yuba County,California,http://www.co.yuba.ca.us +Adams County,Colorado,http://www.adcogov.org +Alamosa County,Colorado,https://alamosacounty.colorado.gov/ +Arapahoe County,Colorado,http://www.arapahoegov.com/ +Archuleta County,Colorado,http://www.archuletacounty.org +Baca County,Colorado,http://bacacountyco.gov +Bent County,Colorado,http://www.bentcounty.net +Boulder County,Colorado,http://www.bouldercounty.org +Broomfield,Colorado,http://www.broomfield.org +Chaffee County,Colorado,http://www.chaffeecounty.org/ +Cheyenne County,Colorado,http://www.co.cheyenne.co.us +Clear Creek County,Colorado,http://www.clearcreekcounty.us +Conejos County,Colorado,http://www.conejoscounty.org +Costilla County,Colorado,http://costillacounty.colorado.gov +Crowley County,Colorado,http://crowleycounty.colorado.gov +Custer County,Colorado,http://custercountygov.com +Delta County,Colorado,http://www.deltacounty.com +Dolores County,Colorado,http://dolocnty.colorado.gov +Douglas County,Colorado,http://www.douglas.co.us +Eagle County,Colorado,http://www.eaglecounty.us +Elbert County,Colorado,http://www.elbertcounty-co.gov +El Paso County,Colorado,http://www.elpasoco.com +Fremont County,Colorado,http://www.fremontco.com +Garfield County,Colorado,http://www.garfield-county.com +Gilpin County,Colorado,http://www.co.gilpin.co.us +Grand County,Colorado,http://co.grand.co.us +Gunnison County,Colorado,http://www.gunnisoncounty.org +Hinsdale County,Colorado,http://hinsdalecounty.colorado.gov +Huerfano County,Colorado,http://www.huerfano.us/ +Jackson County,Colorado,http://jacksoncountycogov.com/ +Jefferson County,Colorado,http://www.jeffco.us +Kiowa County,Colorado,http://www.kiowacounty-colorado.com +Kit Carson County,Colorado,http://kitcarsoncounty.colorado.gov +Lake County,Colorado,http://www.lakecountyco.com +La Plata County,Colorado,http://co.laplata.co.us +Larimer County,Colorado,http://www.larimer.org/ +Las Animas County,Colorado,https://lasanimascounty.colorado.gov/ +Lincoln County,Colorado,http://lincolncounty.colorado.gov/ +Logan County,Colorado,http://logancounty.colorado.gov/ +Mesa County,Colorado,http://www.mesacounty.us +Mineral County,Colorado,http://mineralcounty.colorado.gov/ +Moffat County,Colorado,http://moffatcounty.colorado.gov/ +Montezuma County,Colorado,https://montezumacounty.org +Montrose County,Colorado,http://www.montrosecounty.net +Morgan County,Colorado,http://morgancounty.colorado.gov/ +Otero County,Colorado,https://oterocounty.colorado.gov +Ouray County,Colorado,http://www.ouraycountyco.gov +Park County,Colorado,http://www.parkco.us +Phillips County,Colorado,http://phillipscounty.colorado.gov/ +Pitkin County,Colorado,http://www.pitkincounty.com/ +Prowers County,Colorado,http://www.prowerscounty.net +Pueblo County,Colorado,http://county.pueblo.org/ +Rio Blanco County,Colorado,http://www.rbc.us +Rio Grande County,Colorado,http://www.riograndecounty.org +Routt County,Colorado,http://www.co.routt.co.us/ +Saguache County,Colorado,http://saguachecounty.colorado.gov/ +San Juan County,Colorado,http://sanjuancounty.colorado.gov/ +San Miguel County,Colorado,https://www.sanmiguelcountyco.gov/ +Sedgwick County,Colorado,http://sedgwickcounty.colorado.gov/ +Summit County,Colorado,http://www.summitcountyco.gov/ +Teller County,Colorado,http://www.co.teller.co.us +Washington County,Colorado,http://washingtoncounty.colorado.gov/ +Weld County,Colorado,http://www.weldgov.com +Yuma County,Colorado,http://www.yumacounty.net +Kent County,Delaware,http://www.co.kent.de.us +New Castle County,Delaware,http://www.nccde.org +Sussex County,Delaware,http://www.sussexcountyde.gov +Washington,D.C.,https://dc.gov/ +Alachua County,Florida,http://www.alachuacounty.us/ +Baker County,Florida,http://www.bakercountyfl.org +Bay County,Florida,http://www.co.bay.fl.us/ +Bradford County,Florida,http://www.bradfordcountyfl.gov/ +Brevard County,Florida,https://www.brevardfl.gov/ +Broward County,Florida,http://www.broward.org +Calhoun County,Florida,https://calhouncountygov.com/ +Charlotte County,Florida,http://www.CharlotteCountyfl.gov +Citrus County,Florida,https://www.citrusbocc.com/ +Clay County,Florida,http://www.claycountygov.com/ +Collier County,Florida,http://www.colliergov.net +Columbia County,Florida,http://www.columbiacountyfla.com +DeSoto County,Florida,http://www.desotobocc.com +Dixie County,Florida,http://dixie.fl.gov +Duval County,Florida,http://coj.net +Escambia County,Florida,http://myescambia.com +Flagler County,Florida,http://www.flaglercounty.org +Franklin County,Florida,http://www.franklincountyflorida.com +Gadsden County,Florida,http://www.gadsdengov.net +Gilchrist County,Florida,http://gilchrist.fl.us +Glades County,Florida,http://www.myglades.com +Gulf County,Florida,http://www.gulfcounty-fl.gov/ +Hamilton County,Florida,http://www.hamiltoncountyfl.com +Hardee County,Florida,http://www.hardeecounty.net +Hendry County,Florida,http://www.hendryfla.net +Hernando County,Florida,http://www.hernandocounty.us +Highlands County,Florida,http://www.hcbcc.net +Hillsborough County,Florida,http://www.hillsboroughcounty.org/ +Holmes County,Florida,https://holmescountyonline.com/ +Indian River County,Florida,http://www.ircgov.com/ +Jackson County,Florida,http://www.jacksoncountyfl.net/ +Jefferson County,Florida,http://www.jeffersoncountyfl.gov +Lafayette County,Florida,http://www.lafayettecountyfl.net +Lake County,Florida,http://www.lakecountyfl.gov +Lee County,Florida,http://www.leegov.com +Leon County,Florida,http://www.leoncountyfl.gov/ +Levy County,Florida,http://www.levycounty.org +Liberty County,Florida,https://libertyclerk.com/ +Madison County,Florida,http://www.madisoncountyfl.com +Manatee County,Florida,http://www.mymanatee.org +Marion County,Florida,http://www.marioncountyfl.org +Martin County,Florida,http://www.martin.fl.us +Miami-Dade County,Florida,http://www.miamidade.gov +Monroe County,Florida,http://www.monroecounty-fl.gov +Nassau County,Florida,http://www.nassaucountyfl.com +Okaloosa County,Florida,http://www.co.okaloosa.fl.us/ +Okeechobee County,Florida,http://www.co.okeechobee.fl.us +Orange County,Florida,http://www.orangecountyfl.net/ +Osceola County,Florida,http://www.osceola.org/ +Palm Beach County,Florida,http://www.co.palm-beach.fl.us +Pasco County,Florida,http://www.pascocountyfl.net +Pinellas County,Florida,http://www.pinellascounty.org/ +Polk County,Florida,http://www.polk-county.net +Putnam County,Florida,https://main.putnam-fl.com/ +St. Johns County,Florida,http://www.sjcfl.us +St. Lucie County,Florida,http://www.stlucieco.gov/ +Santa Rosa County,Florida,http://www.santarosa.fl.gov/ +Sarasota County,Florida,http://www.scgov.net +Seminole County,Florida,http://www.seminolecountyfl.gov +Sumter County,Florida,http://www.sumtercountyfl.gov/ +Suwannee County,Florida,https://suwanneecountyfl.gov/ +Taylor County,Florida,http://www.taylorcountygov.com +Union County,Florida,http://www.unioncounty-fl.gov/ +Volusia County,Florida,http://www.volusia.org +Wakulla County,Florida,http://www.mywakulla.com +Walton County,Florida,http://www.co.walton.fl.us +Appling County,Georgia,http://www.baxley.org/ +Atkinson County,Georgia,https://atkinsoncounty.org/ +Baldwin County,Georgia,http://www.baldwincountyga.com +Banks County,Georgia,http://www.bankscountyga.org +Barrow County,Georgia,http://www.barrowga.org +Bartow County,Georgia,http://www.bartowga.org/ +Ben Hill County,Georgia,http://www.benhillcounty.com +Berrien County,Georgia,http://www.berriencountygeorgia.com/ +Bibb County,Georgia,http://www.co.bibb.ga.us +Bleckley County,Georgia,http://www.bleckley.org/index.asp +Brantley County,Georgia,https://brantleycountyga.com/ +Brooks County,Georgia,https://www.brookscountyga.gov/ +Bryan County,Georgia,http://www.bryancountyga.org/ +Bulloch County,Georgia,http://www.bullochcounty.net/ +Burke County,Georgia,http://www.burkecounty-ga.gov/ +Butts County,Georgia,http://buttscountyga.com/ +Calhoun County,Georgia,http://calhouncountyga.com +Camden County,Georgia,http://www.co.camden.ga.us/ +Candler County,Georgia,http://metter-candler.com/ +Carroll County,Georgia,http://www.carrollcountyga.com +Catoosa County,Georgia,http://www.catoosa.com +Charlton County,Georgia,https://www.charltoncountyga.us/ +Chatham County,Georgia,http://www.chathamcountyga.gov +Chattahoochee County,Georgia,https://www.ugoccc.com/ +Cherokee County,Georgia,http://www.cherokeega.com +Clarke County,Georgia,http://www.athensclarkecounty.com +Clay County,Georgia,http://www.claycountyga.net/ +Clayton County,Georgia,http://www.claytoncountyga.gov/ +Clinch County,Georgia,https://clinchcountyga.gov +Cobb County,Georgia,http://www.cobbcounty.org +Coffee County,Georgia,http://coffeecountygov.com/ +Colquitt County,Georgia,http://www.ccboc.com/ +Columbia County,Georgia,http://www.columbiacountyga.gov/ +Cook County,Georgia,http://www.cookcountyga.us +Crisp County,Georgia,http://www.crispcounty.com +Dade County,Georgia,http://www.dadecounty-ga.gov/ +Dawson County,Georgia,http://www.dawsoncounty.org/ +Decatur County,Georgia,http://www.decaturcountyga.gov +DeKalb County,Georgia,http://www.dekalbcountyga.gov +Dodge County,Georgia,http://www.dodgecountyga.com +Dooly County,Georgia,http://doolycountyga.com/ +Dougherty County,Georgia,http://www.albany.ga.us/content/1800 +Douglas County,Georgia,http://www.celebratedouglascounty.com/ +Early County,Georgia,http://earlycounty.georgia.gov/ +Echols County,Georgia,http://echolscountyga.com/ +Effingham County,Georgia,http://www.effinghamcounty.org +Elbert County,Georgia,http://www.elbertga.us/ +Emanuel County,Georgia,http://www.emanuelco-ga.gov/ +Evans County,Georgia,http://www.evanscounty.org +Fannin County,Georgia,http://fannincountyga.org/ +Fayette County,Georgia,http://www.fayettecountyga.gov +Floyd County,Georgia,https://www.floydcountyga.gov +Forsyth County,Georgia,https://www.forsythco.com +Franklin County,Georgia,http://www.franklincountyga.gov +Fulton County,Georgia,http://www.fultoncountyga.gov/ +Gilmer County,Georgia,http://www.gilmercounty-ga.gov +Glascock County,Georgia,http://www.glascockcountyga.com +Glynn County,Georgia,http://www.glynncounty.org +Gordon County,Georgia,http://gordoncounty.org/ +Grady County,Georgia,http://www.gradycountyga.gov +Greene County,Georgia,http://www.greenecountyga.gov/ +Gwinnett County,Georgia,http://www.gwinnettcounty.com +Habersham County,Georgia,http://www.co.habersham.ga.us/ +Hall County,Georgia,http://www.hallcounty.org +Hancock County,Georgia,http://www.hancockcountyga.gov/ +Harris County,Georgia,http://www.harriscountyga.gov +Hart County,Georgia,http://www.hartcountyga.gov/ +Heard County,Georgia,http://HeardCountyGA.com +Henry County,Georgia,http://www.co.henry.ga.us +Houston County,Georgia,http://www.houstoncountyga.com +Irwin County,Georgia,http://www.ocillachamber.net/ +Jackson County,Georgia,http://www.jacksoncountygov.com +Jeff Davis County,Georgia,http://www.hazlehurst-jeffdavis.com/ +Jefferson County,Georgia,https://www.jeffersoncountyga.gov/ +Jenkins County,Georgia,http://www.jenkinscountyga.com/ +Johnson County,Georgia,http://www.johnsonco.org/ +Jones County,Georgia,http://www.jonescountyga.org/ +Lamar County,Georgia,http://www.lamarcountyga.com +Lanier County,Georgia,http://laniercountyboc.com/ +Laurens County,Georgia,http://www.laurenscoga.org/ +Lee County,Georgia,http://www.lee.ga.us/ +Liberty County,Georgia,http://www.libertycountyga.com/ +Lincoln County,Georgia,http://www.lincolncountyga.com +Long County,Georgia,http://www.longcountyboc.com/ +Lowndes County,Georgia,http://www.lowndescounty.com +Lumpkin County,Georgia,http://www.lumpkincounty.gov/ +McDuffie County,Georgia,http://www.thomson-mcduffie.com/ +McIntosh County,Georgia,http://www.mcintoshcountyga.com/ +Macon County,Georgia,http://www.maconcountyga.gov +Madison County,Georgia,http://www.madisoncountyga.us/ +Marion County,Georgia,http://www.marioncountyga.org +Meriwether County,Georgia,http://meriwethercountyga.us +Miller County,Georgia,https://www.millercountyga.gov/ +Mitchell County,Georgia,http://www.mitchellcountyga.net/ +Monroe County,Georgia,http://www.monroecountygeorgia.com/ +Montgomery County,Georgia,http://montgomerycountyga.gov +Murray County,Georgia,http://www.murraycountyga.org/ +Muscogee County,Georgia,http://www.columbusga.org/ +Newton County,Georgia,http://www.co.newton.ga.us +Oconee County,Georgia,http://www.oconeecounty.com +Paulding County,Georgia,http://www.paulding.gov +Peach County,Georgia,http://www.peachcounty.net +Pickens County,Georgia,http://pickenscountyga.gov/ +Pierce County,Georgia,https://piercecountyga.gov/ +Pike County,Georgia,http://www.pikecoga.com/ +Polk County,Georgia,http://www.polkgeorgia.org/ +Pulaski County,Georgia,http://hawkinsville-pulaski.org +Putnam County,Georgia,http://www.putnamcountyga.us +Rabun County,Georgia,http://www.rabuncounty.ga.gov +Randolph County,Georgia,http://www.randolphcountyga.com/government +Richmond County,Georgia,http://www.augustaga.gov +Rockdale County,Georgia,http://www.rockdalecountyga.gov +Seminole County,Georgia,http://www.seminolecountyga.com +Spalding County,Georgia,http://www.spaldingcounty.com +Stewart County,Georgia,http://www.stewartcountyga.gov +Sumter County,Georgia,http://www.sumtercountyga.us/ +Talbot County,Georgia,http://talbotcountyga.org/ +Taliaferro County,Georgia,http://taliaferrocountyga.org/ +Tattnall County,Georgia,http://www.tattnall.com +Telfair County,Georgia,http://telfaircounty.georgia.gov/ +Terrell County,Georgia,http://www.terrellcounty-ga.com/ +Thomas County,Georgia,http://www.thomascountyboc.org +Tift County,Georgia,http://www.tiftcounty.org +Toombs County,Georgia,http://www.toombscountyga.gov/ +Towns County,Georgia,http://www.townscountyga.com/ +Treutlen County,Georgia,http://www.soperton-treutlen.org/county.html +Troup County,Georgia,http://www.troupcountyga.org +Turner County,Georgia,http://www.turnercountygeorgia.com +Twiggs County,Georgia,http://www.twiggscounty.us +Union County,Georgia,http://www.unioncountyga.gov/ +Upson County,Georgia,http://www.upsoncountyga.org/ +Walker County,Georgia,http://www.walkercountyga.gov/ +Walton County,Georgia,http://www.waltoncountyga.gov/ +Ware County,Georgia,http://www.warecounty.com +Warren County,Georgia,http://www.warrencountyga.com +Washington County,Georgia,http://washingtoncountyga.gov/ +Wayne County,Georgia,https://www.waynecountyga.us/ +Webster County,Georgia,http://www.webstercountyga.org +Wheeler County,Georgia,http://wheelercounty.georgia.gov/ +White County,Georgia,http://www.whitecountyga.gov +Whitfield County,Georgia,http://www.whitfieldcountyga.com/ +Wilcox County,Georgia,https://www.wilcoxcountygeorgia.com/ +Wilkes County,Georgia,http://www.washingtonwilkes.org/ +Wilkinson County,Georgia,http://www.wilkinsoncounty.net/ +Worth County,Georgia,http://worthcountyboc.com/ +Hawaii County,Hawaii,http://www.hawaiicounty.gov +Honolulu County,Hawaii,http://www.honolulu.gov/ +Kauai County,Hawaii,https://www.kauai.gov/ +Maui County,Hawaii,http://www.mauicounty.gov +Ada County,Idaho,http://www.adaweb.net +Adams County,Idaho,http://www.co.adams.id.us +Bannock County,Idaho,http://www.bannockcounty.us +Bear Lake County,Idaho,http://bearlakecounty.info +Bingham County,Idaho,http://www.co.bingham.id.us +Blaine County,Idaho,http://www.co.blaine.id.us +Boise County,Idaho,http://www.boisecounty.us +Bonner County,Idaho,http://bonnercounty.us/ +Bonneville County,Idaho,https://www.bonnevillecountyidaho.gov +Boundary County,Idaho,http://boundarycountyid.org +Camas County,Idaho,http://camascounty.id.gov/ +Canyon County,Idaho,http://www.canyoncounty.org +Caribou County,Idaho,http://www.cariboucounty.us/ +Cassia County,Idaho,http://www.cassiacounty.org +Clark County,Idaho,http://www.clark-co.id.gov +Clearwater County,Idaho,http://www.clearwatercounty.org +Custer County,Idaho,http://www.co.custer.id.us +Elmore County,Idaho,http://elmorecounty.org +Franklin County,Idaho,http://franklincountyidaho.org +Fremont County,Idaho,http://www.co.fremont.id.us +Gem County,Idaho,http://www.co.gem.id.us +Gooding County,Idaho,http://www.goodingcounty.org/ +Idaho County,Idaho,http://idahocounty.org +Jefferson County,Idaho,http://www.co.jefferson.id.us +Jerome County,Idaho,http://www.jeromecountyid.us +Kootenai County,Idaho,http://www.kcgov.us +Latah County,Idaho,http://latah.id.us +Lemhi County,Idaho,http://www.lemhicountyidaho.org +Lewis County,Idaho,http://lewiscountyid.us +Lincoln County,Idaho,http://www.lincolncountyid.us/ +Madison County,Idaho,http://www.co.madison.id.us +Minidoka County,Idaho,http://www.minidoka.id.us +Nez Perce County,Idaho,http://www.co.nezperce.id.us +Oneida County,Idaho,http://oneidacountyid.com +Owyhee County,Idaho,http://owyheecounty.net +Payette County,Idaho,http://www.payettecounty.org +Power County,Idaho,http://www.co.power.id.us +Shoshone County,Idaho,http://shoshonecounty.id.gov +Teton County,Idaho,http://tetoncountyidaho.gov +Twin Falls County,Idaho,http://www.twinfallscounty.org +Valley County,Idaho,http://co.valley.id.us +Washington County,Idaho,http://www.co.washington.id.us +Adams County,Illinois,http://www.co.adams.il.us +Alexander County,Illinois,https://www.alexandercountyil.com +Bond County,Illinois,https://www.bondcountyil.com/ +Boone County,Illinois,http://www.boonecountyil.org +Brown County,Illinois,https://www.browncoil.org +Bureau County,Illinois,http://bureaucounty-il.gov +Cass County,Illinois,https://co.cass.il.us/ +Champaign County,Illinois,https://www.co.champaign.il.us/HeaderMenu/Home.php +Christian County,Illinois,https://christiancountyil.com/ +Clark County,Illinois,http://www.clarkcountyil.org +Clay County,Illinois,http://claycountyillinois.org +Clinton County,Illinois,http://www.clintonco.illinois.gov +Coles County,Illinois,http://www.colesco.illinois.gov +Cook County,Illinois,http://www.cookcountyil.gov +Crawford County,Illinois,https://crawfordcountyil.org +Cumberland County,Illinois,https://cumberlandcoil.gov/ +DeKalb County,Illinois,http://www.dekalbcounty.org +DeWitt County,Illinois,http://www.dewittcountyill.com +Douglas County,Illinois,http://www.douglascountyil.com/ +DuPage County,Illinois,http://www.dupageco.org +Edgar County,Illinois,http://www.edgarcountyillinois.com +Effingham County,Illinois,http://www.co.effingham.il.us +Fayette County,Illinois,http://www.fayettecountyillinois.org +Ford County,Illinois,http://www.fordcountycourthouse.com +Franklin County,Illinois,http://www.franklincountyil.gov +Fulton County,Illinois,http://www.fultonco.org +Grundy County,Illinois,https://www.grundyco.org/ +Hamilton County,Illinois,https://www.hamiltoncountyillinois.com/ +Hancock County,Illinois,https://www.hancockcounty-il.gov/ +Hardin County,Illinois,https://www.hardincountyil.org/ +Henderson County,Illinois,http://www.hendersoncountyedc.com +Henry County,Illinois,http://www.henrycty.com +Iroquois County,Illinois,http://www.co.iroquois.il.us +Jackson County,Illinois,http://www.jacksoncounty-il.gov/ +Jefferson County,Illinois,http://www.jeffersoncountyillinois.com/ +Jersey County,Illinois,http://www.jerseycounty-il.us +Jo Daviess County,Illinois,https://www.jodaviesscountyil.gov +Kane County,Illinois,http://countyofkane.org +Kankakee County,Illinois,http://www.co.kankakee.il.us +Kendall County,Illinois,http://www.co.kendall.il.us +Knox County,Illinois,http://www.knoxcountyil.com +Lake County,Illinois,http://www.lakecountyil.gov +LaSalle County,Illinois,https://lasallecountyil.gov/ +Lawrence County,Illinois,http://www.lawrencecountyillinois.com +Lee County,Illinois,http://www.leecountyil.com/ +Livingston County,Illinois,http://www.livingstoncounty-il.org/wordpress/ +Logan County,Illinois,https://logancountyil.gov/index.php?lang=en +McDonough County,Illinois,http://mcg.mcdonough.il.us/ +McHenry County,Illinois,http://www.co.mchenry.il.us +McLean County,Illinois,http://www.mcleancountyil.gov/ +Macon County,Illinois,http://www.co.macon.il.us/ +Macoupin County,Illinois,http://www.macoupincountyil.gov/ +Madison County,Illinois,https://www.madisoncountyil.gov +Marshall County,Illinois,http://www.marshallcountyillinois.com +Mason County,Illinois,http://www.masoncountyil.org +Menard County,Illinois,http://www.menardcountyil.com +Mercer County,Illinois,http://www.mercercountyil.org +Monroe County,Illinois,https://monroecountyil.gov/ +Montgomery County,Illinois,http://www.montgomeryco.com +Moultrie County,Illinois,http://www.moultriecountyil.com/ +Ogle County,Illinois,http://www.oglecounty.org +Peoria County,Illinois,https://www.peoriacounty.org +Perry County,Illinois,https://perryil.com +Piatt County,Illinois,http://www.piattcounty.org +Pike County,Illinois,http://www.pikecountyil.org/ +Pope County,Illinois,http://www.popeco.net +Pulaski County,Illinois,https://www.pulaskicountyil.net +Putnam County,Illinois,http://www.co.putnam.il.us/ +Randolph County,Illinois,http://am.randolphco.org/ +Rock Island County,Illinois,https://rockislandcountyil.gov/ +St. Clair County,Illinois,http://www.co.st-clair.il.us +Saline County,Illinois,http://www.salinecounty.illinois.gov/ +Sangamon County,Illinois,http://www.co.sangamon.il.us +Schuyler County,Illinois,http://www.schuylercountyillinois.com +Shelby County,Illinois,http://www.shelbycounty-il.com +Stark County,Illinois,http://www.starkcountyillinois.com/ +Stephenson County,Illinois,http://www.co.stephenson.il.us +Tazewell County,Illinois,http://www.tazewell.com +Union County,Illinois,http://www.unioncountyil.gov/ +Warren County,Illinois,http://www.warrencountyil.com +Washington County,Illinois,http://www.washingtonco.illinois.gov/ +Wayne County,Illinois,http://www.fairfield-il.com/county/ +White County,Illinois,http://www.whitecounty-il.gov +Whiteside County,Illinois,http://www.whiteside.org +Will County,Illinois,http://www.willcountyillinois.com +Williamson County,Illinois,http://www.williamsoncountyil.gov/ +Winnebago County,Illinois,http://www.wincoil.us +Woodford County,Illinois,http://www.woodford-county.org/ +Adams County,Indiana,http://www.co.adams.in.us +Allen County,Indiana,http://www.co.allen.in.us +Bartholomew County,Indiana,http://www.bartholomew.in.gov +Benton County,Indiana,http://www.bentoncounty.in.gov/ +Boone County,Indiana,http://boonecounty.in.gov/ +Brown County,Indiana,http://browncounty-in.gov/Home.aspx +Carroll County,Indiana,http://www.carrollcountyindiana.com +Cass County,Indiana,http://www.co.cass.in.us +Clark County,Indiana,http://www.co.clark.in.us +Clinton County,Indiana,http://www.clintonco.com/ +Crawford County,Indiana,http://www.crawfordcounty.in.gov/ +Daviess County,Indiana,http://www.daviess.org/ +Dearborn County,Indiana,http://www.dearborncounty.org/ +Decatur County,Indiana,http://www.decaturcounty.in.gov +DeKalb County,Indiana,http://www.co.dekalb.in.us +Delaware County,Indiana,http://www.co.delaware.in.us +Elkhart County,Indiana,http://www.elkhartcountyindiana.com +Fayette County,Indiana,http://connersvillecommunity.com/fayette_county +Floyd County,Indiana,http://www.floydcounty.in.gov +Franklin County,Indiana,http://www.franklincountyin.com +Fulton County,Indiana,http://www.co.fulton.in.us +Gibson County,Indiana,http://gibsoncounty-in.gov/ +Grant County,Indiana,http://www.grantcounty.net +Greene County,Indiana,http://www.co.greene.in.us/ +Hamilton County,Indiana,http://www.hamiltoncounty.in.gov +Hancock County,Indiana,http://www.hancockcoingov.org +Hendricks County,Indiana,http://www.co.hendricks.in.us +Henry County,Indiana,http://www.henryco.net/ +Howard County,Indiana,http://www.co.howard.in.us +Huntington County,Indiana,http://www.huntington.in.us/county/ +Jackson County,Indiana,http://www.jacksoncounty.in.gov +Jasper County,Indiana,http://www.jaspercountyin.gov +Jay County,Indiana,http://www.co.jay.in.us +Jefferson County,Indiana,http://jeffersoncounty.in.gov/index.php +Johnson County,Indiana,http://www.co.johnson.in.us +Knox County,Indiana,http://www.knoxcounty.in.gov +Kosciusko County,Indiana,http://www.kcgov.com +LaGrange County,Indiana,http://www.lagrangecounty.org +Lake County,Indiana,http://www.lakecountyin.org/ +LaPorte County,Indiana,http://www.laportecounty.org +Madison County,Indiana,http://www.madisoncty.com +Marion County,Indiana,http://www.indy.gov/eGov/County +Marshall County,Indiana,http://www.co.marshall.in.us +Martin County,Indiana,http://www.loogootee.com/government/martincountygovernment.html +Miami County,Indiana,http://www.MiamiCountyIN.gov +Monroe County,Indiana,http://www.co.monroe.in.us +Montgomery County,Indiana,http://www.montgomerycounty.in.gov +Morgan County,Indiana,http://www.morgancounty.in.gov/ +Newton County,Indiana,http://www.newtoncounty.in.gov/ +Noble County,Indiana,http://nobleco.squarespace.com/ +Owen County,Indiana,http://owencounty.in.gov/ +Parke County,Indiana,http://www.parkecounty.org +Perry County,Indiana,http://www.perrycounty.in.gov/ +Pike County,Indiana,https://www.pikecounty.in.gov +Porter County,Indiana,http://www.porterco.org +Posey County,Indiana,http://www.poseycountyin.gov/ +Pulaski County,Indiana,http://www.pulaskionline.org +Putnam County,Indiana,http://co.putnam.in.us +Randolph County,Indiana,http://randolphcounty.us/ +Ripley County,Indiana,http://www.ripleycounty.com/ +Rush County,Indiana,http://rushcounty.in.gov/ +St. Joseph County,Indiana,http://www.sjcindiana.com +Shelby County,Indiana,http://www.co.shelby.in.us +Spencer County,Indiana,http://spencercounty.in.gov/ +Starke County,Indiana,http://www.co.starke.in.us +Steuben County,Indiana,http://www.steubencounty.com/ +Sullivan County,Indiana,http://www.sullivancounty.in.gov +Switzerland County,Indiana,http://www.switzerland-county.com/ +Tippecanoe County,Indiana,https://www.tippecanoe.in.gov/ +Union County,Indiana,http://www.unioncountyin.gov +Vanderburgh County,Indiana,http://www.vanderburghgov.org +Vermillion County,Indiana,http://www.vermilliongov.us +Vigo County,Indiana,http://www.vigocounty.in.gov/ +Wabash County,Indiana,http://www.wabashcounty.in.gov/ +Warren County,Indiana,http://www.warrencounty.in.gov/ +Warrick County,Indiana,http://www.warrickcounty.gov/ +Washington County,Indiana,http://www.washingtoncounty.in.gov +Wayne County,Indiana,http://co.wayne.in.us +Wells County,Indiana,http://www.wellscounty.org +White County,Indiana,http://www.whitecountyin.us/ +Whitley County,Indiana,https://whitleygov.com/ +Adair County,Iowa,http://www.adaircountyiowa.org +Adams County,Iowa,https://adamscounty.iowa.gov/ +Allamakee County,Iowa,https://allamakeecounty.iowa.gov/ +Appanoose County,Iowa,https://appanoosecounty.iowa.gov/ +Audubon County,Iowa,https://www.auduboncountyia.gov/ +Benton County,Iowa,https://www.bentoncountyia.gov/ +Boone County,Iowa,https://www.boonecounty.iowa.gov/ +Bremer County,Iowa,https://www.bremercounty.iowa.gov/ +Buchanan County,Iowa,http://www.buchanancountyiowa.org +Buena Vista County,Iowa,https://buenavistacounty.iowa.gov/ +Butler County,Iowa,https://butlercounty.iowa.gov/ +Calhoun County,Iowa,https://www.calhouncounty.iowa.gov/ +Carroll County,Iowa,https://www.carrollcountyiowa.gov/ +Cass County,Iowa,https://www.casscountyia.gov/ +Cedar County,Iowa,https://cedarcounty.iowa.gov/ +Cherokee County,Iowa,https://www.cherokeecounty.iowa.gov/ +Chickasaw County,Iowa,https://chickasawcounty.iowa.gov/ +Clarke County,Iowa,https://clarkecounty.iowa.gov/ +Clay County,Iowa,https://claycounty.iowa.gov/ +Clayton County,Iowa,http://www.claytoncountyia.gov +Clinton County,Iowa,http://www.clintoncounty-ia.gov +Crawford County,Iowa,https://www.crawfordcounty.iowa.gov/ +Dallas County,Iowa,https://www.dallascountyiowa.gov/ +Davis County,Iowa,http://www.daviscountyiowa.org +Decatur County,Iowa,http://www.decaturcountyiowa.org/ +Delaware County,Iowa,https://delawarecounty.iowa.gov/ +Des Moines County,Iowa,https://www.desmoinescounty.iowa.gov/ +Dickinson County,Iowa,https://dickinsoncountyiowa.gov/ +Dubuque County,Iowa,https://www.dubuquecountyiowa.gov/ +Emmet County,Iowa,https://emmetcounty.iowa.gov/ +Fayette County,Iowa,https://fayettecounty.iowa.gov/ +Floyd County,Iowa,https://www.floydco.iowa.gov/ +Franklin County,Iowa,https://www.franklincountyia.gov/ +Fremont County,Iowa,https://www.fremontcountyia.gov/ +Greene County,Iowa,http://www.co.greene.ia.us +Grundy County,Iowa,https://www.grundycountyiowa.gov/ +Guthrie County,Iowa,http://www.guthriecounty.org +Hamilton County,Iowa,https://www.hamiltoncounty.iowa.gov/ +Hancock County,Iowa,https://hancockcountyia.gov/ +Hardin County,Iowa,https://www.hardincountyia.gov/ +Harrison County,Iowa,http://www.harrisoncountyia.org +Henry County,Iowa,https://henrycounty.iowa.gov/ +Howard County,Iowa,https://howardcounty.iowa.gov/ +Humboldt County,Iowa,https://www.humboldtcounty.iowa.gov/ +Ida County,Iowa,https://idacounty.iowa.gov/ +Iowa County,Iowa,https://iowacounty.iowa.gov/ +Jackson County,Iowa,https://jacksoncounty.iowa.gov/ +Jasper County,Iowa,http://www.co.jasper.ia.us +Des Moines,Iowa,http://www.dmgov.org/ +Jefferson County,Iowa,https://jeffersoncounty.iowa.gov/ +Johnson County,Iowa,https://www.johnsoncountyiowa.gov/ +Jones County,Iowa,https://www.jonescountyiowa.gov/ +Keokuk County,Iowa,https://www.keokukcountyia.com/ +Kossuth County,Iowa,https://kossuthcounty.iowa.gov/ +Lee County,Iowa,http://www.leecounty.org +Linn County,Iowa,https://www.linncountyiowa.gov/ +Louisa County,Iowa,https://louisacountyia.gov/ +Lyon County,Iowa,https://lyoncounty.iowa.gov/ +Madison County,Iowa,https://madisoncounty.iowa.gov/ +Mahaska County,Iowa,https://www.mahaskacountyia.gov/ +Marion County,Iowa,https://www.marioncountyiowa.gov/ +Marshall County,Iowa,http://www.marshallcountyia.gov +Mills County,Iowa,https://www.millscountyiowa.gov/ +Mitchell County,Iowa,https://mitchellcounty.iowa.gov/ +Monona County,Iowa,https://www.mononacounty.org/ +Monroe County,Iowa,https://monroecounty.iowa.gov/ +Montgomery County,Iowa,https://montgomerycountyia.gov/ +Muscatine County,Iowa,https://www.muscatinecountyiowa.gov/ +O'Brien County,Iowa,https://obriencounty.iowa.gov/ +Osceola County,Iowa,https://osceolacountyia.gov/ +Page County,Iowa,https://pagecounty.iowa.gov/ +Palo Alto County,Iowa,https://paloaltocounty.iowa.gov/ +Plymouth County,Iowa,http://www.co.plymouth.ia.us +Pocahontas County,Iowa,https://pocahontascounty.iowa.gov/ +Polk County,Iowa,https://www.polkcountyiowa.gov/ +Pottawattamie County,Iowa,https://www.pottcounty-ia.gov/ +Poweshiek County,Iowa,https://poweshiekcounty.org/ +Ringgold County,Iowa,https://www.ringgoldcounty.iowa.gov/ +Sac County,Iowa,https://www.saccountyiowa.gov/ +Scott County,Iowa,https://www.scottcountyiowa.gov/ +Shelby County,Iowa,https://shelbycounty.iowa.gov/ +Sioux County,Iowa,https://siouxcountyia.gov/ +Story County,Iowa,https://www.storycountyiowa.gov/ +Tama County,Iowa,http://www.tamacounty.iowa.gov +Taylor County,Iowa,https://taylorcounty.iowa.gov/ +Union County,Iowa,https://unioncountyiowa.gov/ +Van Buren County,Iowa,https://www.vanburencounty.iowa.gov/ +Wapello County,Iowa,http://www.wapellocounty.org +Warren County,Iowa,http://www.warrencountyia.org +Washington County,Iowa,https://washingtoncounty.iowa.gov/ +Wayne County,Iowa,https://www.waynecountyia.com/ +Webster County,Iowa,https://www.webstercountyia.gov/ +Winnebago County,Iowa,https://www.winnebagocountyiowa.gov +Winneshiek County,Iowa,https://winneshiekcounty.iowa.gov/ +Woodbury County,Iowa,http://www.woodburycountyiowa.gov +Worth County,Iowa,https://worthcountyiowa.gov/ +Wright County,Iowa,https://wrightcounty.iowa.gov/ +Allen County,Kansas,https://www.allencounty.org/ +Anderson County,Kansas,http://www.andersoncountyks.org/ +Atchison County,Kansas,https://www.atchisoncountyks.org/ +Barber County,Kansas,http://barber.ks.gov/ +Barton County,Kansas,https://www.bartoncounty.org/ +Bourbon County,Kansas,https://www.bourboncountyks.org/ +Brown County,Kansas,https://www.brcoks.org/ +Butler County,Kansas,https://www.bucoks.com/ +Chase County,Kansas,https://chasecountyks.com/ +Chautauqua County,Kansas,https://www.chautauquacountyks.com/ +Cherokee County,Kansas,http://cherokeecountyks.gov/ +Cheyenne County,Kansas,https://cncoks.us/ +Clark County,Kansas,http://www.clarkcountyks.com/ +Clay County,Kansas,https://www.claycountykansas.org/ +Cloud County,Kansas,http://www.cloudcountyks.org/ +Coffey County,Kansas,https://www.coffeycountyks.org/ +Comanche County,Kansas,http://www.comanchecoks.org/ +Cowley County,Kansas,https://www.cowleycounty.org/ +Crawford County,Kansas,https://www.crawfordcountykansas.org/ +Decatur County,Kansas,http://oberlinks.com/ +Dickinson County,Kansas,http://www.dkcoks.org/ +Doniphan County,Kansas,https://dpcountyks.com/ +Douglas County,Kansas,https://www.douglascountyks.org/ +Edwards County,Kansas,http://www.edwardscounty.org/ +Elk County,Kansas,https://www.elkcountyks.org/ +Ellis County,Kansas,https://www.ellisco.net/ +Ellsworth County,Kansas,http://www.ellsworthcounty.org/ +Finney County,Kansas,https://www.finneycounty.org/ +Ford County,Kansas,http://www.fordcounty.net/ +Franklin County,Kansas,http://www.franklincoks.org/ +Geary County,Kansas,https://www.gearycounty.org/ +Gove County,Kansas,https://govecountyks.org/ +Graham County,Kansas,https://www.grahamcountyks.com/ +Grant County,Kansas,http://www.grantcoks.org/ +Gray County,Kansas,http://www.grayco.org/ +Greeley County,Kansas,http://greeleycounty.org/ +Greenwood County,Kansas,http://www.greenwoodcounty.org/ +Hamilton County,Kansas,https://syracuseks.gov/county-boards-and-commissions +Harper County,Kansas,http://www.harpercountyks.gov/ +Harvey County,Kansas,https://www.harveycounty.com/ +Haskell County,Kansas,https://www.haskellcounty.org/ +Hodgeman County,Kansas,https://hodgemancountyks.com/ +Jackson County,Kansas,https://jacksoncountyks.com/ +Jefferson County,Kansas,https://www.jfcountyks.com/ +Jewell County,Kansas,https://jewellcountykansas.net/ +Johnson County,Kansas,https://www.jocogov.org/ +Kearny County,Kansas,https://www.kearnycountykansas.com/ +Kingman County,Kansas,https://www.kingmancoks.org/ +Kiowa County,Kansas,https://kiowacountyks.org/ +Labette County,Kansas,https://www.labettecounty.com/ +Lane County,Kansas,http://www.lanecountyks.org/ +Leavenworth County,Kansas,https://www.leavenworthcounty.gov/ +Lincoln County,Kansas,http://www.lincolncoks.com/ +Linn County,Kansas,https://www.linncountyks.com/ +Logan County,Kansas,https://www.discoveroakley.com/ +Lyon County,Kansas,https://lyoncounty.org/ +McPherson County,Kansas,https://www.mcphersoncountyks.us/ +Marion County,Kansas,https://www.marioncoks.net/ +Marshall County,Kansas,http://ks-marshall.manatron.com/ +Meade County,Kansas,http://ks-meade.manatron.com/ +Miami County,Kansas,https://www.miamicountyks.org// +Mitchell County,Kansas,https://www.mitchellcountykansas.com/ +Montgomery County,Kansas,https://www.mgcountyks.org/ +Morris County,Kansas,https://www.morriscountyks.org/ +Morton County,Kansas,https://mtcoks.com/ +Nemaha County,Kansas,https://www.nmcoks.us/ +Neosho County,Kansas,https://www.neoshocountyks.org/ +Ness County,Kansas,http://www.nesscountyks.com/ +Norton County,Kansas,https://nortoncounty.org/ +Osage County,Kansas,http://osageco.org/ +Osborne County,Kansas,http://www.osbornecounty.org/ +Ottawa County,Kansas,http://www.ottawacounty.org/ +Pawnee County,Kansas,http://www.pawneecountykansas.com/ +Phillips County,Kansas,https://www.phillipscountyks.org/ +Pottawatomie County,Kansas,https://www.pottcounty.org/ +Pratt County,Kansas,http://www.prattcounty.org/ +Rawlins County,Kansas,https://sites.google.com/a/rawlinscounty.org/rawlins-county-courthouse/ +Reno County,Kansas,https://www.renogov.org/ +Republic County,Kansas,http://republiccounty.org/ +Rice County,Kansas,https://www.ricecounty.us/ +Riley County,Kansas,https://www.rileycountyks.gov/ +Rooks County,Kansas,https://rookscounty.net/ +Rush County,Kansas,http://www.rushcountykansas.org/ +Russell County,Kansas,http://ks-russellco.manatron.com/ +Saline County,Kansas,https://www.saline.org/ +Scott County,Kansas,http://ks-scott.manatron.com +Sedgwick County,Kansas,https://www.sedgwickcounty.org/ +Seward County,Kansas,http://www.sewardcountyks.org/ +Shawnee County,Kansas,http://www.snco.us/ +Sheridan County,Kansas,https://www.sheridancountyks.gov/ +Sherman County,Kansas,https://www.shermancountyks.gov/ +Smith County,Kansas,http://www.smithcoks.com/ +Stafford County,Kansas,https://www.staffordcounty.org/ +Stanton County,Kansas,http://stantoncountyks.com/ +Stevens County,Kansas,http://stevenscoks.org/ +Sumner County,Kansas,https://ks-sumner.publicaccessnow.com/ +Thomas County,Kansas,http://thomascountyks.gov/ +Trego County,Kansas,https://www.tregocountyks.com/ +Wabaunsee County,Kansas,https://www.wbcounty.org/ +Wallace County,Kansas,http://www.WallaceCounty.net +Washington County,Kansas,http://www.washingtoncountyks.gov/ +Wichita County,Kansas,http://www.wichitacounty.org/ +Wilson County,Kansas,http://www.wilsoncountykansas.org/ +Woodson County,Kansas,http://woodsoncounty.net/ +Wyandotte County,Kansas,https://www.wycokck.org/ +Adair County,Kentucky,http://www.columbia-adaircounty.com +Allen County,Kentucky,http://www.allencountykentucky.com +Anderson County,Kentucky,http://andersoncounty.ky.gov +Ballard County,Kentucky,http://www.ballardcounty.ky.gov/ +Barren County,Kentucky,https://barrencounty.ky.gov/ +Bath County,Kentucky,http://bathcounty.ky.gov +Bell County,Kentucky,http://bellcounty.ky.gov/default.htm +Boone County,Kentucky,http://www.boonecountyky.org/ +Bourbon County,Kentucky,http://www.bourbonky.com/ +Boyd County,Kentucky,http://boydcountyky.gov/ +Boyle County,Kentucky,http://www.boyleky.com/ +Bracken County,Kentucky,http://www.brackencounty.ky.gov +Breathitt County,Kentucky,http://breathittcounty.ky.gov +Breckinridge County,Kentucky,http://www.breckinridgecounty.net +Bullitt County,Kentucky,http://bullittky.com +Butler County,Kentucky,http://www.butlercounty.ky.gov/ +Caldwell County,Kentucky,http://www.caldwellcounty.ky.gov/ +Calloway County,Kentucky,http://www.callowaycounty-ky.gov +Campbell County,Kentucky,http://www.campbellcountyky.gov/ +Carlisle County,Kentucky,http://carlislecounty.ky.gov +Carroll County,Kentucky,http://www.carrollcountygov.us +Carter County,Kentucky,http://cartercounty.ky.gov/Pages/default.aspx +Casey County,Kentucky,http://www.libertykentucky.org +Christian County,Kentucky,http://www.christiancountyky.gov +Clark County,Kentucky,http://www.clarkcoky.com +Clay County,Kentucky,https://claycounty.ky.gov +Clinton County,Kentucky,http://clintoncounty.ky.gov +Crittenden County,Kentucky,http://www.marionky.gov/index.shtml +Cumberland County,Kentucky,http://www.cumberlandcounty.com +Daviess County,Kentucky,http://www.daviessky.org +Edmonson County,Kentucky,http://www.edmonsoncounty.ky.gov +Elliott County,Kentucky,http://elliottcounty.ky.gov/Pages/default.aspx +Estill County,Kentucky,http://www.estillky.com/ +Richmond,Kentucky,http://www.richmond.ky.us +Fayette County,Kentucky,http://www.lexingtonky.gov +Fleming County,Kentucky,http://www.flemingkychamber.com +Floyd County,Kentucky,http://www.floydcountykentucky.com +Franklin County,Kentucky,http://franklincounty.ky.gov +Fulton County,Kentucky,http://www.fultoncounty.ky.gov/ +Gallatin County,Kentucky,http://gallatincounty.ky.gov +Garrard County,Kentucky,https://garrardcounty.us/ +Grant County,Kentucky,http://grantcounty.ky.gov +Graves County,Kentucky,http://www.gravescountyky.com +Grayson County,Kentucky,http://graysoncountyky.gov +Green County,Kentucky,http://www.greencounty.ky.gov/ +Greenup County,Kentucky,http://greenupcounty.ky.gov/Pages/default.aspx +Hancock County,Kentucky,http://www.hancockky.us +Hardin County,Kentucky,http://www.hcky.org +Harlan County,Kentucky,http://judge-executive.harlanonline.net/ +Harrison County,Kentucky,http://www.harrisoncountyfiscalcourt.com +Hart County,Kentucky,http://www.hartcountyky.org +Henderson County,Kentucky,http://hendersonky.us/ +Henry County,Kentucky,http://www.henrycountygov.com +Hickman County,Kentucky,http://hickmancounty.ky.gov +Hopkins County,Kentucky,http://hopkinscounty.ky.gov/ +Jefferson County,Kentucky,http://www.louisvilleky.gov +Jessamine County,Kentucky,http://www.jessamineco.com +Johnson County,Kentucky,http://www.johnsoncoky.com +Kenton County,Kentucky,http://www.kentoncounty.org +Knott County,Kentucky,http://www.knottky.com +Knox County,Kentucky,https://knoxfiscalcourt.com/ +LaRue County,Kentucky,http://www.laruecounty.org +Laurel County,Kentucky,https://londonky.gov/ +Lawrence County,Kentucky,http://www.lawrencecounty.ky.gov/ +Lee County,Kentucky,http://www.leecounty.ky.gov/ +Leslie County,Kentucky,http://www.lesliecounty.ky.gov +Letcher County,Kentucky,http://letchercounty.ky.gov +Lewis County,Kentucky,http://lewiscounty.ky.gov +Lincoln County,Kentucky,http://www.lincolnky.com +Livingston County,Kentucky,http://livingstoncountyky.com/ +Logan County,Kentucky,https://logancounty.ky.gov +Lyon County,Kentucky,http://www.lyoncountyky.com/ +McCracken County,Kentucky,http://mccrackencountyky.gov +McCreary County,Kentucky,http://www.mccrearycounty.com +McLean County,Kentucky,http://www.mcleancounty.ky.gov/ +Madison County,Kentucky,http://www.madisoncountyky.us +Magoffin County,Kentucky,http://magoffincounty.ky.gov/ +Marion County,Kentucky,http://www.marioncounty.ky.gov/ +Marshall County,Kentucky,http://www.marshallcountyky.gov +Martin County,Kentucky,http://www.martincountykentucky.com +Mason County,Kentucky,http://masoncountykentucky.us/ +Meade County,Kentucky,http://www.meadeky.gov/ +Menifee County,Kentucky,http://www.menifeecounty.ky.gov +Mercer County,Kentucky,http://www.mercercounty.ky.gov +Metcalfe County,Kentucky,http://www.metcalfecounty.com/ +Monroe County,Kentucky,http://www.monroecounty.ky.gov +Montgomery County,Kentucky,http://montgomerycounty.ky.gov/Pages/default.aspx +Morgan County,Kentucky,http://morgancounty.ky.gov/Pages/default.aspx +Muhlenberg County,Kentucky,http://www.muhlenbergcountyky.org/ +Nelson County,Kentucky,http://www.nelsoncountyky.com +Nicholas County,Kentucky,http://nicholascounty.ky.gov +Ohio County,Kentucky,http://ohiocounty.ky.gov +Oldham County,Kentucky,http://www.oldhamcounty.net +Owen County,Kentucky,http://www.owencountyky.us +Pendleton County,Kentucky,http://pendletoncounty.ky.gov +Perry County,Kentucky,http://www.perrycounty.ky.gov +Pike County,Kentucky,http://www.pikecountyky.gov/ +Powell County,Kentucky,http://powellcountyky.us/ +Pulaski County,Kentucky,http://pcgovt.com +Robertson County,Kentucky,http://www.robertsoncounty.ky.gov +Rockcastle County,Kentucky,https://rockcastlecountyky.com/ +Rowan County,Kentucky,http://www.moreheadrowan.org/rowancounty +Russell County,Kentucky,http://www.russellcountyky.com +Scott County,Kentucky,http://www.scottky.gov +Shelby County,Kentucky,http://www.shelbycountykentucky.com +Simpson County,Kentucky,https://simpsoncountyky.gov/ +Spencer County,Kentucky,http://www.spencercountyky.gov +Taylor County,Kentucky,http://www.taylorcounty.us/ +Todd County,Kentucky,http://www.toddcounty.ky.gov/ +Trigg County,Kentucky,http://www.triggcounty.ky.gov/ +Trimble County,Kentucky,http://www.trimblecounty.ky.gov +Union County,Kentucky,http://www.unioncountyky.org +Warren County,Kentucky,http://www.warrencountyky.gov +Washington County,Kentucky,http://www.washingtoncountyky.com/ +Wayne County,Kentucky,http://waynecounty.ky.gov/Pages/default.aspx +Webster County,Kentucky,http://www.webstercountyky.com +Whitley County,Kentucky,http://www.whitleycountyfiscalcourt.com +Woodford County,Kentucky,http://woodfordcounty.ky.gov +Acadia Parish,Louisiana,http://www.appj.org/index.html +Allen Parish,Louisiana,https://www.allenparish.com +Ascension Parish,Louisiana,http://www.ascensionparish.net +Assumption Parish,Louisiana,https://www.assumptionla.com/ +Avoyelles Parish,Louisiana,http://www.avoypj.org/ +Beauregard Parish,Louisiana,http://www.beauparish.org +Bienville Parish,Louisiana,http://www.bienvilleparish.org +Bossier Parish,Louisiana,http://www.bossierparishla.gov/ +Caddo Parish,Louisiana,http://www.caddo.org +Calcasieu Parish,Louisiana,http://www.cppj.net/ +Caldwell Parish,Louisiana,http://www.caldwellparish.org +Catahoula Parish,Louisiana,http://www.discovercatahoula.com/ +Claiborne Parish,Louisiana,http://claiborneparish.org/ +Concordia Parish,Louisiana,http://www.conppj.org/ +De Soto Parish,Louisiana,http://www.desotoppj.com +East Baton Rouge Parish,Louisiana,https://www.brla.gov/ +East Feliciana Parish,Louisiana,https://www.eastfelicianaclerk.org/ +Iberia Parish,Louisiana,http://iberiaparishgovernment.com +Iberville Parish,Louisiana,http://www.ibervilleparish.com +Jackson Parish,Louisiana,http://www.jacksonparishpolicejury.org/Default.aspx +Jefferson Parish,Louisiana,http://www.jeffparish.net +Lafayette Parish,Louisiana,http://www.lafayettetravel.com +Lafourche Parish,Louisiana,http://www.lafourchegov.org +Lincoln Parish,Louisiana,http://www.lincolnparish.org/ +Livingston Parish,Louisiana,http://www.livingstonparishla.gov/ +Madison Parish,Louisiana,http://madisonparish.org +Natchitoches Parish,Louisiana,https://www.npgov.org/ +Ouachita Parish,Louisiana,http://oppj.org/ +Plaquemines Parish,Louisiana,http://plaqueminesparish.com/ +Pointe Coupee Parish,Louisiana,http://www.pcpolicejury.org/ +Rapides Parish,Louisiana,http://www.rppj.com +Red River Parish,Louisiana,http://rrppj.org/ +Sabine Parish,Louisiana,http://www.sabineparishpolicejury.com/ +St. Bernard Parish,Louisiana,http://www.sbpg.net +St. Charles Parish,Louisiana,https://www.stcharlesparish.gov +St. Helena Parish,Louisiana,http://sthelenaparish.la.gov/ +St. James Parish,Louisiana,http://www.stjamesla.com +St. John the Baptist Parish,Louisiana,http://www.sjbparish.com +St. Landry Parish,Louisiana,https://stlandrypg.org/ +St. Martin Parish,Louisiana,https://www.stmartinparish.net/ +St. Mary Parish,Louisiana,http://www.stmaryparishla.gov/ +St. Tammany Parish,Louisiana,http://www.stpgov.org +Tangipahoa Parish,Louisiana,http://www.tangipahoa.org +Tensas Parish,Louisiana,http://louisiana.gov/Government/Parish_Tensas/ +Terrebonne Parish,Louisiana,http://www.tpcg.org +Vermilion Parish,Louisiana,http://vermilionparishpolicejury.com +Vernon Parish,Louisiana,http://www.vppjla.com/ +Washington Parish,Louisiana,http://www.washingtonparishalerts.org/ +Webster Parish,Louisiana,http://www.websterparishla.org/index.html +West Baton Rouge Parish,Louisiana,http://www.wbrcouncil.org/Default.asp +West Feliciana Parish,Louisiana,http://wfparish.org/ +Androscoggin County,Maine,http://www.androscoggincountymaine.gov +Aroostook County,Maine,http://www.aroostook.me.us +Cumberland County,Maine,http://www.cumberlandcounty.org +Franklin County,Maine,https://franklincountymaine.gov/ +Hancock County,Maine,http://www.co.hancock.me.us +Kennebec County,Maine,http://www.kennebeccounty.org +Knox County,Maine,http://www.knoxcountymaine.gov/ +Lincoln County,Maine,http://www.lincolncountymaine.me +Oxford County,Maine,http://www.oxfordcounty.org +Penobscot County,Maine,https://www.penobscot-county.net +Piscataquis County,Maine,https://www.piscataquis.us/ +Sagadahoc County,Maine,http://www.sagcounty.com +Somerset County,Maine,http://somersetcounty-me.org/ +Waldo County,Maine,http://waldocountyme.gov/ +Washington County,Maine,http://washingtoncountymaine.com/ +York County,Maine,http://www.yorkcountymaine.gov/ +Allegany County,Maryland,http://gov.allconet.org +Anne Arundel County,Maryland,http://www.aacounty.org/ +Baltimore County,Maryland,http://www.baltimorecountymd.gov/ +Calvert County,Maryland,http://www.calvertcountymd.gov +Caroline County,Maryland,http://www.carolinemd.org/ +Carroll County,Maryland,https://carrollcountymd.gov +Cecil County,Maryland,http://www.ccgov.org +Charles County,Maryland,http://www.charlescountymd.gov +Dorchester County,Maryland,http://www.dorchestercountymd.com +Frederick County,Maryland,http://www.FrederickCountyMD.gov/ +Garrett County,Maryland,http://www.garrettcounty.org/ +Harford County,Maryland,http://www.harfordcountymd.gov +Howard County,Maryland,https://www.howardcountymd.gov/ +Kent County,Maryland,http://www.kentcounty.com +Montgomery County,Maryland,https://www.montgomerycountymd.gov/ +Prince George's County,Maryland,http://www.princegeorgescountymd.gov +Queen Anne's County,Maryland,http://www.qac.org +St. Mary's County,Maryland,http://www.stmarysmd.com +Somerset County,Maryland,http://www.somersetmd.us +Talbot County,Maryland,http://www.talbotcountymd.gov +Washington County,Maryland,http://www.washco-md.net/ +Wicomico County,Maryland,http://www.wicomicocounty.org +Worcester County,Maryland,http://www.co.worcester.md.us +Barnstable County,Massachusetts,http://www.barnstablecounty.org +Bristol County,Massachusetts,http://www.countyofbristol.net +Dukes County,Massachusetts,http://www.dukescounty.org +Nantucket,Massachusetts,http://www.nantucket-ma.gov/ +Norfolk County,Massachusetts,http://www.norfolkcounty.org +Plymouth County,Massachusetts,http://www.plymouthcountyma.gov/ +Alcona County,Michigan,https://alconacountymi.com/ +Alger County,Michigan,https://www.algercounty.gov/ +Allegan County,Michigan,http://www.allegancounty.org +Alpena County,Michigan,http://www.alpenacounty.org +Bay County,Michigan,http://www.baycounty-mi.gov +Benzie County,Michigan,http://www.benzieco.net +Branch County,Michigan,https://www.countyofbranch.com/ +Calhoun County,Michigan,https://www.calhouncountymi.gov/ +Cass County,Michigan,http://www.casscountymi.org +Charlevoix County,Michigan,http://www.charlevoixcounty.org +Chippewa County,Michigan,http://www.chippewacountymi.gov +Clinton County,Michigan,http://www.clinton-county.org +Crawford County,Michigan,http://www.crawfordco.org +Dickinson County,Michigan,http://www.dickinsoncountymi.gov +Emmet County,Michigan,https://www.emmetcounty.org/ +Genesee County,Michigan,https://www.geneseecountymi.gov/ +Gladwin County,Michigan,http://www.gladwinco.com +Grand Traverse County,Michigan,https://www.gtcountymi.gov/ +Gratiot County,Michigan,https://www.gratiotmi.com/ +Ingham County,Michigan,http://www.ingham.org +Isabella County,Michigan,http://www.isabellacounty.org +Jackson County,Michigan,http://www.co.jackson.mi.us +Kalamazoo County,Michigan,http://www.kalcounty.com +Kent County,Michigan,http://www.accesskent.com +Keweenaw County,Michigan,http://www.keweenawcountyonline.org/ +Lake County,Michigan,http://www.lakecounty-michigan.com/ +Lapeer County,Michigan,http://lapeercountyweb.org +Leelanau County,Michigan,https://www.leelanau.gov +Lenawee County,Michigan,http://www.lenawee.mi.us +Luce County,Michigan,http://www.lucecountymi.com/ +Mackinac County,Michigan,http://www.mackinaccounty.net +Macomb County,Michigan,http://macombgov.org +Manistee County,Michigan,http://www.manisteecountymi.gov +Marquette County,Michigan,http://www.co.marquette.mi.us +Mason County,Michigan,http://www.masoncounty.net +Mecosta County,Michigan,http://www.co.mecosta.mi.us +Midland County,Michigan,http://www.co.midland.mi.us +Missaukee County,Michigan,http://www.missaukee.org +Monroe County,Michigan,http://www.co.monroe.mi.us +Montcalm County,Michigan,http://www.montcalm.org +Muskegon County,Michigan,http://www.co.muskegon.mi.us +Oakland County,Michigan,http://www.oakgov.com +Ontonagon County,Michigan,http://ontonagoncounty.org/ +Osceola County,Michigan,http://www.osceola-county.org +Saginaw County,Michigan,http://www.saginawcounty.com +St. Clair County,Michigan,http://www.stclaircounty.org +Tuscola County,Michigan,http://www.tuscolacounty.org +Van Buren County,Michigan,http://www.vanburencountymi.gov +Wayne County,Michigan,http://www.waynecounty.com +Wexford County,Michigan,http://www.wexfordcounty.org +Aitkin County,Minnesota,http://www.co.aitkin.mn.us +Anoka County,Minnesota,http://www.co.anoka.mn.us +Becker County,Minnesota,http://www.co.becker.mn.us +Beltrami County,Minnesota,http://www.co.beltrami.mn.us +Benton County,Minnesota,http://www.co.benton.mn.us +Big Stone County,Minnesota,http://www.bigstonecounty.org +Blue Earth County,Minnesota,http://www.co.blue-earth.mn.us +Brown County,Minnesota,http://www.co.brown.mn.us +Carlton County,Minnesota,http://www.co.carlton.mn.us +Carver County,Minnesota,https://www.co.carver.mn.us +Cass County,Minnesota,http://www.co.cass.mn.us +Chippewa County,Minnesota,http://www.co.chippewa.mn.us +Chisago County,Minnesota,https://www.chisagocountymn.gov/ +Clay County,Minnesota,http://www.claycountymn.gov +Clearwater County,Minnesota,http://www.co.clearwater.mn.us +Cook County,Minnesota,http://www.co.cook.mn.us +Cottonwood County,Minnesota,http://www.co.cottonwood.mn.us +Crow Wing County,Minnesota,https://crowwing.us +Dakota County,Minnesota,http://www.dakotacounty.us +Dodge County,Minnesota,http://www.co.dodge.mn.us +Douglas County,Minnesota,http://www.co.douglas.mn.us/ +Faribault County,Minnesota,http://www.co.faribault.mn.us +Fillmore County,Minnesota,http://www.co.fillmore.mn.us +Freeborn County,Minnesota,http://www.co.freeborn.mn.us +Goodhue County,Minnesota,http://www.co.goodhue.mn.us/ +Grant County,Minnesota,http://www.co.grant.mn.us +Hennepin County,Minnesota,http://www.hennepin.us/ +Houston County,Minnesota,http://co.houston.mn.us +Hubbard County,Minnesota,http://www.co.hubbard.mn.us +Isanti County,Minnesota,http://www.co.isanti.mn.us +Itasca County,Minnesota,http://www.co.itasca.mn.us +Jackson County,Minnesota,http://www.co.jackson.mn.us +Kanabec County,Minnesota,http://www.kanabeccounty.org +Kandiyohi County,Minnesota,http://www.co.kandiyohi.mn.us +Kittson County,Minnesota,http://www.co.kittson.mn.us +Koochiching County,Minnesota,http://www.co.koochiching.mn.us +Lac qui Parle County,Minnesota,http://lqpco.com/ +Lake County,Minnesota,http://www.co.lake.mn.us +Lake of the Woods County,Minnesota,https://www.co.lake-of-the-woods.mn.us/ +Le Sueur County,Minnesota,http://www.co.le-sueur.mn.us +Lincoln County,Minnesota,http://www.co.lincoln.mn.us +Lyon County,Minnesota,http://www.lyonco.org/ +McLeod County,Minnesota,http://www.co.mcleod.mn.us +Mahnomen County,Minnesota,http://www.co.mahnomen.mn.us/ +Marshall County,Minnesota,http://www.co.marshall.mn.us +Martin County,Minnesota,http://www.co.martin.mn.us +Meeker County,Minnesota,http://www.co.meeker.mn.us +Mille Lacs County,Minnesota,http://www.co.mille-lacs.mn.us +Morrison County,Minnesota,http://www.co.morrison.mn.us +Mower County,Minnesota,http://www.co.mower.mn.us +Murray County,Minnesota,http://www.murray-countymn.com +Nicollet County,Minnesota,http://www.co.nicollet.mn.us +Nobles County,Minnesota,http://www.co.nobles.mn.us +Norman County,Minnesota,http://www.co.norman.mn.us +Olmsted County,Minnesota,https://www.olmstedcounty.gov +Otter Tail County,Minnesota,https://ottertailcountymn.us/ +Pennington County,Minnesota,http://co.pennington.mn.us +Pine County,Minnesota,http://www.co.pine.mn.us +Pipestone County,Minnesota,http://www.pipestone-county.com/ +Polk County,Minnesota,http://www.co.polk.mn.us/ +Pope County,Minnesota,http://www.co.pope.mn.us/ +Ramsey County,Minnesota,http://www.ramseycounty.us +Red Lake County,Minnesota,https://www.co.red-lake.mn.us/ +Redwood County,Minnesota,http://www.co.redwood.mn.us +Renville County,Minnesota,http://www.renvillecountymn.com +Rice County,Minnesota,http://www.co.rice.mn.us +Rock County,Minnesota,http://www.co.rock.mn.us +Roseau County,Minnesota,http://www.co.roseau.mn.us +St. Louis County,Minnesota,http://www.stlouiscountymn.gov +Scott County,Minnesota,http://www.scottcountymn.gov/ +Sherburne County,Minnesota,http://www.co.sherburne.mn.us +Sibley County,Minnesota,http://www.co.sibley.mn.us +Stearns County,Minnesota,http://www.co.stearns.mn.us +Steele County,Minnesota,http://www.co.steele.mn.us +Stevens County,Minnesota,http://www.co.stevens.mn.us +Swift County,Minnesota,http://www.swiftcounty.com +Todd County,Minnesota,http://www.co.todd.mn.us +Traverse County,Minnesota,http://www.co.traverse.mn.us/ +Wabasha County,Minnesota,http://www.co.wabasha.mn.us +Wadena County,Minnesota,http://www.co.wadena.mn.us +Waseca County,Minnesota,http://www.co.waseca.mn.us +Washington County,Minnesota,https://www.co.washington.mn.us +Watonwan County,Minnesota,http://www.co.watonwan.mn.us +Wilkin County,Minnesota,http://www.co.wilkin.mn.us +Winona County,Minnesota,http://www.co.winona.mn.us +Wright County,Minnesota,http://www.co.wright.mn.us +Yellow Medicine County,Minnesota,http://www.co.ym.mn.gov +Adams County,Mississippi,https://www.adamscountyms.net/ +Alcorn County,Mississippi,http://www.alcorncounty.org +Amite County,Mississippi,http://www.amitecounty.ms +Attala County,Mississippi,http://www.attalacounty.net/ +Benton County,Mississippi,http://bentoncountyms.gov/ +Bolivar County,Mississippi,http://www.co.bolivar.ms.us +Calhoun County,Mississippi,http://calhouncoms.com/ +Carroll County,Mississippi,https://carrollcountyms.org +Chickasaw County,Mississippi,http://www.chickasawcoms.com +Choctaw County,Mississippi,http://choctawcountyms.com/ +Claiborne County,Mississippi,https://www.ccmsgov.us +Clarke County,Mississippi,http://www.visitclarkecounty.com/ +Clay County,Mississippi,http://www.claycountyms.com/index.php/ +Coahoma County,Mississippi,http://www.coahomacounty.net/ +Copiah County,Mississippi,http://www.copiahcounty.org +Covington County,Mississippi,http://www.covingtoncountyms.gov +DeSoto County,Mississippi,http://www.desotocountyms.gov +Forrest County,Mississippi,http://forrestcountyms.us/ +Franklin County,Mississippi,http://www.franklincountyms.com +George County,Mississippi,http://www.georgecountyms.com/index.html +Greene County,Mississippi,http://www.greenecountyms.gov +Hancock County,Mississippi,https://hancockcounty.ms.gov/ +Harrison County,Mississippi,https://harrisoncountyms.gov/ +Hinds County,Mississippi,http://www.hindscountyms.com +Holmes County,Mississippi,http://holmescountyms.org/ +Humphreys County,Mississippi,https://humphreyscounty.ms/ +Itawamba County,Mississippi,http://itawambacoms.com/ +Jackson County,Mississippi,http://www.co.jackson.ms.us +Jasper County,Mississippi,http://www.co.jasper.ms.us/ +Jefferson County,Mississippi,http://www.jeffersoncountyms.com/ +Jefferson Davis County,Mississippi,http://www.jeffersondaviscountyms.com +Jones County,Mississippi,https://jonescounty.com/ +Kemper County,Mississippi,http://www.kempercounty.ms +Lafayette County,Mississippi,http://lafayettems.com/ +Lamar County,Mississippi,http://www.lamarcountyms.gov/11/index.php +Lauderdale County,Mississippi,http://www.lauderdalecounty.org +Lawrence County,Mississippi,http://lawrencecountyms.com/ +Leake County,Mississippi,http://www.leakecountyms.org/ +Lee County,Mississippi,http://leecoms.com +Leflore County,Mississippi,http://www.leflorecounty.net/ +Lincoln County,Mississippi,http://www.golincolnms.com +Lowndes County,Mississippi,http://lowndescountyms.com/ +Madison County,Mississippi,http://www.madison-co.com +Marion County,Mississippi,http://www.marioncountyms.com +Marshall County,Mississippi,http://www.marshall-county.com +Monroe County,Mississippi,http://www.monroems.com +Montgomery County,Mississippi,http://www.montgomerycountyms.com +Neshoba County,Mississippi,http://www.neshobacounty.net +Newton County,Mississippi,http://www.newtoncountyms.net/ +Oktibbeha County,Mississippi,http://www.oktibbehacountyms.org +Panola County,Mississippi,http://www.panolacoms.com +Pearl River County,Mississippi,http://www.pearlrivercounty.net +Pike County,Mississippi,http://www.co.pike.ms.us +Pontotoc County,Mississippi,http://pontotoccoms.com/ +Prentiss County,Mississippi,http://www.prentisscounty.org +Quitman County,Mississippi,http://quitmancountyms.org/ +Rankin County,Mississippi,http://www.rankincounty.org +Scott County,Mississippi,http://www.scottcountyms.gov +Sharkey County,Mississippi,http://www.sharkeycounty.net +Smith County,Mississippi,https://www.smithcountyms.gov/ +Stone County,Mississippi,http://www.stonecountyms.gov +Sunflower County,Mississippi,http://www.sunflowercounty.ms.gov/Pages/Default.aspx +Tate County,Mississippi,https://www.tatecountygov.com/ +Tippah County,Mississippi,http://www.co.tippah.ms.us +Tishomingo County,Mississippi,http://co.tishomingo.ms.us +Tunica County,Mississippi,http://www.tunicacountymississippi.com/ +Union County,Mississippi,http://unioncoms.com/ +Walthall County,Mississippi,http://www.co.walthall.ms.us/ +Warren County,Mississippi,http://www.co.warren.ms.us +Washington County,Mississippi,http://www.washingtoncounty.ms +Wayne County,Mississippi,http://www.waynecounty.ms +Wilkinson County,Mississippi,http://www.wilkinson.co.ms.gov +Winston County,Mississippi,http://www.winstonms.com/ +Yalobusha County,Mississippi,http://www.yalobushaonline.org/ +Yazoo County,Mississippi,http://yazoocounty.net +Adair County,Missouri,http://adaircountymissouri.com +Andrew County,Missouri,http://www.andrewcounty.org +Atchison County,Missouri,http://www.atchisoncounty.org +Audrain County,Missouri,http://www.audraincounty.org +Barton County,Missouri,http://www.bartoncounty.com/ +Bates County,Missouri,http://www.batescounty.net +Benton County,Missouri,http://www.bentoncomo.com/ +Boone County,Missouri,http://www.showmeboone.com +Buchanan County,Missouri,http://www.co.buchanan.mo.us/ +Butler County,Missouri,https://butlercountymo.com/ +Caldwell County,Missouri,http://www.caldwellco.missouri.org +Callaway County,Missouri,https://callawaycounty.org +Camden County,Missouri,http://www.camdenmo.org +Cape Girardeau County,Missouri,http://www.capecounty.us/ +Carroll County,Missouri,http://www.carrollcomo.org/ +Cass County,Missouri,http://www.casscounty.com/ +Cedar County,Missouri,http://cedarcountymo.gov +Christian County,Missouri,http://christiancountymo.gov +Clay County,Missouri,https://www.claycountymo.gov/ +Clinton County,Missouri,http://www.clintoncomo.org +Cole County,Missouri,http://www.colecounty.org +Cooper County,Missouri,http://www.coopercountymo.gov/ +Crawford County,Missouri,http://crawfordcountymo.net +Daviess County,Missouri,https://www.daviesscountymo.gov +DeKalb County,Missouri,https://www.dekalbcountymo.com/ +Dent County,Missouri,https://www.salemmo.com/dent/ +Dunklin County,Missouri,https://dunklincounty.org +Franklin County,Missouri,http://www.franklinmo.org +Gasconade County,Missouri,https://gasconadecounty.org/ +Gentry County,Missouri,http://gentrycounty.net/ +Greene County,Missouri,http://www.greenecountymo.org +Grundy County,Missouri,http://www.grundycountymo.com +Henry County,Missouri,http://www.henrycomo.com/ +Hickory County,Missouri,http://hickorycomo.com/ +Holt County,Missouri,http://holtcounty.org/ +Howell County,Missouri,http://www.howellcounty.net +Jackson County,Missouri,http://www.jacksongov.org +Jasper County,Missouri,http://www.jaspercounty.org +Jefferson County,Missouri,http://www.jeffcomo.org +Johnson County,Missouri,http://www.jococourthouse.com +Knox County,Missouri,http://www.knoxcountymo.org +Laclede County,Missouri,http://lacledecountymissouri.org/ +Lafayette County,Missouri,http://www.lafayettecountymo.com +Lawrence County,Missouri,https://www.lawrencecountymo.org/ +Lewis County,Missouri,http://lewiscountymo.org +Lincoln County,Missouri,http://www.lcmo.us +Livingston County,Missouri,http://www.livingstoncountymo.com +McDonald County,Missouri,http://www.mcdonaldcountygov.com/ +Macon County,Missouri,http://www.maconcountymo.com/ +Madison County,Missouri,http://madisoncountymo.us +Maries County,Missouri,https://www.mariescountymo.gov +Marion County,Missouri,http://marioncountymo.com/ +Miller County,Missouri,http://www.millercountymissouri.org +Mississippi County,Missouri,http://www.misscomo.net/ +Monroe County,Missouri,http://www.monroecountymo.org +Montgomery County,Missouri,http://mcmo.us/ +Morgan County,Missouri,https://www.morgancountymo.gov +Newton County,Missouri,http://www.newtoncountymo.com/ +Nodaway County,Missouri,http://www.nodawaycountymo.com/ +Osage County,Missouri,http://osagecountygov.com +Ozark County,Missouri,http://www.mogenweb.org/ozark/ +Pemiscot County,Missouri,http://www.pemiscotcounty.org/ +Perry County,Missouri,http://perrycountymo.us/ +Pettis County,Missouri,http://www.pettiscomo.com +Phelps County,Missouri,http://www.phelpscounty.org +Pike County,Missouri,http://www.pikecountymo.net/ +Platte County,Missouri,http://www.co.platte.mo.us +Pulaski County,Missouri,http://www.pulaskicountymo.org/home.html +Putnam County,Missouri,http://nemr.net/~putco/ +Ralls County,Missouri,http://www.rallscounty.org/ +Randolph County,Missouri,http://www.randolphcounty-mo.com/ +Ray County,Missouri,http://www.raycountymo.com/ +Ripley County,Missouri,http://www.ripleycountymissouri.org/ +St. Charles County,Missouri,http://www.sccmo.org +St. Clair County,Missouri,http://www.stclaircomo.com +Ste. Genevieve County,Missouri,http://stegencounty.org +St. Francois County,Missouri,http://www.sfcgov.org/ +St. Louis County,Missouri,http://stlouiscountymo.gov/ +Saline County,Missouri,http://www.salinecountymo.org/ +Scotland County,Missouri,http://www.scotlandcountymo.org/ +Scott County,Missouri,http://www.scottcountymo.com/ +Shannon County,Missouri,http://www.shannon-county.com/ +Stone County,Missouri,http://www.stoneco-mo.us/ +Taney County,Missouri,http://www.taneycounty.org/ +Texas County,Missouri,http://www.texascountymissouri.gov/ +Vernon County,Missouri,http://www.vernoncountymo.org/ +Warren County,Missouri,http://www.warrencountymo.org +Washington County,Missouri,http://www.washingtoncountymo.us/ +Webster County,Missouri,http://www.webstercountymo.gov/ +Worth County,Missouri,http://www.worthcounty.us/ +Wright County,Missouri,http://www.wrightcountymo.com/ +Beaverhead County,Montana,http://www.beaverheadcounty.org +Big Horn County,Montana,http://www.bighorncountymt.gov/ +Blaine County,Montana,http://www.blainecounty-mt.gov +Broadwater County,Montana,http://www.co.broadwater.mt.us +Carbon County,Montana,http://co.carbon.mt.us/ +Carter County,Montana,http://www.cartercountymt.info +Cascade County,Montana,https://www.cascadecountymt.gov/ +Chouteau County,Montana,http://www.co.chouteau.mt.us +Custer County,Montana,https://custercountymt.com/ +Dawson County,Montana,http://www.dawsoncountymontana.org +Deer Lodge County,Montana,http://www.anacondadeerlodge.mt.gov/ +Fallon County,Montana,http://www.falloncounty.net +Fergus County,Montana,http://www.co.fergus.mt.us +Flathead County,Montana,http://flathead.mt.gov +Gallatin County,Montana,http://www.gallatin.mt.gov +Garfield County,Montana,http://www.garfieldco.us/index.html +Glacier County,Montana,http://www.glaciercountymt.org +Granite County,Montana,http://www.co.granite.mt.us +Hill County,Montana,http://hillcounty.us/ +Jefferson County,Montana,http://www.jeffersoncounty-mt.gov/ +Judith Basin County,Montana,http://www.co.judith-basin.mt.us +Lake County,Montana,http://www.lakemt.gov/ +Lewis and Clark County,Montana,https://www.lccountymt.gov/home.html +Liberty County,Montana,http://www.co.liberty.mt.us +Lincoln County,Montana,http://www.lincolncountymt.us +McCone County,Montana,http://mcconecountymt.com/ +Madison County,Montana,http://www.madison.mt.gov +Meagher County,Montana,http://www.meagherco.com +Mineral County,Montana,http://www.co.mineral.mt.us +Missoula County,Montana,http://www.missoulacounty.us +Musselshell County,Montana,https://musselshellcounty.org/ +Park County,Montana,http://www.parkcounty.org +Petroleum County,Montana,http://petroleumcountymt.org/ +Pondera County,Montana,http://www.ponderacountymontana.org +Powder River County,Montana,http://www.prco.mt.gov +Powell County,Montana,http://www.powellcountymt.gov/ez/index.php +Prairie County,Montana,http://visitterrymt.com/ +Ravalli County,Montana,http://www.rc.mt.gov +Richland County,Montana,http://www.richland.org +Roosevelt County,Montana,http://www.rooseveltcounty.org/ +Rosebud County,Montana,http://rosebudcountymt.gov +Sanders County,Montana,http://www.co.sanders.mt.us +Sheridan County,Montana,http://www.co.sheridan.mt.us +Silver Bow County,Montana,http://co.silverbow.mt.us +Stillwater County,Montana,http://www.stillwater.mt.gov +Sweet Grass County,Montana,http://sweetgrasscountygov.com +Teton County,Montana,http://www.tetoncomt.org +Toole County,Montana,http://www.toolecountymt.gov +Valley County,Montana,http://valleycountymt.net +Wheatland County,Montana,http://www.harlowtonchamber.com/ +Yellowstone County,Montana,http://www.co.yellowstone.mt.gov +Adams County,Nebraska,http://www.adamscounty.org +Antelope County,Nebraska,http://www.co.antelope.ne.us +Arthur County,Nebraska,https://arthurcounty.nebraska.gov/ +Banner County,Nebraska,https://bannercountyne.gov/ +Blaine County,Nebraska,http://blainecounty.nebraska.gov +Boone County,Nebraska,http://www.co.boone.ne.us/ +Box Butte County,Nebraska,http://boxbuttecounty.us/ +Boyd County,Nebraska,http://www.boydcounty.ne.gov/ +Brown County,Nebraska,https://www.browncounty.ne.gov/ +Buffalo County,Nebraska,http://www.buffalogov.org +Burt County,Nebraska,http://www.burtcounty.ne.gov +Butler County,Nebraska,https://co.butler.ne.us/ +Cass County,Nebraska,http://www.cassne.org +Cedar County,Nebraska,http://www.co.cedar.ne.us +Chase County,Nebraska,http://www.co.chase.ne.us +Cherry County,Nebraska,http://www.co.cherry.ne.us +Cheyenne County,Nebraska,http://www.cheyennecountyne.net/ +Clay County,Nebraska,http://www.claycounty.ne.gov +Colfax County,Nebraska,http://www.colfaxne.com +Cuming County,Nebraska,http://www.cumingcounty.ne.gov +Custer County,Nebraska,http://www.co.custer.ne.us/ +Dakota County,Nebraska,http://www.dakotacountyne.org +Dawes County,Nebraska,http://www.dawes-county.com +Dawson County,Nebraska,http://www.dawsoncountyne.org/ +Deuel County,Nebraska,http://www.co.deuel.ne.us +Dixon County,Nebraska,http://www.co.dixon.ne.us +Dodge County,Nebraska,http://www.dodgecounty.ne.gov +Douglas County,Nebraska,https://www.douglascounty-ne.gov/ +Dundy County,Nebraska,http://www.co.dundy.ne.us +Fillmore County,Nebraska,http://www.fillmorecounty.org/ +Franklin County,Nebraska,http://www.co.franklin.ne.us/ +Frontier County,Nebraska,http://www.co.frontier.ne.us/ +Furnas County,Nebraska,http://www.furnascounty.ne.gov/ +Gage County,Nebraska,http://www.gagecountynebraska.us/ +Garden County,Nebraska,https://gardencounty.ne.gov/ +Garfield County,Nebraska,http://www.garfieldcounty.ne.gov +Gosper County,Nebraska,http://www.co.gosper.ne.us +Greeley County,Nebraska,http://www.greeleycounty.ne.gov/ +Hall County,Nebraska,http://www.hallcountyne.gov +Hamilton County,Nebraska,http://www.co.hamilton.ne.us +Harlan County,Nebraska,http://www.harlancounty.ne.gov/ +Hayes County,Nebraska,http://www.hayescounty.ne.gov/ +Hitchcock County,Nebraska,http://www.hitchcockcounty.ne.gov/ +Holt County,Nebraska,http://www.co.holt.ne.us +Hooker County,Nebraska,http://www.co.hooker.ne.us +Howard County,Nebraska,http://www.howardcounty.ne.gov +Jefferson County,Nebraska,http://www.co.jefferson.ne.us +Johnson County,Nebraska,https://johnsoncounty.ne.gov/ +Kearney County,Nebraska,http://www.kearneycounty.ne.gov/ +Keith County,Nebraska,http://www.keithcountyne.gov/ +Keya Paha County,Nebraska,http://www.co.keya-paha.ne.us/ +Kimball County,Nebraska,http://www.co.kimball.ne.us +Knox County,Nebraska,http://www.co.knox.ne.us +Lancaster County,Nebraska,http://lancaster.ne.gov +Lincoln County,Nebraska,http://www.co.lincoln.ne.us +Logan County,Nebraska,http://logancounty.ne.gov/ +Loup County,Nebraska,http://www.co.loup.ne.us/ +McPherson County,Nebraska,http://www.mcphersoncounty.ne.gov/ +Madison County,Nebraska,http://www.madisoncountyne.com/ +Merrick County,Nebraska,http://www.merrickcounty.ne.gov/ +Morrill County,Nebraska,http://www.morrillcountyne.gov/ +Nance County,Nebraska,http://www.co.nance.ne.us +Nemaha County,Nebraska,http://nemahacounty.ne.gov/ +Nuckolls County,Nebraska,http://www.NuckollsCounty.NE.gov +Otoe County,Nebraska,http://www.co.otoe.ne.us/ +Perkins County,Nebraska,http://www.co.perkins.ne.us/ +Phelps County,Nebraska,http://www.phelpsgov.org/ +Pierce County,Nebraska,http://www.co.pierce.ne.us +Platte County,Nebraska,http://www.plattecounty.net/ +Polk County,Nebraska,http://www.polkcounty.ne.gov/ +Red Willow County,Nebraska,http://www.co.red-willow.ne.us/ +Richardson County,Nebraska,http://www.co.richardson.ne.us +Rock County,Nebraska,http://www.rockcountynebraska.org/ +Saline County,Nebraska,http://www.co.saline.ne.us/ +Sarpy County,Nebraska,http://www.sarpy.gov +Saunders County,Nebraska,https://www.saunderscounty.ne.gov/ +Scotts Bluff County,Nebraska,http://www.scottsbluffcounty.org/ +Seward County,Nebraska,http://www.countyofsewardne.com/ +Thayer County,Nebraska,http://thayercountyne.gov/ +Thurston County,Nebraska,https://thurstoncountynebraska.us +Washington County,Nebraska,http://www.co.washington.ne.us +Wayne County,Nebraska,http://www.waynecountyne.org +Webster County,Nebraska,http://www.co.webster.ne.us +Wheeler County,Nebraska,http://www.wheelercounty.ne.gov/ +York County,Nebraska,http://www.yorkcounty.ne.gov/ +Churchill County,Nevada,http://churchillcounty.org/ +Clark County,Nevada,https://www.clarkcountynv.gov/ +Douglas County,Nevada,https://www.douglascountynv.gov/ +Elko County,Nevada,http://elkocountynv.net/ +Esmeralda County,Nevada,https://www.accessesmeralda.com/ +Eureka County,Nevada,http://co.eureka.nv.us/ +Humboldt County,Nevada,http://hcnv.us/ +Lander County,Nevada,http://landercountynv.org/ +Lincoln County,Nevada,http://lincolncountynv.org/ +Lyon County,Nevada,http://lyon-county.org/ +Mineral County,Nevada,http://mineralcountynv.us/ +Nye County,Nevada,http://nyecounty.net/ +Pershing County,Nevada,http://pershingcounty.net/ +Storey County,Nevada,http://storeycounty.org/ +Washoe County,Nevada,https://washoecounty.us/ +White Pine County,Nevada,http://whitepinecounty.net/ +Carson City,Nevada,http://www.carson.org/home +Belknap County,New Hampshire,http://www.belknapcounty.org +Carroll County,New Hampshire,http://www.carrollcountynh.net +Cheshire County,New Hampshire,http://co.cheshire.nh.us +Coos County,New Hampshire,http://www.cooscountynh.us +Grafton County,New Hampshire,http://www.co.grafton.nh.us +Hillsborough County,New Hampshire,http://hcnh.org/ +Merrimack County,New Hampshire,http://www.merrimackcounty.net/ +Rockingham County,New Hampshire,http://www.rockinghamcountynh.org +Strafford County,New Hampshire,http://www.co.strafford.nh.us +Sullivan County,New Hampshire,http://www.sullivancountynh.gov +Atlantic County,New Jersey,https://www.atlantic-county.org +Bergen County,New Jersey,http://www.co.bergen.nj.us +Burlington County,New Jersey,http://www.co.burlington.nj.us +Camden County,New Jersey,http://www.camdencounty.com +Cape May County,New Jersey,http://capemaycountynj.gov/ +Cumberland County,New Jersey,http://co.cumberland.nj.us +Essex County,New Jersey,http://www.essex-countynj.org +Gloucester County,New Jersey,http://www.co.gloucester.nj.us +Hudson County,New Jersey,http://www.hudsoncountynj.org +Hunterdon County,New Jersey,https://www.co.hunterdon.nj.us +Mercer County,New Jersey,http://www.mercercounty.org +Middlesex County,New Jersey,http://www.co.middlesex.nj.us +Monmouth County,New Jersey,https://www.co.monmouth.nj.us/ +Morris County,New Jersey,http://www.co.morris.nj.us +Ocean County,New Jersey,http://www.co.ocean.nj.us +Passaic County,New Jersey,http://www.PassaicCountyNJ.org +Salem County,New Jersey,http://www.salemcountynj.gov +Somerset County,New Jersey,http://www.co.somerset.nj.us +Sussex County,New Jersey,http://www.sussex.nj.us +Union County,New Jersey,http://www.ucnj.org +Warren County,New Jersey,https://www.warrencountynj.gov/ +Bernalillo County,New Mexico,http://www.bernco.gov +Catron County,New Mexico,http://www.catroncounty.us +Chaves County,New Mexico,http://co.chaves.nm.us +Cibola County,New Mexico,http://www.co.cibola.nm.us/ +Colfax County,New Mexico,http://www.co.colfax.nm.us/ +Curry County,New Mexico,http://www.currycounty.org +De Baca County,New Mexico,http://debaca.nmgenweb.us/ +Doña Ana County,New Mexico,http://www.donaanacounty.org +Eddy County,New Mexico,http://www.co.eddy.nm.us/ +Grant County,New Mexico,http://www.grantcountynm.gov +Harding County,New Mexico,http://www.hardingcounty.org +Hidalgo County,New Mexico,http://www.hidalgocounty.org +Lea County,New Mexico,http://www.leacounty.net +Lincoln County,New Mexico,http://www.lincolncountynm.gov/ +Los Alamos County,New Mexico,http://www.losalamosnm.us +Luna County,New Mexico,http://lunacountynm.us +McKinley County,New Mexico,http://www.co.mckinley.nm.us +Mora County,New Mexico,http://CountyOfMora.com +Otero County,New Mexico,http://co.otero.nm.us +Quay County,New Mexico,http://quaycounty-nm.gov +Rio Arriba County,New Mexico,http://www.rio-arriba.org +Roosevelt County,New Mexico,http://www.rooseveltcounty.com +Sandoval County,New Mexico,http://www.sandovalcountyNM.gov +San Juan County,New Mexico,http://www.sjcounty.net +San Miguel County,New Mexico,http://co.sanmiguel.nm.us/ +Santa Fe County,New Mexico,http://www.santafecountynm.gov +Sierra County,New Mexico,http://www.sierracountynm.gov/ +Socorro County,New Mexico,http://www.socorrocounty.net +Taos County,New Mexico,http://www.taoscounty.org +Torrance County,New Mexico,http://www.torrancecountynm.org +Union County,New Mexico,https://unionnm.us/ +Valencia County,New Mexico,http://www.co.valencia.nm.us +Albany County,New York,http://www.albanycounty.com +Allegany County,New York,https://www.alleganyco.gov/ +Broome County,New York,http://www.gobroomecounty.com +Cattaraugus County,New York,https://www.cattco.org/ +Cayuga County,New York,http://www.cayugacounty.us +Chautauqua County,New York,http://chqgov.com +Chemung County,New York,https://www.chemungcountyny.gov/ +Chenango County,New York,http://www.co.chenango.ny.us +Clinton County,New York,http://www.clintoncountygov.com +Columbia County,New York,http://www.columbiacountyny.com/ +Cortland County,New York,http://www.cortland-co.org +Delaware County,New York,http://delcony.us +Dutchess County,New York,http://www.co.dutchess.ny.us +Erie County,New York,http://www.erie.gov +Essex County,New York,http://essexcountyny.gov +Franklin County,New York,https://www.franklincountyny.gov/ +Fulton County,New York,http://www.fultoncountyny.gov/ +Genesee County,New York,http://www.co.genesee.ny.us +Greene County,New York,http://www.greenegovernment.com +Hamilton County,New York,http://www.hamiltoncounty.com +Herkimer County,New York,http://www.herkimercounty.org +Jefferson County,New York,http://www.co.jefferson.ny.us +Lewis County,New York,http://www.lewiscounty.org +Livingston County,New York,https://www.livingstoncounty.us/ +Madison County,New York,http://www.madisoncounty.ny.gov +Monroe County,New York,http://www.monroecounty.gov +Montgomery County,New York,http://www.co.montgomery.ny.us +Nassau County,New York,http://www.nassaucountyny.gov +New York County,New York,https://manhattanbp.nyc.gov/ +Niagara County,New York,http://www.niagaracounty.com +Oneida County,New York,http://ocgov.net/ +Onondaga County,New York,http://www.ongov.net +Ontario County,New York,https://www.ontariocountyny.gov +Orange County,New York,http://www.orangecountygov.com +Orleans County,New York,https://orleanscountyny.com/ +Oswego County,New York,http://www.oswegocounty.com +Otsego County,New York,http://www.otsegocounty.com +Putnam County,New York,http://www.putnamcountyny.com +Rensselaer County,New York,http://www.rensco.com +Rockland County,New York,http://www.rocklandgov.com +St. Lawrence County,New York,http://www.stlawco.org +Saratoga County,New York,http://www.saratogacountyny.gov +Schenectady County,New York,http://www.schenectadycounty.com +Schoharie County,New York,http://www.schohariecounty-ny.gov +Schuyler County,New York,https://www.schuylercounty.us/ +Seneca County,New York,http://www.co.seneca.ny.us +Steuben County,New York,https://www.steubencountyny.gov/ +Suffolk County,New York,http://www.suffolkcountyny.gov +Sullivan County,New York,https://sullivanny.us/ +Tioga County,New York,http://www.tiogacountyny.com +Tompkins County,New York,http://tompkinscountyny.gov +Ulster County,New York,https://ulstercountyny.gov/ +Warren County,New York,http://warrencountyny.gov +Washington County,New York,http://www.washingtoncountyny.gov/ +Wayne County,New York,https://web.co.wayne.ny.us +Westchester County,New York,http://westchestergov.com +Wyoming County,New York,https://www.wyomingco.net/ +Yates County,New York,http://www.yatescounty.org +Alamance County,North Carolina,http://www.alamance-nc.com +Alexander County,North Carolina,http://alexandercountync.gov +Alleghany County,North Carolina,http://www.alleghanycounty-nc.gov +Anson County,North Carolina,http://www.co.anson.nc.us +Ashe County,North Carolina,http://www.ashecountygov.com +Avery County,North Carolina,http://www.averycountync.gov +Beaufort County,North Carolina,http://www.co.beaufort.nc.us +Bertie County,North Carolina,http://www.co.bertie.nc.us +Bladen County,North Carolina,http://bladennc.govoffice3.com +Brunswick County,North Carolina,http://www.brunswickcountync.gov +Buncombe County,North Carolina,https://www.buncombecounty.org +Burke County,North Carolina,http://www.burkenc.org +Cabarrus County,North Carolina,http://www.cabarruscounty.us +Caldwell County,North Carolina,http://www.caldwellcountync.org +Camden County,North Carolina,http://www.camdencountync.gov +Carteret County,North Carolina,http://www.carteretcountync.gov +Caswell County,North Carolina,http://www.caswellcountync.gov +Catawba County,North Carolina,http://www.catawbacountync.gov +Chatham County,North Carolina,http://www.chathamnc.org +Cherokee County,North Carolina,http://www.cherokeecounty-nc.gov +Chowan County,North Carolina,http://www.chowancounty-nc.gov +Clay County,North Carolina,http://www.clayconc.com +Cleveland County,North Carolina,http://www.clevelandcounty.com +Columbus County,North Carolina,http://www.columbusco.org +Craven County,North Carolina,http://www.cravencounty.com +Cumberland County,North Carolina,http://www.co.cumberland.nc.us +Currituck County,North Carolina,http://www.co.currituck.nc.us +Dare County,North Carolina,http://www.darenc.com +Davidson County,North Carolina,http://www.co.davidson.nc.us +Davie County,North Carolina,http://www.co.davie.nc.us +Duplin County,North Carolina,http://www.duplincountync.com +Durham County,North Carolina,http://www.dconc.gov +Edgecombe County,North Carolina,http://www.edgecombecountync.gov +Forsyth County,North Carolina,http://www.co.forsyth.nc.us +Franklin County,North Carolina,https://www.franklincountync.gov +Gaston County,North Carolina,http://www.gastongov.com +Gates County,North Carolina,https://gatescountync.gov/ +Graham County,North Carolina,http://www.grahamcounty.org +Granville County,North Carolina,http://www.granvillecounty.org +Greene County,North Carolina,https://greenecountync.gov/ +Guilford County,North Carolina,http://www.guilfordcountync.gov +Halifax County,North Carolina,http://www.halifaxnc.com +Harnett County,North Carolina,http://www.harnett.org +Haywood County,North Carolina,http://www.haywoodcountync.gov +Henderson County,North Carolina,http://www.hendersoncountync.gov +Hertford County,North Carolina,http://www.hertfordcountync.gov +Hoke County,North Carolina,http://www.hokecounty.net +Hyde County,North Carolina,http://www.hydecountync.gov +Iredell County,North Carolina,https://www.iredellcountync.gov +Jackson County,North Carolina,http://www.jacksonnc.org +Johnston County,North Carolina,http://www.johnstonnc.com +Jones County,North Carolina,http://jonescountync.gov +Lee County,North Carolina,https://www.leecountync.gov +Lenoir County,North Carolina,http://www.lenoircountync.gov +Lincoln County,North Carolina,http://www.lincolncounty.org +McDowell County,North Carolina,http://www.mcdowellgov.com +Macon County,North Carolina,http://www.maconnc.org +Madison County,North Carolina,http://www.madisoncountync.gov +Martin County,North Carolina,http://www.martincountyncgov.com +Mecklenburg County,North Carolina,https://www.mecknc.gov/Pages/Home.aspx +Mitchell County,North Carolina,http://www.mitchellcounty.org +Montgomery County,North Carolina,http://www.montgomerycountync.com +Moore County,North Carolina,http://www.moorecountync.gov +Nash County,North Carolina,https://nashcountync.gov +New Hanover County,North Carolina,http://www.nhcgov.com +Northampton County,North Carolina,http://www.northamptonnc.com +Onslow County,North Carolina,http://www.onslowcountync.gov +Orange County,North Carolina,http://orangecountync.gov +Pamlico County,North Carolina,http://www.pamlicocounty.org +Pasquotank County,North Carolina,http://www.co.pasquotank.nc.us +Pender County,North Carolina,http://www.pendercountync.gov +Person County,North Carolina,http://www.personcountync.gov +Pitt County,North Carolina,http://www.pittcountync.gov +Polk County,North Carolina,https://www.polknc.gov +Randolph County,North Carolina,http://www.randolphcountync.gov +Richmond County,North Carolina,http://www.richmondnc.com +Robeson County,North Carolina,http://www.co.robeson.nc.us +Rockingham County,North Carolina,http://www.rockinghamcountync.gov +Rowan County,North Carolina,https://www.rowancountync.gov +Rutherford County,North Carolina,http://rutherfordcountync.gov +Sampson County,North Carolina,http://www.sampsonnc.com +Scotland County,North Carolina,http://www.scotlandcounty.org +Stanly County,North Carolina,http://www.stanlycountync.gov +Stokes County,North Carolina,http://www.co.stokes.nc.us +Surry County,North Carolina,http://www.co.surry.nc.us +Swain County,North Carolina,http://www.swaincountync.gov +Transylvania County,North Carolina,http://www.transylvaniacounty.org +Tyrrell County,North Carolina,http://tyrrellcounty.org/index.php/en/ +Union County,North Carolina,http://www.unioncountync.gov +Vance County,North Carolina,http://www.vancecounty.org +Wake County,North Carolina,https://www.wake.gov +Warren County,North Carolina,http://www.warrencountync.com +Washington County,North Carolina,http://www.washconc.org +Watauga County,North Carolina,http://www.wataugacounty.org +Wayne County,North Carolina,http://www.waynegov.com +Wilkes County,North Carolina,http://www.wilkescounty.net +Wilson County,North Carolina,https://www.wilsoncountync.gov +Yadkin County,North Carolina,http://www.yadkincountync.gov +Yancey County,North Carolina,http://www.yanceycountync.gov +Adams County,North Dakota,https://www.adamscountynd.com/ +Barnes County,North Dakota,http://www.barnescounty.us +Benson County,North Dakota,https://www.bensoncountynd.com/ +Billings County,North Dakota,http://www.billingscountynd.gov/ +Bottineau County,North Dakota,https://www.bottineauco.com/ +Bowman County,North Dakota,https://bowmannd.com/ +Burke County,North Dakota,http://www.burkecountynd.com +Burleigh County,North Dakota,https://www.burleighco.com/ +Cass County,North Dakota,https://www.casscountynd.gov +Cavalier County,North Dakota,https://cavaliercounty.us/ +Dickey County,North Dakota,http://www.dickeynd.com/ +Divide County,North Dakota,http://www.dividecountynd.org/ +Dunn County,North Dakota,http://www.dunncountynd.org/ +Eddy County,North Dakota,http://www.cityofnewrockford.com/index.asp?SEC=0E991439-92D7-460E-84F1-BDEFE48CC237&Type=B_BASIC +Foster County,North Dakota,http://www.fostercounty.com/ +Golden Valley County,North Dakota,http://www.goldenvalleycounty.org/ +Grand Forks County,North Dakota,https://www.gfcounty.nd.gov/ +Grant County,North Dakota,https://www.grantcountynd.com/ +Griggs County,North Dakota,http://www.griggscountynd.gov/ +Hettinger County,North Dakota,http://www.hettingercounty.net/ +LaMoure County,North Dakota,https://www.lamourecountynd.com/ +Logan County,North Dakota,http://logancountynd.com/ +McHenry County,North Dakota,http://www.mchenrycountynd.com +McKenzie County,North Dakota,https://county.mckenziecounty.net/ +McLean County,North Dakota,http://www.mcleancountynd.gov +Mercer County,North Dakota,http://www.mercercountynd.com +Morton County,North Dakota,https://www.mortonnd.org/ +Mountrail County,North Dakota,http://www.co.mountrail.nd.us/ +Nelson County,North Dakota,https://www.nelsonco.org/ +Oliver County,North Dakota,https://olivercountynd.org/ +Pembina County,North Dakota,https://www.pembinacountynd.gov/ +Pierce County,North Dakota,https://www.piercecountynd.gov/ +Ramsey County,North Dakota,https://www.co.ramsey.nd.us/ +Ransom County,North Dakota,https://ransomcountynd.net/ +Renville County,North Dakota,http://www.renvillecountynd.org/ +Richland County,North Dakota,http://www.co.richland.nd.us/ +Rolette County,North Dakota,http://www.rolettecounty.com +Sargent County,North Dakota,http://www.sargentnd.com/ +Sheridan County,North Dakota,http://www.co.sheridan.nd.us/ +Slope County,North Dakota,http://www.slopecountynd.com/ +Stark County,North Dakota,https://www.starkcountynd.gov/ +Steele County,North Dakota,http://www.co.steele.nd.us/ +Stutsman County,North Dakota,https://www.stutsmancounty.gov/ +Towner County,North Dakota,http://townercountynd.com/ +Traill County,North Dakota,http://www.co.traill.nd.us +Walsh County,North Dakota,http://www.co.walsh.nd.us +Ward County,North Dakota,https://www.co.ward.nd.us/ +Wells County,North Dakota,http://www.wellscountynd.com +Williams County,North Dakota,https://www.williamsnd.com/ +Adams County,Ohio,https://www.adamscountyoh.gov/ +Allen County,Ohio,http://www.co.allen.oh.us +Ashland County,Ohio,http://www.ashlandcounty.org +Ashtabula County,Ohio,http://www.co.ashtabula.oh.us +Athens County,Ohio,http://www.co.athensoh.org/ +Auglaize County,Ohio,http://www.auglaizecounty.org +Belmont County,Ohio,http://www.belmontcountyohio.org +Brown County,Ohio,http://www.browncountyohio.gov +Butler County,Ohio,http://www.butlercountyohio.org +Carroll County,Ohio,http://www.carrollcountyohio.us +Champaign County,Ohio,http://www.co.champaign.oh.us +Clark County,Ohio,http://www.clarkcountyohio.gov +Clermont County,Ohio,http://www.clermontcountyohio.gov/ +Clinton County,Ohio,http://co.clinton.oh.us +Columbiana County,Ohio,http://www.columbianacounty.org +Coshocton County,Ohio,http://www.coshoctoncounty.net/ +Crawford County,Ohio,http://www.crawford-co.org +Cuyahoga County,Ohio,http://www.cuyahogacounty.us +Darke County,Ohio,https://www.mydarkecounty.com/ +Defiance County,Ohio,http://www.defiance-county.com +Delaware County,Ohio,http://www.co.delaware.oh.us +Erie County,Ohio,http://www.eriecounty.oh.gov +Fairfield County,Ohio,http://www.co.fairfield.oh.us +Fayette County,Ohio,http://www.fayette-co-oh.com/ +Franklin County,Ohio,http://franklincountyohio.gov +Fulton County,Ohio,http://www.FultonCountyOH.com +Gallia County,Ohio,http://www.gallianet.net +Geauga County,Ohio,http://www.co.geauga.oh.us +Greene County,Ohio,https://www.greenecountyohio.gov +Guernsey County,Ohio,http://www.guernseycounty.org +Hamilton County,Ohio,http://www.hamilton-co.org +Hancock County,Ohio,http://www.co.hancock.oh.us +Hardin County,Ohio,http://www.co.hardin.oh.us +Harrison County,Ohio,http://www.harrisoncountyohio.org +Henry County,Ohio,https://www.henrycountyohio.gov +Highland County,Ohio,http://co.highland.oh.us/ +Hocking County,Ohio,http://www.co.hocking.oh.us +Holmes County,Ohio,http://www.co.holmes.oh.us/ +Huron County,Ohio,http://www.huroncounty-oh.gov/ +Jackson County,Ohio,http://www.jacksoncountyohio.us/ +Jefferson County,Ohio,http://www.jeffersoncountyoh.com +Knox County,Ohio,http://www.co.knox.oh.us/ +Lake County,Ohio,http://www.lakecountyohio.gov +Lawrence County,Ohio,http://www.lawrencecountyohio.org +Licking County,Ohio,http://www.lcounty.com +Logan County,Ohio,http://www.co.logan.oh.us +Lorain County,Ohio,http://www.loraincounty.us +Lucas County,Ohio,http://www.co.lucas.oh.us +Madison County,Ohio,http://www.co.madison.oh.us +Mahoning County,Ohio,http://www.mahoningcountyoh.gov +Marion County,Ohio,http://www.co.marion.oh.us +Medina County,Ohio,http://www.co.medina.oh.us +Meigs County,Ohio,https://www.meigscountyohio.com/ +Mercer County,Ohio,http://www.mercercountyohio.org +Miami County,Ohio,http://www.MiamiCountyOhio.gov +Monroe County,Ohio,http://www.monroecountyohio.net/ +Montgomery County,Ohio,http://www.mcohio.org +Morgan County,Ohio,http://www.morgancounty-oh.gov +Morrow County,Ohio,http://www.morrowcountyohio.gov +Muskingum County,Ohio,http://www.muskingumcounty.org +Noble County,Ohio,https://noblecountyohio.gov/ +Ottawa County,Ohio,http://www.co.ottawa.oh.us +Paulding County,Ohio,http://www.pauldingcountyoh.com +Perry County,Ohio,http://www.perrycountyohio.net/ +Pickaway County,Ohio,http://www.pickaway.org +Portage County,Ohio,http://www.co.portage.oh.us +Preble County,Ohio,http://www.prebco.org +Putnam County,Ohio,http://www.putnamcountyohio.gov +Richland County,Ohio,http://www.richlandcountyoh.us +Ross County,Ohio,http://www.co.ross.oh.us +Sandusky County,Ohio,http://www.sandusky-county.com/ +Scioto County,Ohio,http://www.sciotocountyohio.com +Seneca County,Ohio,https://senecacountyohio.gov/ +Shelby County,Ohio,http://co.shelby.oh.us +Stark County,Ohio,http://www.starkcountyohio.gov/ +Summit County,Ohio,http://co.summitoh.net +Trumbull County,Ohio,http://www.co.trumbull.oh.us +Tuscarawas County,Ohio,http://www.co.tuscarawas.oh.us +Union County,Ohio,http://www.co.union.oh.us/ +Van Wert County,Ohio,https://www.vanwertcountyohio.gov +Vinton County,Ohio,http://www.vintoncounty.com/ +Warren County,Ohio,http://www.co.warren.oh.us +Washington County,Ohio,http://www.washingtongov.org/ +Wayne County,Ohio,http://www.wayneohio.org +Williams County,Ohio,http://www.co.williams.oh.us +Wood County,Ohio,http://www.woodcountyohio.gov +Wyandot County,Ohio,http://www.co.wyandot.oh.us +Beaver County,Oklahoma,http://beaver.okcounties.org/ +Beckham County,Oklahoma,http://beckham.okcounties.org +Blaine County,Oklahoma,http://blaine.okcounties.org/ +Canadian County,Oklahoma,http://www.canadiancounty.org +Carter County,Oklahoma,http://cartercountyok.us +Cleveland County,Oklahoma,http://www.clevelandcountyok.com/ +Comanche County,Oklahoma,http://www.comanchecounty.us +Creek County,Oklahoma,http://www.creekcountyonline.com +Custer County,Oklahoma,http://custer.okcounties.org/ +Delaware County,Oklahoma,https://delaware.okcounties.org/ +Garfield County,Oklahoma,http://www.garfieldok.com +Grady County,Oklahoma,http://www.gradycountyok.com +Grant County,Oklahoma,http://www.grantcountyok.com +Greer County,Oklahoma,http://greer.okcounties.org +Jackson County,Oklahoma,http://jackson.okcounties.org +Jefferson County,Oklahoma,http://www.jeffcoinfo.org +Johnston County,Oklahoma,http://www.johnstoncountyok.org +Kay County,Oklahoma,http://www.courthouse.kay.ok.us/home.html +Lincoln County,Oklahoma,https://lincoln.okcounties.org/ +Logan County,Oklahoma,http://www.logancountyok.com +Love County,Oklahoma,http://love.okcounties.org +McClain County,Oklahoma,http://mcclain-co-ok.us +Marshall County,Oklahoma,http://marshall.okcounties.org +Mayes County,Oklahoma,http://mayes.okcounties.org +Murray County,Oklahoma,http://www.visitmurraycountyok.com +Noble County,Oklahoma,http://www.noblecountyok.com/ +Nowata County,Oklahoma,http://nowata.com/ +Oklahoma County,Oklahoma,http://www.oklahomacounty.org +Ottawa County,Oklahoma,http://ottawa.okcounties.org/ +Pawnee County,Oklahoma,http://www.cityofpawnee.com/county-of-pawnee +Payne County,Oklahoma,http://www.paynecounty.org +Pittsburg County,Oklahoma,http://pittsburg.okcounties.org +Pottawatomie County,Oklahoma,http://pottawatomiecountyok.com/ +Roger Mills County,Oklahoma,http://www.rogermills.org/ +Rogers County,Oklahoma,http://www.rogerscounty.org +Stephens County,Oklahoma,http://www.stephenscountyok.com +Texas County,Oklahoma,https://texas.okcounties.org +Tillman County,Oklahoma,http://www.tillmancounty.org +Tulsa County,Oklahoma,http://www.tulsacounty.org +Wagoner County,Oklahoma,http://www.ok.gov/wagonercounty +Washington County,Oklahoma,http://www.countycourthouse.org/ +Woodward County,Oklahoma,http://woodwardcounty.org/401.html +Baker County,Oregon,http://www.bakercounty.org +Benton County,Oregon,http://www.co.benton.or.us +Clackamas County,Oregon,http://www.clackamas.us +Clatsop County,Oregon,http://www.co.clatsop.or.us +Columbia County,Oregon,https://www.columbiacountyor.gov +Coos County,Oregon,http://www.co.coos.or.us +Crook County,Oregon,http://co.crook.or.us +Curry County,Oregon,http://www.co.curry.or.us +Deschutes County,Oregon,http://www.deschutes.org +Douglas County,Oregon,http://www.co.douglas.or.us +Gilliam County,Oregon,http://www.co.gilliam.or.us +Grant County,Oregon,http://www.gcoregonlive2.com +Harney County,Oregon,http://www.co.harney.or.us +Hood River County,Oregon,https://hoodrivercounty.gov +Jackson County,Oregon,http://jacksoncountyor.org +Jefferson County,Oregon,http://www.co.jefferson.or.us +Josephine County,Oregon,http://www.co.josephine.or.us +Klamath County,Oregon,http://www.co.klamath.or.us +Lake County,Oregon,http://www.lakecountyor.org +Lane County,Oregon,https://www.lanecounty.org +Lincoln County,Oregon,http://www.co.lincoln.or.us +Linn County,Oregon,http://www.co.linn.or.us +Malheur County,Oregon,http://www.malheurco.org +Marion County,Oregon,http://www.co.marion.or.us +Morrow County,Oregon,http://www.co.morrow.or.us/ +Multnomah County,Oregon,http://www.multco.us +Polk County,Oregon,http://www.co.polk.or.us +Sherman County,Oregon,http://co.sherman.or.us +Tillamook County,Oregon,http://www.co.tillamook.or.us +Umatilla County,Oregon,http://www.co.umatilla.or.us +Union County,Oregon,http://www.union-county.org +Wallowa County,Oregon,http://co.wallowa.or.us +Wasco County,Oregon,http://co.wasco.or.us +Washington County,Oregon,https://www.washingtoncountyor.gov/ +Wheeler County,Oregon,http://www.wheelercountyoregon.com +Yamhill County,Oregon,http://www.co.yamhill.or.us +Adams County,Pennsylvania,http://www.adamscounty.us +Allegheny County,Pennsylvania,http://www.alleghenycounty.us +Armstrong County,Pennsylvania,http://www.co.armstrong.pa.us +Beaver County,Pennsylvania,http://www.beavercountypa.gov +Bedford County,Pennsylvania,http://bedfordcountypa.org +Berks County,Pennsylvania,http://www.co.berks.pa.us +Blair County,Pennsylvania,http://www.blairco.org +Bradford County,Pennsylvania,http://www.bradfordcountypa.org +Bucks County,Pennsylvania,https://www.buckscounty.gov +Butler County,Pennsylvania,http://www.co.butler.pa.us +Cambria County,Pennsylvania,http://www.co.cambria.pa.us +Cameron County,Pennsylvania,http://www.cameroncountypa.com +Carbon County,Pennsylvania,http://carboncounty.com +Centre County,Pennsylvania,http://www.centrecountypa.gov +Chester County,Pennsylvania,http://www.chesco.org +Clarion County,Pennsylvania,http://www.co.clarion.pa.us/ +Clearfield County,Pennsylvania,http://www.clearfieldco.org +Clinton County,Pennsylvania,http://www.clintoncountypa.com +Columbia County,Pennsylvania,http://www.columbiapa.org +Crawford County,Pennsylvania,http://www.crawfordcountypa.net +Cumberland County,Pennsylvania,https://www.cumberlandcountypa.gov +Dauphin County,Pennsylvania,http://www.dauphincounty.org +Delaware County,Pennsylvania,https://delcopa.gov +Elk County,Pennsylvania,http://www.co.elk.pa.us +Erie County,Pennsylvania,http://www.eriecountypa.gov +Fayette County,Pennsylvania,http://www.co.fayette.pa.us +Forest County,Pennsylvania,http://www.co.forest.pa.us +Franklin County,Pennsylvania,https://www.franklincountypa.gov/ +Fulton County,Pennsylvania,http://www.co.fulton.pa.us +Greene County,Pennsylvania,https://www.co.greene.pa.us/ +Huntingdon County,Pennsylvania,http://www.huntingdoncounty.net/Pages/default.aspx +Indiana County,Pennsylvania,https://www.indianacountypa.gov/ +Jefferson County,Pennsylvania,https://www.jeffersoncountypa.com/ +Juniata County,Pennsylvania,http://www.co.juniata.pa.us +Lackawanna County,Pennsylvania,http://www.lackawannacounty.org/ +Lancaster County,Pennsylvania,http://www.co.lancaster.pa.us +Lawrence County,Pennsylvania,http://www.co.lawrence.pa.us +Lebanon County,Pennsylvania,http://www.lebcounty.org +Lehigh County,Pennsylvania,http://www.lehighcounty.org +Luzerne County,Pennsylvania,http://www.luzernecounty.org +Lycoming County,Pennsylvania,http://www.lyco.org +McKean County,Pennsylvania,http://www.mckeancountypa.org +Mercer County,Pennsylvania,http://www.mcc.co.mercer.pa.us +Mifflin County,Pennsylvania,http://www.co.mifflin.pa.us +Monroe County,Pennsylvania,http://www.monroecountypa.gov +Montgomery County,Pennsylvania,http://www.montcopa.org/ +Montour County,Pennsylvania,http://www.montourco.org +Northampton County,Pennsylvania,http://www.northamptoncounty.org +Northumberland County,Pennsylvania,http://www.northumberlandco.org +Perry County,Pennsylvania,http://www.perryco.org +Philadelphia County,Pennsylvania,http://www.phila.gov/ +Pike County,Pennsylvania,http://www.pikepa.org +Potter County,Pennsylvania,https://visitpottertioga.com/ +Schuylkill County,Pennsylvania,http://www.co.schuylkill.pa.us +Snyder County,Pennsylvania,http://www.snydercounty.org +Somerset County,Pennsylvania,http://www.co.somerset.pa.us +Sullivan County,Pennsylvania,http://www.sullivancounty-pa.us +Susquehanna County,Pennsylvania,http://www.susqco.com +Tioga County,Pennsylvania,http://www.tiogacountypa.us +Union County,Pennsylvania,http://www.unionco.org +Venango County,Pennsylvania,http://www.co.venango.pa.us +Warren County,Pennsylvania,http://www.warrencountypa.net +Washington County,Pennsylvania,http://www.co.washington.pa.us +Wayne County,Pennsylvania,http://WayneCountyPA.gov +Westmoreland County,Pennsylvania,http://www.co.westmoreland.pa.us +Wyoming County,Pennsylvania,http://www.wycopa.org +York County,Pennsylvania,https://yorkcountypa.gov/ +Adjuntas,Puerto Rico,http://adjuntaspr.com +Aguada,Puerto Rico,http://aguada.gov.pr +Aguadilla,Puerto Rico,https://web.archive.org/web/20090301125733/http://www.aguadilla.gobierno.pr/ +Aguas Buenas,Puerto Rico,http://legislaturaaguasbuenas.com/ +Aibonito,Puerto Rico,http://www.aibonitopr.net/ +Añasco,Puerto Rico,http://www.anascopr.net +Arroyo,Puerto Rico,https://www.municipiodearroyo.com/ +Barranquitas,Puerto Rico,http://barranquitaspr.net/pueblo/ +Bayamón,Puerto Rico,http://www.municipiodebayamon.com +Cabo Rojo,Puerto Rico,http://www.caborojopr.net/ +Caguas,Puerto Rico,http://www.Caguas.gov.pr +Carolina,Puerto Rico,https://www.municipiocarolina.com/ +Cayey,Puerto Rico,http://www.agencias.pr.gov/municipio/cayey +Coamo,Puerto Rico,http://www.coamo.puertorico.pr +Comerío,Puerto Rico,http://www.comerio.gobierno.pr +Dorado,Puerto Rico,https://www.doradoparaiso.com +Fajardo,Puerto Rico,http://fajardopr.org +Guayama,Puerto Rico,http://www.viveelencanto.com +Guaynabo,Puerto Rico,http://www.guaynabocity.gov.pr +Gurabo,Puerto Rico,https://web.archive.org/web/20060614140404/http://www.gurabopr.com/ +Hormigueros,Puerto Rico,http://www.municipiohormiguerospr.com/ +Isabela,Puerto Rico,https://venaisabela.com/ +Maunabo,Puerto Rico,http://maunabomunicipio.com/ +Mayagüez,Puerto Rico,http://www.mayaguezpr.gov +Naranjito,Puerto Rico,https://municipiodenaranjito.com/ +Orocovis,Puerto Rico,https://www.orocovispr.org/ +Peñuelas,Puerto Rico,https://www.municipiodepenuelas.com +Ponce,Puerto Rico,http://visitponce.com/ +Quebradillas,Puerto Rico,http://www.quebradillas.pr.gov/ +Rincón,Puerto Rico,http://www.rincon.org/ +San Juan,Puerto Rico,http://sanjuanciudadpatria.com/en +San Sebastián,Puerto Rico,http://ssdelpepino.com/ +Toa Baja,Puerto Rico,http://www.toabaja.com +Trujillo Alto,Puerto Rico,http://www.trujilloalto.pr/ +Vega Baja,Puerto Rico,http://www.vegabaja.gov.pr/ +Yauco,Puerto Rico,http://www.yaucoatuservicio.com +Abbeville County,South Carolina,http://www.abbevillecountysc.com +Aiken County,South Carolina,http://www.aikencountysc.gov +Allendale County,South Carolina,http://www.allendalecounty.com +Anderson County,South Carolina,http://www.andersoncountysc.org +Bamberg County,South Carolina,http://www.bambergcountysc.gov +Barnwell County,South Carolina,http://sc-barnwell.civicplus.com +Beaufort County,South Carolina,http://www.beaufortcountysc.gov +Berkeley County,South Carolina,http://www.berkeleycountysc.gov +Calhoun County,South Carolina,http://calhouncounty.sc.gov +Charleston County,South Carolina,http://www.charlestoncounty.org +Cherokee County,South Carolina,http://www.cherokeecountysc.com +Chester County,South Carolina,http://www.chestercounty.org +Chesterfield County,South Carolina,http://www.chesterfieldcountysc.com +Clarendon County,South Carolina,http://www.clarendoncountygov.org +Colleton County,South Carolina,http://www.colletoncounty.org +Darlington County,South Carolina,http://www.darcosc.com +Dillon County,South Carolina,http://www.dilloncountysc.org +Dorchester County,South Carolina,http://www.dorchestercountysc.gov +Edgefield County,South Carolina,http://edgefieldcounty.sc.gov +Fairfield County,South Carolina,http://www.fairfieldsc.com +Florence County,South Carolina,http://www.florenceco.org +Georgetown County,South Carolina,http://www.georgetowncountysc.org +Greenville County,South Carolina,http://www.greenvillecounty.org +Greenwood County,South Carolina,http://www.greenwoodcounty-sc.gov +Hampton County,South Carolina,http://www.hamptoncountysc.org +Horry County,South Carolina,https://www.horrycountysc.gov +Jasper County,South Carolina,http://www.jaspercountysc.gov +Kershaw County,South Carolina,http://www.kershaw.sc.gov +Lancaster County,South Carolina,http://mylancastersc.org +Laurens County,South Carolina,http://laurenscounty.us +Lee County,South Carolina,http://www.leecountysc.org +Lexington County,South Carolina,http://www.lex-co.sc.gov +McCormick County,South Carolina,http://mccormickcountysc.org +Marion County,South Carolina,http://www.marionsc.org +Marlboro County,South Carolina,http://marlborocounty.sc.gov +Newberry County,South Carolina,http://www.newberrycounty.net +Oconee County,South Carolina,http://www.oconeesc.com +Orangeburg County,South Carolina,http://www.orangeburgcounty.org +Pickens County,South Carolina,http://www.co.pickens.sc.us +Richland County,South Carolina,https://www.richlandcountysc.gov/ +Saluda County,South Carolina,http://saludacounty.sc.gov +Spartanburg County,South Carolina,http://www.spartanburgcounty.org +Sumter County,South Carolina,http://www.sumtercountysc.org +Union County,South Carolina,http://gearupunionsc.com +Williamsburg County,South Carolina,http://www.williamsburgcounty.sc.gov +York County,South Carolina,http://www.yorkcountygov.com +Beadle County,South Dakota,http://beadle.sdcounties.org/ +Bon Homme County,South Dakota,http://bonhomme.sdcounties.org +Brookings County,South Dakota,http://www.brookingscountysd.gov +Brown County,South Dakota,http://www.brown.sd.us/ +Brule County,South Dakota,http://www.brulecounty.org +Butte County,South Dakota,http://butte.sdcounties.org +Charles Mix County,South Dakota,http://charlesmix.sdcounties.org/ +Clark County,South Dakota,http://clark.sdcounties.org/ +Clay County,South Dakota,http://www.claycountysd.org/ +Codington County,South Dakota,http://www.codington.org +Corson County,South Dakota,http://corson.sdcounties.org/ +Custer County,South Dakota,http://www.custercountysd.com/ +Davison County,South Dakota,http://www.davisoncounty.org +Day County,South Dakota,http://day.sdcounties.org/ +Douglas County,South Dakota,http://douglas.sdcounties.org +Edmunds County,South Dakota,http://edmunds.sdcounties.org +Fall River County,South Dakota,http://fallriver.sdcounties.org/ +Grant County,South Dakota,http://grantcounty.sd.gov/ +Gregory County,South Dakota,http://gregory.sdcounties.org/ +Haakon County,South Dakota,http://haakon.sdcounties.org +Hand County,South Dakota,http://hand.sdcounties.org +Hanson County,South Dakota,http://www.hansoncounty.net +Harding County,South Dakota,http://www.hardingcountysd.com/ +Hughes County,South Dakota,http://www.hughescounty.org +Hyde County,South Dakota,http://hydeco.org +Kingsbury County,South Dakota,http://kingsbury.sdcounties.org +Lake County,South Dakota,http://www.lake.sd.gov/default.aspx +Lawrence County,South Dakota,http://www.lawrence.sd.us/ +Lincoln County,South Dakota,http://lincolncountysd.org/ +Lyman County,South Dakota,http://www.lymancounty.org +McCook County,South Dakota,http://www.mccookcountysd.com +McPherson County,South Dakota,http://mcpherson.sdcounties.org/ +Marshall County,South Dakota,http://marshall.sdcounties.org/ +Meade County,South Dakota,http://www.meadecounty.org +Miner County,South Dakota,http://www.minercountysd.org +Minnehaha County,South Dakota,http://www.minnehahacounty.org +Moody County,South Dakota,http://www.moodycounty.net +Oglala Lakota County,South Dakota,http://oglalalakota.sdcounties.org +Pennington County,South Dakota,http://www.co.pennington.sd.us +Perkins County,South Dakota,http://www.perkinscounty.org +Roberts County,South Dakota,http://roberts.sdcounties.org/ +Spink County,South Dakota,http://www.spinkcounty-sd.org +Stanley County,South Dakota,http://www.stanleycounty.org/ +Sully County,South Dakota,http://www.sullycounty.net/ +Tripp County,South Dakota,http://trippcounty.us/ +Turner County,South Dakota,http://turner.sdcounties.org +Union County,South Dakota,http://unioncountysd.org/ +Walworth County,South Dakota,http://walworthco.org +Yankton County,South Dakota,http://www.co.yankton.sd.us +Anderson County,Tennessee,http://www.andersontn.org +Bedford County,Tennessee,http://www.bedfordcountytn.org/ +Benton County,Tennessee,http://www.bentoncountytn.gov +Blount County,Tennessee,http://www.blounttn.org +Bradley County,Tennessee,http://www.bradleycountytn.gov +Campbell County,Tennessee,http://www.campbellcountytn.gov +Cannon County,Tennessee,https://www.cannoncountytn.gov +Carroll County,Tennessee,https://carrollcountytn.gov +Carter County,Tennessee,http://www.cartercountytn.gov +Cheatham County,Tennessee,http://www.cheathamcountytn.gov +Chester County,Tennessee,http://chestercountytn.org +Claiborne County,Tennessee,https://www.claibornecountytn.gov +Clay County,Tennessee,https://dalehollowlake.org/ +Cocke County,Tennessee,http://www.cockecountytn.gov/ +Coffee County,Tennessee,http://coffeecountytn.org +Cumberland County,Tennessee,http://cumberlandcountytn.gov +Davidson County,Tennessee,http://www.nashville.gov/ +Decatur County,Tennessee,http://decaturcountytn.org +DeKalb County,Tennessee,http://dekalbtennessee.com +Dickson County,Tennessee,http://dicksoncountytn.gov +Dyer County,Tennessee,http://dyercounty.com/ +Fayette County,Tennessee,http://fayettetn.us +Fentress County,Tennessee,http://www.fentresscountytn.gov +Franklin County,Tennessee,http://franklincotn.us +Giles County,Tennessee,https://gilescountytn.gov/ +Grainger County,Tennessee,http://www.graingercountytn.com +Greene County,Tennessee,http://greenecountytngov.com +Grundy County,Tennessee,http://grundycountytn.net +Hamblen County,Tennessee,http://www.hamblencountytn.gov +Hamilton County,Tennessee,http://www.hamiltontn.gov +Hancock County,Tennessee,http://www.hancockcountytn.com +Hawkins County,Tennessee,http://www.hawkinscountytn.gov/ +Haywood County,Tennessee,http://haywoodcountybrownsville.com/haywood-county/ +Henderson County,Tennessee,http://hendersoncountytn.gov +Henry County,Tennessee,http://henryco.com +Hickman County,Tennessee,http://hickmanco.com +Houston County,Tennessee,http://www.houstoncochamber.com +Humphreys County,Tennessee,http://www.humphreystn.com +Jackson County,Tennessee,http://www.jacksoncotn.com +Jefferson County,Tennessee,https://jeffersoncountytn.gov/ +Knox County,Tennessee,http://knoxcounty.org +Lake County,Tennessee,http://www.lakecountytn.com +Lauderdale County,Tennessee,https://lauderdalecountytn.org/ +Lawrence County,Tennessee,http://www.lawrencecountytn.gov/ +Lewis County,Tennessee,http://www.lewiscountytn.com +Lincoln County,Tennessee,https://www.lincolncountytn.gov +Loudon County,Tennessee,http://www.loudoncounty-tn.gov +McMinn County,Tennessee,http://mcminncountytn.gov +McNairy County,Tennessee,http://www.mcnairycountytn.com +Macon County,Tennessee,http://maconcountytn.gov +Madison County,Tennessee,https://www.madisoncountytn.gov +Marion County,Tennessee,http://www.marioncountytn.net/ +Marshall County,Tennessee,http://marshallcountytn.com +Maury County,Tennessee,http://www.maurycounty-tn.gov +Meigs County,Tennessee,https://www.meigscounty.org/ +Monroe County,Tennessee,http://www.monroetn.com +Montgomery County,Tennessee,https://mcgtn.org +Moore County,Tennessee,http://www.lynchburgtn.com/government---education-services.html +Morgan County,Tennessee,http://www.morgancountytn.gov +Obion County,Tennessee,https://www.obioncountytn.gov/ +Overton County,Tennessee,http://www.overtoncountytn.com +Perry County,Tennessee,http://www.perrycountygov.com +Polk County,Tennessee,http://www.polkgovernment.com +Putnam County,Tennessee,http://putnamcountytn.gov +Rhea County,Tennessee,http://www.rheacountytn.com +Roane County,Tennessee,http://roanecountytn.gov/ +Robertson County,Tennessee,https://robertsoncountytn.gov +Rutherford County,Tennessee,http://rutherfordcountytn.gov +Scott County,Tennessee,http://www.scottcounty.com +Sequatchie County,Tennessee,https://sequatchiecounty-tn.gov +Sevier County,Tennessee,http://www.seviercountytn.gov +Shelby County,Tennessee,http://www.shelbycountytn.gov +Stewart County,Tennessee,http://www.stewartcogov.com +Sullivan County,Tennessee,https://sullivancountytn.gov/ +Sumner County,Tennessee,http://www.sumnertn.org +Tipton County,Tennessee,http://www.tiptonco.com +Trousdale County,Tennessee,http://www.trousdalecountytn.gov/ +Unicoi County,Tennessee,http://www.unicoicountytn.gov +Union County,Tennessee,http://www.unioncountytn.com +Van Buren County,Tennessee,https://vanburencountytn.com/ +Warren County,Tennessee,http://www.warrencountytn.gov +Washington County,Tennessee,http://www.washingtoncountytn.org +Wayne County,Tennessee,http://www.waynecountytn.org +Weakley County,Tennessee,http://www.weakleycountytn.gov +White County,Tennessee,http://whitecountytn.gov/ +Williamson County,Tennessee,http://williamsoncounty-tn.gov +Wilson County,Tennessee,http://www.wilsoncountytn.gov +Anderson County,Texas,http://www.co.anderson.tx.us/ +Andrews County,Texas,http://www.co.andrews.tx.us +Angelina County,Texas,http://www.angelinacounty.net/ +Aransas County,Texas,http://www.aransascountytx.gov/main/ +Archer County,Texas,http://www.co.archer.tx.us/ +Armstrong County,Texas,http://www.co.armstrong.tx.us/ +Atascosa County,Texas,http://atascosacounty.texas.gov +Austin County,Texas,http://www.austincounty.com +Bailey County,Texas,http://www.co.bailey.tx.us +Bandera County,Texas,https://www.banderacounty.org/ +Bastrop County,Texas,http://www.co.bastrop.tx.us +Baylor County,Texas,http://www.co.baylor.tx.us/ +Bee County,Texas,http://co.bee.tx.us +Bell County,Texas,http://www.bellcountytx.com +Bexar County,Texas,http://www.bexar.org/ +Blanco County,Texas,http://www.co.blanco.tx.us/ +Borden County,Texas,http://www.co.borden.tx.us +Bosque County,Texas,http://www.bosquecounty.us +Bowie County,Texas,http://www.co.bowie.tx.us +Brazoria County,Texas,https://brazoriacountytx.gov/ +Brazos County,Texas,http://www.brazoscountytx.gov +Brewster County,Texas,http://www.brewstercountytx.com/ +Briscoe County,Texas,http://www.co.briscoe.tx.us/ +Brooks County,Texas,http://www.co.brooks.tx.us +Brown County,Texas,http://www.browncountytx.org/ +Burleson County,Texas,http://www.co.burleson.tx.us +Burnet County,Texas,http://www.burnetcountytexas.org/ +Caldwell County,Texas,http://www.co.caldwell.tx.us +Calhoun County,Texas,http://www.calhouncotx.org +Callahan County,Texas,http://www.co.callahan.tx.us +Cameron County,Texas,http://www.co.cameron.tx.us/ +Camp County,Texas,http://www.co.camp.tx.us +Carson County,Texas,http://www.co.carson.tx.us +Cass County,Texas,http://www.co.cass.tx.us +Castro County,Texas,http://www.co.castro.tx.us +Chambers County,Texas,http://www.co.chambers.tx.us +Cherokee County,Texas,http://www.co.cherokee.tx.us +Childress County,Texas,http://www.childresscountytexas.us/ +Clay County,Texas,http://www.co.clay.tx.us +Cochran County,Texas,http://www.co.cochran.tx.us +Coke County,Texas,http://www.co.coke.tx.us +Coleman County,Texas,http://www.co.coleman.tx.us +Collin County,Texas,https://www.collincountytx.gov/ +Collingsworth County,Texas,http://www.co.collingsworth.tx.us +Colorado County,Texas,http://www.co.colorado.tx.us +Comal County,Texas,http://www.co.comal.tx.us +Concho County,Texas,http://www.co.concho.tx.us +Cooke County,Texas,http://www.co.cooke.tx.us +Coryell County,Texas,http://www.coryellcounty.org +Cottle County,Texas,http://www.co.cottle.tx.us +Crane County,Texas,http://www.co.crane.tx.us +Crockett County,Texas,http://www.co.crockett.tx.us +Crosby County,Texas,http://www.co.crosby.tx.us +Culberson County,Texas,http://www.co.culberson.tx.us +Dallam County,Texas,http://www.dallam.org +Dallas County,Texas,https://www.dallascounty.org +Dawson County,Texas,http://www.co.dawson.tx.us +Deaf Smith County,Texas,http://www.co.deaf-smith.tx.us +Delta County,Texas,http://www.deltacountytx.com +Denton County,Texas,https://dentoncounty.gov/ +DeWitt County,Texas,http://www.co.dewitt.tx.us +Dickens County,Texas,http://www.co.dickens.tx.us +Dimmit County,Texas,http://www.dimmitcounty.org +Donley County,Texas,http://www.co.donley.tx.us +Duval County,Texas,https://www.co.duval.tx.us/ +Eastland County,Texas,https://www.eastlandcountytexas.com/ +Ector County,Texas,http://www.co.ector.tx.us +Edwards County,Texas,http://co.edwards.tx.us +Ellis County,Texas,https://www.co.ellis.tx.us +El Paso County,Texas,http://www.epcounty.com +Erath County,Texas,http://www.co.erath.tx.us +Falls County,Texas,http://www.co.falls.tx.us/ +Fannin County,Texas,http://www.co.fannin.tx.us +Fayette County,Texas,http://www.co.fayette.tx.us +Fisher County,Texas,http://www.co.fisher.tx.us +Floyd County,Texas,http://www.co.floyd.tx.us +Fort Bend County,Texas,https://www.fortbendcountytx.gov/ +Franklin County,Texas,http://www.co.franklin.tx.us +Freestone County,Texas,http://www.co.freestone.tx.us/ +Frio County,Texas,http://www.co.frio.tx.us +Gaines County,Texas,http://www.co.gaines.tx.us +Galveston County,Texas,https://www.galvestoncountytx.gov +Garza County,Texas,http://www.garzacounty.net/index.html +Gillespie County,Texas,http://www.gillespiecounty.org +Glasscock County,Texas,http://www.co.glasscock.tx.us +Goliad County,Texas,http://www.co.goliad.tx.us +Gonzales County,Texas,http://www.co.gonzales.tx.us +Gray County,Texas,http://www.co.gray.tx.us +Grayson County,Texas,http://www.co.grayson.tx.us +Gregg County,Texas,https://www.co.gregg.tx.us/ +Grimes County,Texas,http://www.co.grimes.tx.us +Guadalupe County,Texas,http://www.co.guadalupe.tx.us +Hale County,Texas,http://www.halecounty.org +Hamilton County,Texas,http://www.hamiltoncountytx.org/ +Hansford County,Texas,http://www.co.hansford.tx.us +Hardin County,Texas,http://www.co.hardin.tx.us +Harris County,Texas,http://www.co.harris.tx.us +Harrison County,Texas,http://harrisoncountytexas.org +Hartley County,Texas,http://www.co.hartley.tx.us +Haskell County,Texas,http://www.co.haskell.tx.us +Hays County,Texas,https://hayscountytx.com/ +Hemphill County,Texas,http://www.co.hemphill.tx.us +Henderson County,Texas,http://www.co.henderson.tx.us +Hidalgo County,Texas,https://www.hidalgocounty.us/ +Hill County,Texas,http://www.co.hill.tx.us +Hockley County,Texas,http://www.co.hockley.tx.us +Hood County,Texas,https://www.co.hood.tx.us +Hopkins County,Texas,http://www.hopkinscountytx.org +Houston County,Texas,http://www.co.houston.tx.us +Howard County,Texas,http://www.co.howard.tx.us +Hudspeth County,Texas,http://www.co.hudspeth.tx.us +Hunt County,Texas,http://www.huntcounty.net +Hutchinson County,Texas,http://www.co.hutchinson.tx.us +Irion County,Texas,http://www.co.irion.tx.us +Jack County,Texas,http://www.jackcounty.org +Jackson County,Texas,http://www.co.jackson.tx.us +Jasper County,Texas,http://www.co.jasper.tx.us +Jeff Davis County,Texas,http://www.co.jeff-davis.tx.us +Jefferson County,Texas,http://www.co.jefferson.tx.us +Jim Hogg County,Texas,http://www.co.jim-hogg.tx.us/ +Jim Wells County,Texas,http://www.co.jim-wells.tx.us +Johnson County,Texas,http://www.johnsoncountytx.org +Jones County,Texas,http://www.co.jones.tx.us +Karnes County,Texas,http://www.co.karnes.tx.us +Kaufman County,Texas,http://www.kaufmancounty.net/ +Kendall County,Texas,http://www.co.kendall.tx.us +Kenedy County,Texas,http://www.co.kenedy.tx.us +Kent County,Texas,http://www.co.kent.tx.us +Kerr County,Texas,https://www.kerrcountytx.gov +Kimble County,Texas,http://www.co.kimble.tx.us +King County,Texas,http://www.kingcountytexas.us +Kinney County,Texas,http://www.co.kinney.tx.us +Kleberg County,Texas,http://www.co.kleberg.tx.us +Knox County,Texas,http://www.knoxcountytexas.org +Lamar County,Texas,http://www.co.lamar.tx.us +Lamb County,Texas,http://co.lamb.tx.us +Lampasas County,Texas,http://www.co.lampasas.tx.us +La Salle County,Texas,http://lasallecountytx.org +Lavaca County,Texas,http://www.co.lavaca.tx.us/ +Lee County,Texas,http://www.co.lee.tx.us/ +Leon County,Texas,http://www.co.leon.tx.us +Liberty County,Texas,http://www.co.liberty.tx.us +Limestone County,Texas,http://www.co.limestone.tx.us +Lipscomb County,Texas,http://www.co.lipscomb.tx.us +Live Oak County,Texas,http://www.co.live-oak.tx.us +Llano County,Texas,http://www.co.llano.tx.us +Loving County,Texas,http://www.co.loving.tx.us +Lynn County,Texas,http://www.co.lynn.tx.us +McCulloch County,Texas,http://www.co.mcculloch.tx.us +McLennan County,Texas,http://www.co.mclennan.tx.us +McMullen County,Texas,http://www.co.mcmullen.tx.us +Madison County,Texas,http://www.co.madison.tx.us +Marion County,Texas,http://www.co.marion.tx.us +Mason County,Texas,http://www.co.mason.tx.us +Matagorda County,Texas,http://www.co.matagorda.tx.us +Maverick County,Texas,http://www.co.maverick.tx.us +Medina County,Texas,http://www.medinacountytexas.org +Menard County,Texas,http://co.menard.tx.us +Midland County,Texas,http://www.co.midland.tx.us +Milam County,Texas,http://www.milamcounty.net/ +Mills County,Texas,https://www.co.mills.tx.us +Montague County,Texas,http://www.co.montague.tx.us +Montgomery County,Texas,http://www.mctx.org/ +Moore County,Texas,http://www.co.moore.tx.us +Morris County,Texas,http://www.co.morris.tx.us/ +Motley County,Texas,http://www.co.motley.tx.us +Nacogdoches County,Texas,http://www.co.nacogdoches.tx.us +Navarro County,Texas,http://www.co.navarro.tx.us +Newton County,Texas,http://www.co.newton.tx.us +Nolan County,Texas,http://www.co.nolan.tx.us +Nueces County,Texas,http://www.co.nueces.tx.us +Ochiltree County,Texas,http://www.co.ochiltree.tx.us +Oldham County,Texas,http://www.co.oldham.tx.us +Orange County,Texas,http://www.co.orange.tx.us +Palo Pinto County,Texas,http://www.co.palo-pinto.tx.us +Panola County,Texas,http://www.co.panola.tx.us +Parker County,Texas,http://www.parkercountytx.com +Parmer County,Texas,http://parmercounty.org/ +Pecos County,Texas,http://www.co.pecos.tx.us +Polk County,Texas,http://www.co.polk.tx.us +Potter County,Texas,http://www.mypottercounty.com +Presidio County,Texas,http://www.co.presidio.tx.us +Rains County,Texas,http://www.co.rains.tx.us +Randall County,Texas,http://www.randallcounty.com +Reagan County,Texas,http://www.reagancountytexas.us/ +Real County,Texas,http://www.co.real.tx.us +Red River County,Texas,http://www.co.red-river.tx.us +Reeves County,Texas,http://www.reevescounty.org +Refugio County,Texas,http://www.co.refugio.tx.us +Roberts County,Texas,http://www.co.roberts.tx.us +Robertson County,Texas,http://www.co.robertson.tx.us +Rockwall County,Texas,https://www.rockwallcountytexas.com +Runnels County,Texas,http://www.co.runnels.tx.us +Rusk County,Texas,http://www.co.rusk.tx.us +Sabine County,Texas,http://www.co.sabine.tx.us/ +San Augustine County,Texas,http://www.co.san-augustine.tx.us +San Jacinto County,Texas,http://www.co.san-jacinto.tx.us +San Patricio County,Texas,http://www.co.san-patricio.tx.us/ +San Saba County,Texas,http://www.co.san-saba.tx.us +Schleicher County,Texas,http://www.co.schleicher.tx.us +Scurry County,Texas,http://www.co.scurry.tx.us +Shelby County,Texas,http://www.co.shelby.tx.us +Sherman County,Texas,http://www.co.sherman.tx.us +Smith County,Texas,http://www.smith-county.com +Somervell County,Texas,http://www.somervell.co/ +Starr County,Texas,http://www.co.starr.tx.us +Stephens County,Texas,http://www.co.stephens.tx.us +Sterling County,Texas,http://www.co.sterling.tx.us +Sutton County,Texas,http://www.co.sutton.tx.us +Swisher County,Texas,http://www.co.swisher.tx.us +Tarrant County,Texas,http://tarrantcounty.com +Taylor County,Texas,http://www.taylorcountytexas.org +Terrell County,Texas,http://www.co.terrell.tx.us +Terry County,Texas,http://www.co.terry.tx.us +Throckmorton County,Texas,http://www.co.throckmorton.tx.us +Titus County,Texas,http://www.co.titus.tx.us +Tom Green County,Texas,http://www.co.tom-green.tx.us +Travis County,Texas,http://traviscountytx.gov +Trinity County,Texas,http://www.co.trinity.tx.us +Tyler County,Texas,http://www.co.tyler.tx.us +Upshur County,Texas,http://www.countyofupshur.com/ +Upton County,Texas,http://www.co.upton.tx.us +Uvalde County,Texas,http://www.uvaldecounty.com +Val Verde County,Texas,http://www.valverdecounty.texas.gov +Van Zandt County,Texas,http://www.vanzandtcounty.org +Victoria County,Texas,http://www.victoriacountytx.org +Walker County,Texas,http://www.co.walker.tx.us/ +Waller County,Texas,http://www.co.waller.tx.us +Ward County,Texas,http://www.co.ward.tx.us +Washington County,Texas,http://www.co.washington.tx.us +Webb County,Texas,https://www.webbcountytx.gov +Wharton County,Texas,http://www.co.wharton.tx.us +Wheeler County,Texas,http://www.co.wheeler.tx.us +Wichita County,Texas,https://wichitacountytx.com/ +Wilbarger County,Texas,http://www.co.wilbarger.tx.us +Willacy County,Texas,http://www.co.willacy.tx.us/ +Williamson County,Texas,http://wilco.org +Wilson County,Texas,http://www.co.wilson.tx.us +Winkler County,Texas,http://www.co.winkler.tx.us +Wise County,Texas,http://www.co.wise.tx.us +Wood County,Texas,http://www.mywoodcounty.com/ +Yoakum County,Texas,http://www.co.yoakum.tx.us +Young County,Texas,http://www.co.young.tx.us +Zapata County,Texas,http://www.co.zapata.tx.us +Zavala County,Texas,http://www.co.zavala.tx.us +Beaver County,Utah,http://beaver.utah.gov +Box Elder County,Utah,http://www.boxeldercounty.org +Cache County,Utah,http://www.cachecounty.org +Carbon County,Utah,http://www.carbon.utah.gov +Daggett County,Utah,http://www.daggettcounty.org/ +Davis County,Utah,http://www.daviscountyutah.gov +Duchesne County,Utah,http://duchesne.utah.gov/ +Emery County,Utah,http://www.emerycounty.com +Garfield County,Utah,http://garfield.utah.gov +Grand County,Utah,http://www.grandcountyutah.net +Iron County,Utah,http://www.ironcounty.net +Juab County,Utah,http://www.co.juab.ut.us +Kane County,Utah,http://kane.utah.gov +Millard County,Utah,https://www.millardcounty.org +Morgan County,Utah,http://www.morgan-county.net +Piute County,Utah,https://www.piuteutah.com/ +Rich County,Utah,http://www.richcountyut.org +Salt Lake County,Utah,http://slco.org +San Juan County,Utah,http://sanjuancounty.org +Sanpete County,Utah,http://sanpete.com +Sevier County,Utah,http://www.sevierutah.net +Summit County,Utah,http://www.co.summit.ut.us +Tooele County,Utah,http://www.co.tooele.ut.us +Uintah County,Utah,http://www.co.uintah.ut.us +Utah County,Utah,http://www.utahcounty.gov +Wasatch County,Utah,https://www.wasatch.utah.gov +Washington County,Utah,http://www.washco.state.ut.us +Wayne County,Utah,http://www.waynecountyutah.org +Weber County,Utah,http://www.co.weber.ut.us/ +Addison County,Vermont,http://www.addisoncounty.com/ +Bennington County,Vermont,http://www.rpc.bennington.vt.us +Lamoille County,Vermont,http://www.lcpcvt.org +Windsor County,Vermont,http://www.swcrpc.org/ +Accomack County,Virginia,http://www.co.accomack.va.us +Albemarle County,Virginia,http://www.albemarle.org +Alleghany County,Virginia,http://www.co.alleghany.va.us/ +Amelia County,Virginia,https://va-ameliacounty.civicplus.com +Amherst County,Virginia,http://www.countyofamherst.com +Appomattox County,Virginia,http://www.appomattoxcountyva.gov +Arlington County,Virginia,http://www.arlingtonva.us/ +Augusta County,Virginia,http://www.co.augusta.va.us/ +Bath County,Virginia,http://www.bathcountyva.org +Bedford County,Virginia,http://www.bedfordcountyva.gov +Bland County,Virginia,http://www.blandcountyva.gov +Botetourt County,Virginia,https://botetourtva.gov/ +Brunswick County,Virginia,http://www.brunswickco.com +Buchanan County,Virginia,http://www.buchanancountyonline.com/ +Buckingham County,Virginia,http://www.buckinghamcountyva.org +Campbell County,Virginia,http://www.co.campbell.va.us +Caroline County,Virginia,http://www.co.caroline.va.us +Carroll County,Virginia,http://www.carrollcountyva.org +Charles City County,Virginia,http://www.co.charles-city.va.us +Charlotte County,Virginia,http://www.charlotteva.com/ +Chesterfield County,Virginia,http://www.chesterfield.gov +Clarke County,Virginia,http://clarkecounty.gov +Craig County,Virginia,http://www.craigcountyva.gov +Culpeper County,Virginia,http://www.culpepercounty.gov +Cumberland County,Virginia,http://www.cumberlandcounty.virginia.gov +Dickenson County,Virginia,http://www.dickensonva.org +Dinwiddie County,Virginia,http://www.dinwiddieva.us +Essex County,Virginia,http://www.essex-virginia.org +Fairfax County,Virginia,http://www.fairfaxcounty.gov/ +Fauquier County,Virginia,http://www.fauquiercounty.gov +Floyd County,Virginia,http://www.floydcova.org +Fluvanna County,Virginia,http://fluvannacounty.org/ +Franklin County,Virginia,http://www.franklincountyva.gov/ +Frederick County,Virginia,http://www.fcva.us +Giles County,Virginia,http://www.VirginiasMtnPlayground.com +Gloucester County,Virginia,http://gloucesterva.info/ +Goochland County,Virginia,http://www.co.goochland.va.us +Grayson County,Virginia,http://www.graysongovernment.com +Greene County,Virginia,http://www.gcva.us +Greensville County,Virginia,http://www.greensvillecountyva.gov +Halifax County,Virginia,https://www.halifaxcountyva.gov +Hanover County,Virginia,http://www.co.hanover.va.us +Henrico County,Virginia,http://henrico.us +Henry County,Virginia,http://www.co.henry.va.us +Highland County,Virginia,http://www.highlandcova.org +Isle of Wight County,Virginia,http://www.co.isle-of-wight.va.us +James City County,Virginia,http://www.jamescitycountyva.gov +King and Queen County,Virginia,http://www.kingandqueenco.net +King George County,Virginia,http://www.kinggeorgecountyva.gov +King William County,Virginia,http://www.kingwilliamcounty.us/ +Lancaster County,Virginia,http://www.lancova.com +Lee County,Virginia,http://www.LeeCoVA.org +Loudoun County,Virginia,http://www.loudoun.gov/ +Louisa County,Virginia,http://www.louisacounty.com +Lunenburg County,Virginia,http://www.lunenburgva.org +Madison County,Virginia,http://www.madisonco.virginia.gov +Mathews County,Virginia,http://www.co.mathews.va.us +Mecklenburg County,Virginia,http://www.mecklenburgva.com +Middlesex County,Virginia,http://www.co.middlesex.va.us +Montgomery County,Virginia,http://www.montva.com +Nelson County,Virginia,http://www.nelsoncounty-va.gov +New Kent County,Virginia,http://www.co.new-kent.va.us +Northampton County,Virginia,https://www.co.northampton.va.us/ +Northumberland County,Virginia,http://www.co.northumberland.va.us +Nottoway County,Virginia,http://www.nottoway.org +Orange County,Virginia,http://orangecountyva.gov +Page County,Virginia,http://www.pagecounty.virginia.gov/ +Patrick County,Virginia,http://www.co.patrick.va.us +Pittsylvania County,Virginia,http://www.pittsylvaniacountyva.gov +Powhatan County,Virginia,http://www.powhatanva.gov +Prince Edward County,Virginia,http://www.co.prince-edward.va.us +Prince George County,Virginia,http://www.princegeorgeva.org +Prince William County,Virginia,http://www.pwcgov.org/ +Pulaski County,Virginia,http://www.pulaskicounty.org +Rappahannock County,Virginia,http://rappahannockcountyva.gov +Richmond County,Virginia,http://www.co.richmond.va.us +Roanoke County,Virginia,http://www.roanokecountyva.gov +Rockbridge County,Virginia,http://www.co.rockbridge.va.us +Rockingham County,Virginia,http://www.rockinghamcountyva.gov/ +Russell County,Virginia,http://www.russellcountyva.us/ +Scott County,Virginia,http://www.scottcountyva.com +Shenandoah County,Virginia,http://www.shenandoahcountyva.us/ +Smyth County,Virginia,http://www.smythcounty.org +Southampton County,Virginia,http://www.southamptoncounty.org +Spotsylvania County,Virginia,http://www.spotsylvania.va.us/ +Stafford County,Virginia,http://staffordcountyva.gov +Surry County,Virginia,http://www.surrycountyva.gov +Sussex County,Virginia,http://www.sussexcountyva.gov +Tazewell County,Virginia,http://tazewellcountyva.org/ +Warren County,Virginia,http://www.warrencountyva.net +Washington County,Virginia,http://www.washcova.com +Westmoreland County,Virginia,http://www.westmoreland-county.org/ +Wise County,Virginia,http://www.wisecounty.org +Wythe County,Virginia,http://www.wytheco.org +York County,Virginia,http://www.yorkcounty.gov +Alexandria,Virginia,http://www.alexandriava.gov +Bristol,Virginia,http://www.bristolva.org +Buena Vista,Virginia,http://www.buenavistavirginia.org +Charlottesville,Virginia,http://www.charlottesville.gov/ +Chesapeake,Virginia,http://www.cityofchesapeake.net/ +Colonial Heights,Virginia,http://www.colonialheightsva.gov +Covington,Virginia,https://covington.va.us/ +Danville,Virginia,http://www.danville-va.gov +Emporia,Virginia,http://www.ci.emporia.va.us/ +Fairfax,Virginia,http://www.fairfaxva.gov +Falls Church,Virginia,http://fallschurchva.gov +Franklin,Virginia,http://www.franklinva.com +Fredericksburg,Virginia,http://www.fredericksburgva.gov +Galax,Virginia,http://www.galaxva.com +Hampton,Virginia,http://www.hampton.gov +Harrisonburg,Virginia,https://www.harrisonburgva.gov/ +Hopewell,Virginia,http://www.hopewellva.gov +Lexington,Virginia,http://lexingtonva.gov/ +Lynchburg,Virginia,http://lynchburgva.gov +Manassas,Virginia,http://www.manassasva.gov +Manassas Park,Virginia,http://www.cityofmanassaspark.us/ +Martinsville,Virginia,http://www.martinsville-va.gov +Newport News,Virginia,http://www.nnva.gov +Norfolk,Virginia,http://www.norfolk.gov/ +Norton,Virginia,http://www.nortonva.org/ +Petersburg,Virginia,http://www.petersburgva.gov +Poquoson,Virginia,http://www.poquoson-va.gov +Portsmouth,Virginia,http://www.portsmouthva.gov/ +Radford,Virginia,http://www.radfordva.gov +Richmond,Virginia,https://rva.gov +Roanoke,Virginia,http://www.roanokeva.gov +Salem,Virginia,http://www.salemva.gov/ +Staunton,Virginia,http://www.staunton.va.us/ +Suffolk,Virginia,http://www.suffolkva.us/ +Virginia Beach,Virginia,http://www.vbgov.com/ +Waynesboro,Virginia,http://www.waynesboro.va.us/ +Williamsburg,Virginia,http://www.williamsburgva.gov/ +Winchester,Virginia,http://www.winchesterva.gov/ +Adams County,Washington,http://www.co.adams.wa.us +Asotin County,Washington,http://www.co.asotin.wa.us +Benton County,Washington,https://www.co.benton.wa.us/ +Chelan County,Washington,http://www.co.chelan.wa.us +Clallam County,Washington,http://www.clallam.net +Clark County,Washington,https://clark.wa.gov/ +Columbia County,Washington,http://www.columbiaco.com +Cowlitz County,Washington,http://www.co.cowlitz.wa.us +Douglas County,Washington,http://www.douglascountywa.net +Ferry County,Washington,http://www.ferry-county.com/ +Franklin County,Washington,http://www.co.franklin.wa.us +Garfield County,Washington,http://www.co.garfield.wa.us +Grant County,Washington,http://www.grantcountywa.gov +Grays Harbor County,Washington,http://www.co.grays-harbor.wa.us +Island County,Washington,http://www.islandcountywa.gov +Jefferson County,Washington,http://www.co.jefferson.wa.us +King County,Washington,http://www.kingcounty.gov/ +Kitsap County,Washington,http://www.kitsapgov.com +Kittitas County,Washington,http://www.co.kittitas.wa.us +Klickitat County,Washington,http://www.klickitatcounty.org +Lewis County,Washington,http://www.lewiscountywa.gov +Lincoln County,Washington,http://www.co.lincoln.wa.us +Mason County,Washington,https://www.masoncountywa.gov +Okanogan County,Washington,http://okanogancounty.org +Pacific County,Washington,http://www.co.pacific.wa.us +Pend Oreille County,Washington,http://www.pendoreilleco.org +Pierce County,Washington,https://www.piercecountywa.gov/ +San Juan County,Washington,http://www.sanjuanco.com +Skagit County,Washington,http://www.skagitcounty.net +Skamania County,Washington,http://www.skamaniacounty.org +Snohomish County,Washington,http://snohomishcountywa.gov +Spokane County,Washington,https://www.spokanecounty.org/ +Stevens County,Washington,http://www.stevenscountywa.gov +Thurston County,Washington,http://www.co.thurston.wa.us +Wahkiakum County,Washington,http://www.co.wahkiakum.wa.us +Walla Walla County,Washington,http://www.co.walla-walla.wa.us +Whatcom County,Washington,https://www.whatcomcounty.us/ +Whitman County,Washington,http://www.whitmancounty.org +Yakima County,Washington,http://www.yakimacounty.us +Barbour County,West Virginia,https://barbourcountywv.org/ +Berkeley County,West Virginia,http://www.berkeleywv.org/ +Boone County,West Virginia,http://www.boonecountywv.org +Braxton County,West Virginia,http://www.braxtoncounty.wv.gov/Pages/default.aspx +Brooke County,West Virginia,http://www.brookewv.org +Cabell County,West Virginia,http://www.cabellcounty.org +Calhoun County,West Virginia,http://www.calhouncounty.wv.gov/ +Clay County,West Virginia,http://www.claycounty.wv.gov/ +Doddridge County,West Virginia,https://www.doddridgecountywv.gov/ +Fayette County,West Virginia,http://www.fayettecounty.wv.gov/ +Gilmer County,West Virginia,http://www.gilmercounty.wv.gov +Grant County,West Virginia,http://www.grantcountywv.org +Greenbrier County,West Virginia,http://www.greenbriercounty.net +Hampshire County,West Virginia,http://www.hampshirecounty.wv.gov +Hancock County,West Virginia,http://www.hancockcountywv.org +Hardy County,West Virginia,http://www.hardycounty.com +Harrison County,West Virginia,http://www.harrisoncountywv.com +Jackson County,West Virginia,http://www.jacksoncounty.wv.gov/ +Jefferson County,West Virginia,http://www.jeffersoncountywv.org +Kanawha County,West Virginia,http://www.kanawha.us +Lewis County,West Virginia,http://www.lewiscounty.wv.gov +Lincoln County,West Virginia,http://www.lincolncountywv.org +Logan County,West Virginia,http://www.logancounty.wv.gov +McDowell County,West Virginia,http://www.mcdowellcounty.wv.gov +Marion County,West Virginia,http://www.marioncountywv.com +Marshall County,West Virginia,http://www.marshallcountywv.org/ +Mason County,West Virginia,http://www.masoncounty.wv.gov +Mercer County,West Virginia,http://www.mercercounty.wv.gov/ +Mineral County,West Virginia,https://www.mineralwv.org/ +Mingo County,West Virginia,http://www.mingocountywv.com/ +Monongalia County,West Virginia,http://www.co.monongalia.wv.us +Monroe County,West Virginia,http://www.monroecountywv.net/ +Morgan County,West Virginia,http://www.morgancountywv.gov/ +Nicholas County,West Virginia,http://www.nicholascountywv.org/ +Ohio County,West Virginia,http://www.ohiocountywv.gov +Pendleton County,West Virginia,http://www.pendletoncounty.wv.gov/ +Pleasants County,West Virginia,http://pleasantscountywv.org/ +Pocahontas County,West Virginia,http://www.pocahontascounty.wv.gov +Preston County,West Virginia,http://www.prestoncountywv.org/ +Putnam County,West Virginia,http://www.putnamcounty.org/ +Raleigh County,West Virginia,http://www.raleighcounty.com +Randolph County,West Virginia,http://elkinsrandolphwv.com +Ritchie County,West Virginia,http://www.ritchiecounty.wv.gov/ +Roane County,West Virginia,http://www.roanewv.com +Summers County,West Virginia,http://summerscountywv.org/ +Taylor County,West Virginia,http://www.taylorcounty.wv.gov/ +Tucker County,West Virginia,http://www.tuckerwv.com +Tyler County,West Virginia,http://www.tylercountywv.com/ +Upshur County,West Virginia,http://www.upshurcounty.org +Wayne County,West Virginia,http://www.waynecountywv.org/ +Webster County,West Virginia,http://www.webstercounty.wv.gov/ +Wetzel County,West Virginia,http://www.wetzelcounty.wv.gov/ +Wirt County,West Virginia,http://www.wirtcounty.wv.gov/ +Wood County,West Virginia,http://www.woodcountywv.com +Wyoming County,West Virginia,http://www.wyomingcounty.com/ +Adams County,Wisconsin,https://www.co.adams.wi.us/ +Ashland County,Wisconsin,http://www.co.ashland.wi.us/ +Barron County,Wisconsin,http://www.barroncountywi.gov +Bayfield County,Wisconsin,http://www.bayfieldcounty.wi.gov +Brown County,Wisconsin,http://www.browncountywi.gov +Buffalo County,Wisconsin,https://www.buffalocountywi.gov +Burnett County,Wisconsin,http://BurnettCounty.com +Calumet County,Wisconsin,http://www.co.calumet.wi.us/ +Appleton,Wisconsin metropolitan area,http://www.appleton.org +Chippewa County,Wisconsin,http://www.co.chippewa.wi.us +Clark County,Wisconsin,https://www.clarkcountywi.gov +Columbia County,Wisconsin,http://www.co.columbia.wi.us +Crawford County,Wisconsin,http://www.crawfordcountywi.org/ +Dane County,Wisconsin,http://www.countyofdane.com +Dodge County,Wisconsin,http://www.co.dodge.wi.gov +Door County,Wisconsin,http://www.co.door.wi.gov +Douglas County,Wisconsin,http://www.douglascountywi.org +Dunn County,Wisconsin,http://www.co.dunn.wi.us/ +Eau Claire County,Wisconsin,https://www.eauclairecounty.gov +Florence County,Wisconsin,http://www.florencecountywi.com +Forest County,Wisconsin,http://www.co.forest.wi.gov +Grant County,Wisconsin,http://www.co.grant.wi.gov/ +Green County,Wisconsin,http://www.co.green.wi.gov +Green Lake County,Wisconsin,http://www.co.green-lake.wi.us +Iowa County,Wisconsin,http://www.iowacounty.org +Iron County,Wisconsin,http://www.co.iron.wi.gov +Jackson County,Wisconsin,http://www.co.jackson.wi.us +Jefferson County,Wisconsin,http://www.jeffersoncountywi.gov +Juneau County,Wisconsin,http://www.co.juneau.wi.gov +Kenosha County,Wisconsin,https://www.kenoshacounty.org/ +Kewaunee County,Wisconsin,http://www.kewauneeco.org +La Crosse County,Wisconsin,http://www.lacrossecounty.org +Lafayette County,Wisconsin,http://www.co.lafayette.wi.gov +Langlade County,Wisconsin,http://www.co.langlade.wi.us +Lincoln County,Wisconsin,http://www.co.lincoln.wi.us +Manitowoc County,Wisconsin,https://manitowoccountywi.gov +Marathon County,Wisconsin,http://www.co.marathon.wi.us +Marinette County,Wisconsin,http://www.marinettecounty.com +Marquette County,Wisconsin,http://www.co.marquette.wi.us +Menominee County,Wisconsin,http://www.co.menominee.wi.us/ +Milwaukee County,Wisconsin,http://county.milwaukee.gov +Monroe County,Wisconsin,http://www.co.monroe.wi.us +Oconto County,Wisconsin,http://www.co.oconto.wi.us +Oneida County,Wisconsin,http://www.co.oneida.wi.gov +Outagamie County,Wisconsin,http://www.outagamie.org/ +Ozaukee County,Wisconsin,https://ozaukeecounty.gov +Pepin County,Wisconsin,http://www.co.pepin.wi.us +Pierce County,Wisconsin,http://www.co.pierce.wi.us +Polk County,Wisconsin,http://www.co.polk.wi.us +Portage County,Wisconsin,http://www.co.portage.wi.us +Price County,Wisconsin,http://www.co.price.wi.us +Racine County,Wisconsin,http://www.racinecounty.com +Richland County,Wisconsin,http://co.richland.wi.us/index.shtml +Rock County,Wisconsin,http://www.co.rock.wi.us +Rusk County,Wisconsin,http://www.ruskcounty.org +St. Croix County,Wisconsin,https://www.sccwi.gov +Sauk County,Wisconsin,http://www.co.sauk.wi.us +Sawyer County,Wisconsin,http://www.sawyercountygov.org +Shawano County,Wisconsin,http://www.co.shawano.wi.us +Sheboygan County,Wisconsin,https://sheboygancountywi.gov +Taylor County,Wisconsin,http://www.co.taylor.wi.us +Trempealeau County,Wisconsin,http://www.tremplocounty.com +Vernon County,Wisconsin,http://www.vernoncounty.org/ +Vilas County,Wisconsin,http://www.vilascountywi.gov +Walworth County,Wisconsin,http://www.co.walworth.wi.us +Washburn County,Wisconsin,http://www.co.washburn.wi.us +Washington County,Wisconsin,http://www.co.washington.wi.us +Waukesha County,Wisconsin,http://www.waukeshacounty.gov +Waupaca County,Wisconsin,http://www.co.waupaca.wi.us +Waushara County,Wisconsin,http://www.co.waushara.wi.us/ +Winnebago County,Wisconsin,http://www.co.winnebago.wi.us +Wood County,Wisconsin,http://www.co.wood.wi.us +Albany County,Wyoming,http://www.co.albany.wy.us +Big Horn County,Wyoming,http://www.bighorncountywy.gov +Campbell County,Wyoming,https://www.ccgov.net/ +Carbon County,Wyoming,http://www.carbonwy.com +Converse County,Wyoming,http://conversecounty.org +Crook County,Wyoming,http://www.crookcounty.wy.gov +Fremont County,Wyoming,http://www.fremontcountywy.org +Goshen County,Wyoming,https://goshencounty.org/ +Hot Springs County,Wyoming,http://www.hscounty.com +Johnson County,Wyoming,http://www.johnsoncountywyoming.org +Laramie County,Wyoming,http://laramiecounty.com +Lincoln County,Wyoming,http://www.lcwy.org +Natrona County,Wyoming,http://www.natronacounty-wy.gov +Niobrara County,Wyoming,http://www.niobraracounty.org +Park County,Wyoming,https://parkcounty-wy.gov +Platte County,Wyoming,http://plattecountywyoming.com +Sheridan County,Wyoming,http://www.sheridancounty.com +Sublette County,Wyoming,http://www.sublettewyo.com +Sweetwater County,Wyoming,https://www.sweetwatercountywy.gov +Teton County,Wyoming,http://www.tetonwyo.org +Uinta County,Wyoming,http://www.uintacounty.com +Washakie County,Wyoming,http://www.washakiecounty.net +Weston County,Wyoming,http://westongov.com diff --git a/backend/scripts/populateCountiesCities/cities.py b/backend/scripts/populateCountiesCities/cities.py new file mode 100644 index 00000000..cd720f42 --- /dev/null +++ b/backend/scripts/populateCountiesCities/cities.py @@ -0,0 +1,107 @@ +import pandas as pd +import requests +from bs4 import BeautifulSoup +import time +import re +import json +from urllib.parse import unquote + + +def title_parse(title): + title = unquote(title) + return title + + +def pull_cities(): + print("Processing Cities...") + with open("wikipedia_US_cities.json") as f: + wikipedia_us_city_data = json.load(f) + + holding_pen = [] + + for entry in wikipedia_us_city_data: + print(entry["name"]) + # get the response in the form of html + wikiurl = "https://en.wikipedia.org/wiki/" + entry["url"] + response = requests.get(wikiurl) + + # parse data from the html into a beautifulsoup object + soup = BeautifulSoup(response.text, "html.parser") + + # DEAL WITH VERMONT'S NON-COMPLIANT WIKIPEDIA PAGE + if entry["name"] == "Vermont": + countytable = soup.find_all( + "table", + {"class": entry["table_type"]}, + ) + vermont_special = "" + for thing in countytable: + vermont_special = vermont_special + "\n" + str(thing) + soup_special = BeautifulSoup(vermont_special, "html.parser") + countytable = soup_special + else: + countytable = soup.find( + "table", + {"class": entry["table_type"]}, + ) + + links = countytable.select("a") + for link in links: + if "County" or "Parish" not in link.get("title"): + try: + if "," in link.get("title"): + county_pieces = link.get("title").split(",") + # OPEN WIKIPEDIA PAGE UP + x = requests.get("https://en.wikipedia.org/" + link.get("href")) + + # PULL COUNTY OR PARISH FROM WIKIPEDIA PAGE + county_parish_matches = re.findall( + r"Website.+", + x.text, + ) + # PULL URL OUT OF FOUND TEXT + url = re.search(r"href=\"(.+?)\"", w[0]) + url = url.group() + url = url.replace("href=", "").replace('"', "") + + holding_pen.append( + { + "City": county_pieces[0], + "State": entry["name"], + "URL": url, + "County": county_value, + } + ) + time.sleep(1) + except: + pass + + df = pd.DataFrame(holding_pen, columns=["State", "County", "City", "URL"]) + + df.drop_duplicates(inplace=True) + + # DROP COUNTIES FROM CITY ENTRIES + df = df[~df.City.str.contains(" County", na=False)] + + # REMOVE HTML ENTITIES (LIKE %27) + df["State"] = df.State.apply(title_parse) + df["City"] = df.City.apply(title_parse) + df["County"] = df.County.apply(title_parse) + + df.to_csv("United_States_Cities_with_URLs.csv", index=False, encoding="utf-8") + + +if __name__ == "__main__": + pull_cities() diff --git a/backend/scripts/populateCountiesCities/counties.py b/backend/scripts/populateCountiesCities/counties.py new file mode 100644 index 00000000..64df0f38 --- /dev/null +++ b/backend/scripts/populateCountiesCities/counties.py @@ -0,0 +1,61 @@ +import pandas as pd +import requests +from bs4 import BeautifulSoup +import time +import re + + +def pull_counties(): + print("Processing Counties...") + # get the response in the form of html + wikiurl = "https://en.wikipedia.org/wiki/List_of_United_States_counties_and_county_equivalents" + table_class = "wikitable sortable jquery-tablesorter" + response = requests.get(wikiurl) + + # parse data from the html into a beautifulsoup object + soup = BeautifulSoup(response.text, "html.parser") + countytable = soup.find("table", {"class": "wikitable"}) + + links = countytable.select("a") + + holding_pen = [] + + for link in links: + try: + county_pieces = link.get("title").split(", ") + # OPEN WIKIPEDIA PAGE UP + x = requests.get("https://en.wikipedia.org/" + link.get("href")) + + # PULL WEBSITE FROM WIKIPEDIA PAGE + w = re.findall( + r"Website.+", x.text + ) + # PULL URL OUT OF FOUND TEXT + url = re.search(r"href=\"(.+?)\"", w[0]) + url = url.group() + url = url.replace("href=", "") + + holding_pen.append( + { + "County": county_pieces[0], + "State": county_pieces[1], + "URL": url, + } + ) + except Exception as e: + pass + + time.sleep(1) + + df = pd.DataFrame(holding_pen, columns=["County", "State", "URL"]) + + df.drop_duplicates(inplace=True) + + # Drop the Statistical Area Entries + df[~df.State.str.contains("Statistical Area")] + + df.to_csv("United_States_Counties_with_URLs.csv", index=False) + + +if __name__ == "__main__": + pull_counties() diff --git a/backend/scripts/populateCountiesCities/main.py b/backend/scripts/populateCountiesCities/main.py new file mode 100644 index 00000000..dc86edb1 --- /dev/null +++ b/backend/scripts/populateCountiesCities/main.py @@ -0,0 +1,25 @@ +import typer +import cities +import counties + +app = typer.Typer() + + +@app.command() +def process_cities(): + cities.pull_cities() + + +@app.command() +def process_counties(): + counties.pull_counties() + + +@app.command() +def process_both(): + counties.pull_counties() + cities.pull_cities() + + +if __name__ == "__main__": + app() diff --git a/backend/scripts/populateCountiesCities/requirements.txt b/backend/scripts/populateCountiesCities/requirements.txt new file mode 100644 index 00000000..b3e808d7 --- /dev/null +++ b/backend/scripts/populateCountiesCities/requirements.txt @@ -0,0 +1,4 @@ +pandas==1.5.1 +requests==2.28.2 +beautifulsoup4==4.11.2 +typer==0.7.0 diff --git a/backend/sendMessage.js b/backend/sendMessage.js new file mode 100644 index 00000000..6e875286 --- /dev/null +++ b/backend/sendMessage.js @@ -0,0 +1,28 @@ +// sendMessage.js +const amqp = require('amqplib'); + +async function sendMessageToControlQueue(message) { + const connection = await amqp.connect('amqp://localhost'); + const channel = await connection.createChannel(); + const controlQueue = 'ControlQueue'; + + await channel.assertQueue(controlQueue, { durable: true }); + + // Simulate sending a message to the ControlQueue + channel.sendToQueue(controlQueue, Buffer.from(JSON.stringify(message)), { + persistent: true + }); + + console.log('Message sent to ControlQueue:', message); + + setTimeout(() => { + connection.close(); + }, 500); +} + +// Simulate sending a message +const message = { + scriptType: 'shodan', + org: 'DHS' +}; +sendMessageToControlQueue(message); diff --git a/backend/serverless.yml b/backend/serverless.yml new file mode 100644 index 00000000..bcc6005c --- /dev/null +++ b/backend/serverless.yml @@ -0,0 +1,160 @@ +service: crossfeed + +frameworkVersion: '3' +useDotenv: true +configValidationMode: error + +custom: + webpack: + webpackConfig: 'webpack.backend.config.js' + customDomain: + domainName: ${file(env.yml):${self:provider.stage}.DOMAIN, ''} + basePath: '' + certificateName: ${file(env.yml):${self:provider.stage}.DOMAIN, ''} + stage: ${self:provider.stage} + createRoute53Record: false + +provider: + name: aws + region: us-east-1 + endpointType: REGIONAL + runtime: nodejs16.x + timeout: 30 + stage: ${opt:stage, 'dev'} + environment: ${file(env.yml):${self:provider.stage}, ''} + vpc: ${file(env.yml):${self:provider.stage}-vpc, ''} + apiGateway: + binaryMediaTypes: + - 'image/*' + - 'font/*' + resourcePolicy: + - Effect: Allow + Principal: '*' + Action: 'execute-api:Invoke' + Resource: 'execute-api:/${self:provider.stage}/*/*' + logs: + restApi: true + deploymentBucket: + serverSideEncryption: AES256 + iam: + role: + statements: + # TODO: make the resources more specific. See Resource: '*' was + - Effect: Allow + Action: + - lambda:InvokeAsync + - lambda:InvokeFunction + - cognito-idp:AdminDisableUser + - cognito-idp:ListUsers + - cognito-idp:AdminSetUserPassword + Resource: "*" + - Effect: Allow + Action: + - ecs:RunTask + - ecs:ListTasks + - ecs:DescribeTasks + - ecs:DescribeServices + - ecs:UpdateService + - iam:PassRole + Resource: '*' + - Effect: Allow + Action: + - ses:SendRawEmail + Resource: '*' + - Effect: Allow + Action: + - s3:GetObject + - s3:GetObjectAcl + - s3:PutObject + - s3:PutObjectAcl + - s3:PutBucketAcl + - s3:GetBucketAcl + Resource: '*' + - Effect: Allow + Action: + - sts:AssumeRole + Resource: '*' + - Effect: Allow + Action: + - sqs:ReceiveMessage + - sqs:DeleteMessage + - sqs:SendMessage + - sqs:GetQueueAttributes + Resource: '*' + - Effect: Allow + Action: + - logs:CreateExportTask + - logs:CreateLogStream + - logs:Describe* + - logs:Get* + - logs:List* + - logs:PutLogEvents + - logs:StartQuery + - logs:StopQuery + - logs:TestMetricFilter + - logs:FilterLogEvents + - logs:StartLiveTail + - logs:StopLiveTail + Resource: '*' + - Effect: Allow + Action: + - ssm:DescribeParameters + - ssm:GetParameter + - ssm:GetParameters + - ssm:GetParametersByPath + - ssm:PutParameter + Resource: '*' + +resources: + Resources: + WorkerControlQueue: + Type: AWS::SQS::Queue + Properties: + QueueName: ${self:provider.stage}-worker-control-queue + VisibilityTimeout: 300 # Should match or exceed function timeout + MaximumMessageSize: 262144 # 256 KB + MessageRetentionPeriod: 604800 # 7 days + ShodanQueue: + Type: AWS::SQS::Queue + Properties: + QueueName: ${self:provider.stage}-shodan-queue + VisibilityTimeout: 300 + MaximumMessageSize: 262144 # 256 KB + MessageRetentionPeriod: 604800 # 7 days + DnstwistQueue: + Type: AWS::SQS::Queue + Properties: + QueueName: ${self:provider.stage}-dnstwist-queue + VisibilityTimeout: 300 + MaximumMessageSize: 262144 # 256 KB + MessageRetentionPeriod: 604800 # 7 days + HibpQueue: + Type: AWS::SQS::Queue + Properties: + QueueName: ${self:provider.stage}-hibp-queue + VisibilityTimeout: 300 + MaximumMessageSize: 262144 # 256 KB + MessageRetentionPeriod: 604800 # 7 days + IntelxQueue: + Type: AWS::SQS::Queue + Properties: + QueueName: ${self:provider.stage}-intelx-queue + VisibilityTimeout: 300 + MaximumMessageSize: 262144 # 256 KB + MessageRetentionPeriod: 604800 # 7 days + CybersixgillQueue: + Type: AWS::SQS::Queue + Properties: + QueueName: ${self:provider.stage}-cybersixgill-queue + VisibilityTimeout: 300 + MaximumMessageSize: 262144 # 256 KB + MessageRetentionPeriod: 604800 # 7 days + +functions: + - ${file(./src/tasks/functions.yml)} + - ${file(./src/api/functions.yml)} + +plugins: + - serverless-domain-manager + - serverless-webpack + - serverless-dotenv-plugin diff --git a/backend/src/api-dev.ts b/backend/src/api-dev.ts new file mode 100644 index 00000000..9c721fd7 --- /dev/null +++ b/backend/src/api-dev.ts @@ -0,0 +1,10 @@ +// Main entrypoint for dev server. + +import app from './api/app'; + +process.env.IS_OFFLINE = 'true'; + +const port = 3000; +app.listen(port, () => { + console.log('App listening on port ' + port); +}); diff --git a/backend/src/api.ts b/backend/src/api.ts new file mode 100644 index 00000000..6ea6ebae --- /dev/null +++ b/backend/src/api.ts @@ -0,0 +1,8 @@ +// Main entrypoint for serverless API code. + +import * as serverless from 'serverless-http'; +import app from './api/app'; + +module.exports.handler = serverless(app, { + binary: ['image/*', 'font/*'] +}); diff --git a/backend/src/api/__mocks__/login-gov.ts b/backend/src/api/__mocks__/login-gov.ts new file mode 100644 index 00000000..8ae01955 --- /dev/null +++ b/backend/src/api/__mocks__/login-gov.ts @@ -0,0 +1,24 @@ +const loginGov: any = {}; + +loginGov.login = async function (): Promise<{ + url: string; + state: string; + nonce: string; +}> { + return { + url: 'https://idp.int.identitysandbox.gov/openid_connect/authorize?client_id=urn%3Agov%3Agsa%3Aopenidconnect.profiles%3Asp%3Asso%3Acisa%3Acrossfeed&scope=openid%20email&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%2F&acr_values=http%3A%2F%2Fidmanagement.gov%2Fns%2Fassurance%2Fial%2F1&nonce=3ac04a92b121fce3fc5ca95251e70205d764147731&state=258165a7dc37ce6034e74815e991606d49fd52240e469f&prompt=select_account', + state: '258165a7dc37ce6034e74815e991606d49fd52240e469f', + nonce: '3ac04a92b121fce3fc5ca95251e70205d764147731' + }; +}; + +loginGov.callback = async function (body) { + return { + sub: 'eaf059e8-bde2-4647-8c74-4aedbe0a2091', + iss: 'https://idp.int.identitysandbox.gov/', + email: 'test@crossfeed.cisa.gov', + email_verified: true + }; +}; + +export default loginGov; diff --git a/backend/src/api/api-keys.ts b/backend/src/api/api-keys.ts new file mode 100644 index 00000000..c72981ad --- /dev/null +++ b/backend/src/api/api-keys.ts @@ -0,0 +1,44 @@ +import { isUUID } from 'class-validator'; +import { connectToDatabase, ApiKey } from '../models'; +import { wrapHandler, NotFound } from './helpers'; +import { getUserId } from './auth'; +import { randomBytes, createHash } from 'crypto'; + +export const del = wrapHandler(async (event) => { + await connectToDatabase(); + const id = event.pathParameters?.keyId; + if (!id || !isUUID(id)) { + return NotFound; + } + const key = await ApiKey.findOne({ + id, + user: { id: getUserId(event) } + }); + if (key) { + const result = await ApiKey.delete({ + id, + user: { id: getUserId(event) } + }); + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } + return NotFound; +}); + +export const generate = wrapHandler(async (event) => { + await connectToDatabase(); + const key = randomBytes(16).toString('hex'); + // Store a hash of the API key instead of the key itself + let apiKey = await ApiKey.create({ + hashedKey: createHash('sha256').update(key).digest('hex'), + lastFour: key.substr(-4), + user: { id: getUserId(event) } + }); + apiKey = await apiKey.save(); + return { + statusCode: 200, + body: JSON.stringify({ ...apiKey, key: key }) + }; +}); diff --git a/backend/src/api/app.ts b/backend/src/api/app.ts new file mode 100644 index 00000000..16f13526 --- /dev/null +++ b/backend/src/api/app.ts @@ -0,0 +1,465 @@ +import * as express from 'express'; +import * as cookieParser from 'cookie-parser'; +import * as cookie from 'cookie'; +import * as cors from 'cors'; +import * as helmet from 'helmet'; +import { handler as healthcheck } from './healthcheck'; +import * as auth from './auth'; +import * as cpes from './cpes'; +import * as cves from './cves'; +import * as domains from './domains'; +import * as search from './search'; +import * as vulnerabilities from './vulnerabilities'; +import * as organizations from './organizations'; +import * as scans from './scans'; +import * as users from './users'; +import * as scanTasks from './scan-tasks'; +import * as stats from './stats'; +import * as apiKeys from './api-keys'; +import * as reports from './reports'; +import * as savedSearches from './saved-searches'; +import { createProxyMiddleware } from 'http-proxy-middleware'; +import { UserType } from '../models'; + +if ( + (process.env.IS_OFFLINE || process.env.IS_LOCAL) && + typeof jest === 'undefined' +) { + // Run scheduler during local development. When deployed on AWS, + // the scheduler runs on a separate lambda function. + const { handler: scheduler } = require('../tasks/scheduler'); + const { listenForDockerEvents } = require('./docker-events'); + listenForDockerEvents(); + setInterval(() => scheduler({}, {} as any, () => null), 30000); +} + +const handlerToExpress = (handler) => async (req, res) => { + const { statusCode, body } = await handler( + { + pathParameters: req.params, + query: req.query, + requestContext: req.requestContext, + body: JSON.stringify(req.body || '{}'), + headers: req.headers, + path: req.originalUrl + }, + {} + ); + try { + const parsedBody = JSON.parse(body); + res.status(statusCode).json(parsedBody); + } catch (e) { + // Not a JSON body + res.setHeader('content-type', 'text/plain'); + res.status(statusCode).send(body); + } +}; + +const app = express(); + +app.use(express.json({ strict: false })); + +app.use( + cors({ + origin: '*', + methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'] + }) +); + +app.use( + helmet({ + contentSecurityPolicy: { + directives: { + defaultSrc: [ + "'self'", + 'https://cognito-idp.us-east-1.amazonaws.com', + 'https://api.staging-cd.crossfeed.cyber.dhs.gov' + ], + objectSrc: ["'none'"], + scriptSrc: [ + "'self'", + 'https://api.staging-cd.crossfeed.cyber.dhs.gov' + // Add any other allowed script sources here + ], + frameAncestors: ["'none'"] + // Add other directives as needed + } + }, + hsts: { + maxAge: 31536000, + includeSubDomains: true, + preload: true + } + }) +); + +app.use((req, res, next) => { + res.setHeader('X-XSS-Protection', '0'); + next(); +}); + +app.use(cookieParser()); + +app.get('/', handlerToExpress(healthcheck)); +app.post('/auth/login', handlerToExpress(auth.login)); +app.post('/auth/callback', handlerToExpress(auth.callback)); +app.post('/users/register', handlerToExpress(users.register)); + +const checkUserLoggedIn = async (req, res, next) => { + req.requestContext = { + authorizer: await auth.authorize({ + authorizationToken: req.headers.authorization + }) + }; + if ( + !req.requestContext.authorizer.id || + req.requestContext.authorizer.id === 'cisa:crossfeed:anonymous' + ) { + return res.status(401).send('Not logged in'); + } + return next(); +}; + +const checkUserSignedTerms = (req, res, next) => { + // Bypass ToU for CISA emails + const approvedEmailAddresses = ['@cisa.dhs.gov', '@associates.cisa.dhs.gov']; + if (process.env.NODE_ENV === 'test') + approvedEmailAddresses.push('@crossfeed.cisa.gov'); + for (const email of approvedEmailAddresses) { + if ( + req.requestContext.authorizer.email && + req.requestContext.authorizer.email.endsWith(email) + ) + return next(); + } + if ( + !req.requestContext.authorizer.dateAcceptedTerms || + (req.requestContext.authorizer.acceptedTermsVersion && + req.requestContext.authorizer.acceptedTermsVersion !== + getToUVersion(req.requestContext.authorizer)) + ) { + return res.status(403).send('User must accept terms of use'); + } + return next(); +}; + +const getMaximumRole = (user) => { + if (user?.userType === UserType.GLOBAL_VIEW) return 'user'; + return user && user.roles && user.roles.find((role) => role.role === 'admin') + ? 'admin' + : 'user'; +}; + +const getToUVersion = (user) => { + return `v${process.env.REACT_APP_TERMS_VERSION}-${getMaximumRole(user)}`; +}; + +// Rewrite the URL for some Matomo admin dashboard URLs, due to a bug in +// how Matomo handles relative URLs when hosted on a subpath. +app.get('/plugins/Morpheus/images/logo.svg', (req, res) => + res.redirect('/matomo/plugins/Morpheus/images/logo.svg?matomo') +); +app.get('/index.php', (req, res) => res.redirect('/matomo/index.php')); + +/** + * @swagger + * + * /matomo: + * get: + * description: All paths under /matomo proxy to a Matomo instance, which is used to handle and process user analytics. A global admin user can access this page from the "My Account" page. + * tags: + * - Analytics + */ +const matomoProxy = createProxyMiddleware({ + target: process.env.MATOMO_URL, + headers: { HTTP_X_FORWARDED_URI: '/matomo' }, + pathRewrite: function (path) { + return path.replace(/^\/matomo/, ''); + }, + onProxyReq: function (proxyReq) { + // Only pass the MATOMO_SESSID cookie to Matomo. + if (!proxyReq.getHeader('Cookie')) return; + const cookies = cookie.parse(proxyReq.getHeader('Cookie')); + const newCookies = cookie.serialize( + 'MATOMO_SESSID', + String(cookies['MATOMO_SESSID']) + ); + proxyReq.setHeader('Cookie', newCookies); + }, + onProxyRes: function (proxyRes) { + // Remove transfer-encoding: chunked responses, because API Gateway doesn't + // support chunked encoding. + if (proxyRes.headers['transfer-encoding'] === 'chunked') { + proxyRes.headers['transfer-encoding'] = ''; + } + } +}); + +/** + * @swagger + * + * /pe: + * get: + * description: All paths under /pe proxy to the P&E django application and API. Only a global admin can access. + */ +const peProxy = createProxyMiddleware({ + target: process.env.PE_API_URL, + pathRewrite: function (path) { + return path.replace(/^\/pe/, ''); + } +}); + +app.use( + '/matomo', + async (req, res, next) => { + // Public paths -- see https://matomo.org/docs/security-how-to/ + const ALLOWED_PATHS = ['/matomo.php', '/matomo.js']; + if (ALLOWED_PATHS.indexOf(req.path) > -1) { + return next(); + } + // API Gateway isn't able to proxy fonts properly -- so we're using a CDN instead. + if (req.path === '/plugins/Morpheus/fonts/matomo.woff2') { + return res.redirect( + 'https://cdn.jsdelivr.net/gh/matomo-org/matomo@3.14.1/plugins/Morpheus/fonts/matomo.woff2' + ); + } + if (req.path === '/plugins/Morpheus/fonts/matomo.woff') { + return res.redirect( + 'https://cdn.jsdelivr.net/gh/matomo-org/matomo@3.14.1/plugins/Morpheus/fonts/matomo.woff' + ); + } + if (req.path === '/plugins/Morpheus/fonts/matomo.ttf') { + return res.redirect( + 'https://cdn.jsdelivr.net/gh/matomo-org/matomo@3.14.1/plugins/Morpheus/fonts/matomo.ttf' + ); + } + // Only allow global admins to access all other paths. + const user = (await auth.authorize({ + authorizationToken: req.cookies['crossfeed-token'] + })) as auth.UserToken; + if (user.userType !== UserType.GLOBAL_ADMIN) { + return res.status(401).send('Unauthorized'); + } + return next(); + }, + matomoProxy +); + +app.use( + '/pe', + async (req, res, next) => { + // Only allow specific users to access + const user = (await auth.authorize({ + authorizationToken: req.headers.authorization + })) as auth.UserToken; + if ( + user.userType !== UserType.GLOBAL_VIEW && + user.userType !== UserType.GLOBAL_ADMIN + ) { + return res.status(401).send('Unauthorized'); + } + return next(); + }, + peProxy +); + +// Routes that require an authenticated user, without +// needing to sign the terms of service yet +const authenticatedNoTermsRoute = express.Router(); +authenticatedNoTermsRoute.use(checkUserLoggedIn); +authenticatedNoTermsRoute.get('/users/me', handlerToExpress(users.me)); +// authenticatedNoTermsRoute.post('/users/register', handlerToExpress(users.register)); +authenticatedNoTermsRoute.post( + '/users/me/acceptTerms', + handlerToExpress(users.acceptTerms) +); +authenticatedNoTermsRoute.put('/users/:userId', handlerToExpress(users.update)); + +app.use(authenticatedNoTermsRoute); + +// Routes that require an authenticated user that has +// signed the terms of service +const authenticatedRoute = express.Router(); + +authenticatedRoute.use(checkUserLoggedIn); +authenticatedRoute.use(checkUserSignedTerms); + +authenticatedRoute.post('/api-keys', handlerToExpress(apiKeys.generate)); +authenticatedRoute.delete('/api-keys/:keyId', handlerToExpress(apiKeys.del)); + +authenticatedRoute.post('/search', handlerToExpress(search.search)); +authenticatedRoute.post('/search/export', handlerToExpress(search.export_)); +authenticatedRoute.get('/cpes/:id', handlerToExpress(cpes.get)); +authenticatedRoute.get('/cves/:id', handlerToExpress(cves.get)); +authenticatedRoute.get('/cves/name/:name', handlerToExpress(cves.getByName)); +authenticatedRoute.post('/domain/search', handlerToExpress(domains.list)); +authenticatedRoute.post('/domain/export', handlerToExpress(domains.export_)); +authenticatedRoute.get('/domain/:domainId', handlerToExpress(domains.get)); +authenticatedRoute.post( + '/vulnerabilities/search', + handlerToExpress(vulnerabilities.list) +); +authenticatedRoute.post( + '/vulnerabilities/export', + handlerToExpress(vulnerabilities.export_) +); +authenticatedRoute.get( + '/vulnerabilities/:vulnerabilityId', + handlerToExpress(vulnerabilities.get) +); +authenticatedRoute.put( + '/vulnerabilities/:vulnerabilityId', + handlerToExpress(vulnerabilities.update) +); +authenticatedRoute.get('/saved-searches', handlerToExpress(savedSearches.list)); +authenticatedRoute.post( + '/saved-searches', + handlerToExpress(savedSearches.create) +); +authenticatedRoute.get( + '/saved-searches/:searchId', + handlerToExpress(savedSearches.get) +); +authenticatedRoute.put( + '/saved-searches/:searchId', + handlerToExpress(savedSearches.update) +); +authenticatedRoute.delete( + '/saved-searches/:searchId', + handlerToExpress(savedSearches.del) +); +authenticatedRoute.get('/scans', handlerToExpress(scans.list)); +authenticatedRoute.get('/granularScans', handlerToExpress(scans.listGranular)); +authenticatedRoute.post('/scans', handlerToExpress(scans.create)); +authenticatedRoute.get('/scans/:scanId', handlerToExpress(scans.get)); +authenticatedRoute.put('/scans/:scanId', handlerToExpress(scans.update)); +authenticatedRoute.delete('/scans/:scanId', handlerToExpress(scans.del)); +authenticatedRoute.post('/scans/:scanId/run', handlerToExpress(scans.runScan)); +authenticatedRoute.post( + '/scheduler/invoke', + handlerToExpress(scans.invokeScheduler) +); +authenticatedRoute.post('/scan-tasks/search', handlerToExpress(scanTasks.list)); +authenticatedRoute.post( + '/scan-tasks/:scanTaskId/kill', + handlerToExpress(scanTasks.kill) +); +authenticatedRoute.get( + '/scan-tasks/:scanTaskId/logs', + handlerToExpress(scanTasks.logs) +); + +authenticatedRoute.get('/organizations', handlerToExpress(organizations.list)); +authenticatedRoute.get( + '/organizations/tags', + handlerToExpress(organizations.getTags) +); +authenticatedRoute.get( + '/organizations/:organizationId', + handlerToExpress(organizations.get) +); +authenticatedRoute.get( + '/organizations/state/:state', + handlerToExpress(organizations.getByState) +); +authenticatedRoute.get( + '/organizations/regionId/:regionId', + handlerToExpress(organizations.getByRegionId) +); +authenticatedRoute.post( + '/organizations', + handlerToExpress(organizations.create) +); +authenticatedRoute.post( + '/organizations_upsert', + handlerToExpress(organizations.upsert_org) +); + +authenticatedRoute.put( + '/organizations/:organizationId', + handlerToExpress(organizations.update) +); +authenticatedRoute.delete( + '/organizations/:organizationId', + handlerToExpress(organizations.del) +); +authenticatedRoute.post( + '/v2/organizations/:organizationId/users', + handlerToExpress(organizations.addUserV2) +); +authenticatedRoute.post( + '/organizations/:organizationId/roles/:roleId/approve', + handlerToExpress(organizations.approveRole) +); +authenticatedRoute.post( + '/organizations/:organizationId/roles/:roleId/remove', + handlerToExpress(organizations.removeRole) +); +authenticatedRoute.post( + '/organizations/:organizationId/granularScans/:scanId/update', + handlerToExpress(organizations.updateScan) +); +authenticatedRoute.post( + '/organizations/:organizationId/initiateDomainVerification', + handlerToExpress(organizations.initiateDomainVerification) +); +authenticatedRoute.post( + '/organizations/:organizationId/checkDomainVerification', + handlerToExpress(organizations.checkDomainVerification) +); +authenticatedRoute.post('/stats', handlerToExpress(stats.get)); +authenticatedRoute.post('/users', handlerToExpress(users.invite)); +authenticatedRoute.get('/users', handlerToExpress(users.list)); +authenticatedRoute.delete('/users/:userId', handlerToExpress(users.del)); +authenticatedRoute.get( + '/users/state/:state', + handlerToExpress(users.getByState) +); +authenticatedRoute.get( + '/users/regionId/:regionId', + handlerToExpress(users.getByRegionId) +); +authenticatedRoute.post('/users/search', handlerToExpress(users.search)); + +authenticatedRoute.post( + '/reports/export', + handlerToExpress(reports.export_report) +); + +authenticatedRoute.post( + '/reports/list', + handlerToExpress(reports.list_reports) +); + +//Authenticated Registration Routes +authenticatedRoute.put( + '/users/:userId/register/approve', + handlerToExpress(users.registrationApproval) +); + +authenticatedRoute.put( + '/users/:userId/register/deny', + handlerToExpress(users.registrationDenial) +); + +//************* */ +// V2 Routes // +//************* */ + +// Users +authenticatedRoute.put('/v2/users/:userId', handlerToExpress(users.updateV2)); +authenticatedRoute.get('/v2/users', handlerToExpress(users.getAllV2)); + +// Organizations +authenticatedRoute.put( + '/v2/organizations/:organizationId', + handlerToExpress(organizations.updateV2) +); +authenticatedRoute.get( + '/v2/organizations', + handlerToExpress(organizations.getAllV2) +); + +app.use(authenticatedRoute); + +export default app; diff --git a/backend/src/api/auth.ts b/backend/src/api/auth.ts new file mode 100644 index 00000000..c4b280eb --- /dev/null +++ b/backend/src/api/auth.ts @@ -0,0 +1,309 @@ +import loginGov from './login-gov'; +import { + User, + connectToDatabase, + ApiKey, + OrganizationTag, + UserType +} from '../models'; +import * as jwt from 'jsonwebtoken'; +import { APIGatewayProxyEvent } from 'aws-lambda'; +import * as jwksClient from 'jwks-rsa'; +import { createHash } from 'crypto'; + +export interface UserToken { + email: string; + id: string; + userType: UserType; + roles: { + org: string; + role: 'user' | 'admin'; + }[]; + dateAcceptedTerms: Date | undefined; + acceptedTermsVersion: string | undefined; + lastLoggedIn: Date | undefined; +} + +interface CognitoUserToken { + sub: string; + aud: string; + email_verified: boolean; + event_id: string; + token_us: string; + auth_time: number; + iss: string; + 'cognito:username': string; + exp: number; + iat: number; + email: string; +} + +interface UserInfo { + sub: string; + email: string; + email_verified: boolean; +} + +const client = jwksClient({ + jwksUri: `https://cognito-idp.us-east-1.amazonaws.com/${process.env.REACT_APP_USER_POOL_ID}/.well-known/jwks.json` +}); + +function getKey(header, callback) { + client.getSigningKey(header.kid, function (err, key) { + const signingKey = key?.getPublicKey(); + callback(null, signingKey); + }); +} + +/** + * @swagger + * + * /auth/login: + * post: + * description: Returns redirect url to initiate login.gov OIDC flow + * tags: + * - Auth + */ +export const login = async (event, context) => { + const { url, state, nonce } = await loginGov.login(); + return { + statusCode: 200, + body: JSON.stringify({ + redirectUrl: url, + state: state, + nonce: nonce + }) + }; +}; + +export const userTokenBody = (user): UserToken => ({ + id: user.id, + email: user.email, + userType: user.userType, + dateAcceptedTerms: user.dateAcceptedTerms, + acceptedTermsVersion: user.acceptedTermsVersion, + lastLoggedIn: user.lastLoggedIn, + roles: user.roles + .filter((role) => role.approved) + .map((role) => ({ + org: role.organization.id, + role: role.role + })) +}); + +/** + * @swagger + * + * /auth/callback: + * post: + * description: Processes Cognito JWT auth token (or login.gov OIDC callback, if enabled). Returns a user authorization token that can be used for subsequent requests to the API. + * tags: + * - Auth + */ +export const callback = async (event, context) => { + let userInfo: UserInfo; + try { + if (process.env.USE_COGNITO) { + userInfo = await new Promise((resolve, reject) => + jwt.verify( + JSON.parse(event.body).token, + getKey, + (err, data: CognitoUserToken) => (err ? reject(err) : resolve(data)) + ) + ); + } else { + userInfo = (await loginGov.callback(JSON.parse(event.body))) as UserInfo; + } + } catch (e) { + return { + statusCode: 500, + body: '' + }; + } + + if (!userInfo.email_verified) { + return { + statusCode: 403, + body: '' + }; + } + + userInfo.email = userInfo.email.toLowerCase(); + + // Look up user by email + await connectToDatabase(); + let user = await User.findOne( + { + email: userInfo.email + }, + { + relations: ['roles', 'roles.organization'] + } + ); + + const idKey = `${process.env.USE_COGNITO ? 'cognitoId' : 'loginGovId'}`; + + // If user does not exist, create it + if (!user) { + user = User.create({ + email: userInfo.email, + [idKey]: userInfo.sub, + firstName: '', + lastName: '', + userType: process.env.IS_OFFLINE + ? UserType.GLOBAL_ADMIN + : UserType.STANDARD, + roles: [] + }); + await user.save(); + } + + if (user[idKey] !== userInfo.sub) { + user[idKey] = userInfo.sub; + await user.save(); + } + + user.lastLoggedIn = new Date(Date.now()); + await user.save(); + + // Update user status if accepting invite + if (user.invitePending) { + user.invitePending = false; + await user.save(); + } + + const token = jwt.sign(userTokenBody(user), process.env.JWT_SECRET!, { + expiresIn: '1 days' + }); + + return { + statusCode: 200, + body: JSON.stringify({ + token: token, + user: user + }) + }; +}; + +/** Confirms that a user is authorized */ +export const authorize = async (event) => { + try { + await connectToDatabase(); + let parsed: Partial; + // Test if API key, e.g. a 32 digit hex string + if (/^[A-Fa-f0-9]{32}$/.test(event.authorizationToken)) { + const apiKey = await ApiKey.findOne( + { + hashedKey: createHash('sha256') + .update(event.authorizationToken) + .digest('hex') + }, + { relations: ['user'] } + ); + if (!apiKey) throw 'Invalid API key'; + parsed = { id: apiKey.user.id }; + apiKey.lastUsed = new Date(); + apiKey.save(); + } else { + parsed = jwt.verify( + event.authorizationToken, + process.env.JWT_SECRET! + ) as UserToken; + } + const user = await User.findOne( + { + id: parsed.id + }, + { + relations: ['roles', 'roles.organization'] + } + ); + // For running tests, ignore the database results if user doesn't exist or is the dummy user + if ( + process.env.NODE_ENV === 'test' && + (!user || user.id === 'c1afb49c-2216-4e3c-ac52-aa9480956ce9') + ) { + return parsed; + } + if (!user) throw Error('User does not exist'); + return userTokenBody(user); + } catch (e) { + if (e.name === 'JsonWebTokenError') { + // Handle this error without logging or displaying the error message + const parsed = { id: 'cisa:crossfeed:anonymous' }; + return parsed; + } else { + console.error(e); + const parsed = { id: 'cisa:crossfeed:anonymous' }; + return parsed; + } + } +}; + +/** Check if a user has global write admin permissions */ +export const isGlobalWriteAdmin = (event: APIGatewayProxyEvent) => { + return event.requestContext.authorizer && + event.requestContext.authorizer.userType === UserType.GLOBAL_ADMIN + ? true + : false; +}; + +/** Check if a user has global view permissions */ +export const isGlobalViewAdmin = (event: APIGatewayProxyEvent) => { + return event.requestContext.authorizer && + (event.requestContext.authorizer.userType === UserType.GLOBAL_VIEW || + event.requestContext.authorizer.userType === UserType.GLOBAL_ADMIN) + ? true + : false; +}; + +/** Check if a user has regionalAdmin view permissions */ +export const isRegionalAdmin = (event: APIGatewayProxyEvent) => { + return event.requestContext.authorizer && + (event.requestContext.authorizer.userType === UserType.REGIONAL_ADMIN || + event.requestContext.authorizer.userType === UserType.GLOBAL_ADMIN) + ? true + : false; +}; + +/** Checks if the current user is allowed to access (modify) a user with id userId */ +export const canAccessUser = (event: APIGatewayProxyEvent, userId?: string) => { + return userId && (userId === getUserId(event) || isGlobalWriteAdmin(event)); +}; + +/** Checks if a user is an admin of the given organization */ +export const isOrgAdmin = ( + event: APIGatewayProxyEvent, + organizationId?: string +) => { + if (!organizationId || !event.requestContext.authorizer) return false; + for (const role of event.requestContext.authorizer.roles) { + if (role.org === organizationId && role.role === 'admin') return true; + } + return isGlobalWriteAdmin(event); +}; + +/** Returns the organizations a user is a member of */ +export const getOrgMemberships = (event: APIGatewayProxyEvent): string[] => { + if (!event.requestContext.authorizer) return []; + return event.requestContext.authorizer.roles.map((role) => role.org); +}; + +/** Returns the organizations belonging to a tag, if the user can access the tag */ +export const getTagOrganizations = async ( + event: APIGatewayProxyEvent, + id: string +): Promise => { + if (!isGlobalViewAdmin(event)) return []; + const tag = await OrganizationTag.findOne( + { id }, + { relations: ['organizations'] } + ); + if (tag) return tag?.organizations.map((org) => org.id); + return []; +}; + +/** Returns a user's id */ +export const getUserId = (event: APIGatewayProxyEvent): string => { + return event.requestContext.authorizer!.id; +}; diff --git a/backend/src/api/cpes.ts b/backend/src/api/cpes.ts new file mode 100644 index 00000000..dd7a825a --- /dev/null +++ b/backend/src/api/cpes.ts @@ -0,0 +1,38 @@ +import { Cpe, connectToDatabase } from '../models'; +import { wrapHandler, NotFound } from './helpers'; + +// TODO: Join cves to cpe get method +// TODO: Create CpeFilters and CpeSearch classes to handle filtering and pagination of additional fields + +/** + * @swagger + * /cpes/{id}: + * get: + * description: Retrieve a CPE by ID + * tags: + * - CPEs + * parameters: + * - in: path + * name: id + * required: true + * schema: + * type: string + */ +export const get = wrapHandler(async (event) => { + const connection = await connectToDatabase(); + const id = event.pathParameters?.id; + + const cpe = await Cpe.createQueryBuilder('cpe') + .leftJoinAndSelect('cpe.cves', 'cve') + .where('cpe.id = :id', { id: id }) + .getOne(); + + if (!cpe) { + return NotFound; + } + + return { + statusCode: 200, + body: JSON.stringify(cpe) + }; +}); diff --git a/backend/src/api/cves.ts b/backend/src/api/cves.ts new file mode 100644 index 00000000..f6bcef6a --- /dev/null +++ b/backend/src/api/cves.ts @@ -0,0 +1,73 @@ +import { Cve, connectToDatabase } from '../models'; +import { NotFound, wrapHandler } from './helpers'; + +// TODO: Add test for joining cpe table +// TODO: Create CveFilters and CveSearch classes to handle filtering and pagination of additional fields + +/** + * @swagger + * /cves/{id}: + * get: + * description: Retrieve a CVE by ID. + * tags: + * - CVEs + * parameters: + * - in: path + * name: id + * required: true + * schema: + * type: string + */ +export const get = wrapHandler(async (event) => { + await connectToDatabase(); + const id = event.pathParameters?.id; + + const cve = await Cve.createQueryBuilder('cve') + .leftJoinAndSelect('cve.cpes', 'cpe') + .where('cve.id = :id', { id: id }) + .getOne(); + + if (!cve) { + return NotFound; + } + + return { + statusCode: 200, + body: JSON.stringify(cve) + }; +}); + +//TODO: Remove getByName endpoint once a one-to-one relationship is established between vulnerability.cve and cve.cve_id +/** + * @swagger + * + * /cves/name/{name}: + * get: + * description: Retrieve a single CVE record by its name. + * tags: + * - CVE + * parameters: + * - name: name + * in: path + * required: true + * schema: + * type: string + */ +export const getByName = wrapHandler(async (event) => { + await connectToDatabase(); + const name = event.pathParameters?.name; + + const cve = await Cve.createQueryBuilder('cve') + .leftJoinAndSelect('cve.cpes', 'cpe') + .where('cve.name = :name', { name: name }) + .getOne(); + + if (!cve) { + return NotFound; + } + + return { + statusCode: 200, + body: JSON.stringify(cve) + }; +}); diff --git a/backend/src/api/docker-events.ts b/backend/src/api/docker-events.ts new file mode 100644 index 00000000..7990c0ac --- /dev/null +++ b/backend/src/api/docker-events.ts @@ -0,0 +1,54 @@ +import { + handler as updateScanTaskStatus, + EventBridgeEvent +} from '../tasks/updateScanTaskStatus'; + +/** + * Listens for Docker events and converts start / stop events to corresponding Fargate EventBridge events, + * so that they can be handled by the updateScanTaskStatus lambda function. + * + * This function is only used for runs during local development in order to simulate EventBridge events. + */ +export const listenForDockerEvents = async () => { + const Docker = require('dockerode'); + const docker: any = new Docker(); + const stream = await docker.getEvents(); + stream.on('data', async (chunk: any) => { + const message = JSON.parse(Buffer.from(chunk).toString('utf-8')); + if (message.from !== 'crossfeed-worker') { + return; + } + let payload: EventBridgeEvent; + if (message.status === 'start') { + payload = { + detail: { + stopCode: '', + stoppedReason: '', + taskArn: message.Actor.Attributes.name, + lastStatus: 'RUNNING', + containers: [{}] + } + }; + } else if (message.status === 'die') { + payload = { + detail: { + stopCode: 'EssentialContainerExited', + stoppedReason: 'Essential container in task exited', + taskArn: message.Actor.Attributes.name, + lastStatus: 'STOPPED', + containers: [ + { + exitCode: Number(message.Actor.Attributes.exitCode) + } + ] + } + }; + } else { + return; + } + await setTimeout( + () => updateScanTaskStatus(payload, {} as any, () => null), + 1000 + ); + }); +}; diff --git a/backend/src/api/domains.ts b/backend/src/api/domains.ts new file mode 100644 index 00000000..92a49cc7 --- /dev/null +++ b/backend/src/api/domains.ts @@ -0,0 +1,283 @@ +import { + IsInt, + IsPositive, + IsString, + IsIn, + ValidateNested, + isUUID, + IsOptional, + IsObject, + IsUUID +} from 'class-validator'; +import { Type } from 'class-transformer'; +import { Domain, connectToDatabase } from '../models'; +import { validateBody, wrapHandler, NotFound } from './helpers'; +import { SelectQueryBuilder, In } from 'typeorm'; +import { + isGlobalViewAdmin, + getOrgMemberships, + getTagOrganizations +} from './auth'; +import S3Client from '../tasks/s3-client'; +import * as Papa from 'papaparse'; + +const PAGE_SIZE = parseInt(process.env.PAGE_SIZE ?? '') || 25; + +class DomainFilters { + @IsString() + @IsOptional() + port?: string; + + @IsString() + @IsOptional() + service?: string; + + @IsString() + @IsOptional() + reverseName?: string; + + @IsString() + @IsOptional() + ip?: string; + + @IsUUID() + @IsOptional() + organization?: string; + + @IsString() + @IsOptional() + organizationName?: string; + + @IsString() + @IsOptional() + vulnerability?: string; + + @IsUUID() + @IsOptional() + tag?: string; +} + +class DomainSearch { + @IsInt() + @IsPositive() + page: number = 1; + + @IsString() + @IsIn(['name', 'reverseName', 'ip', 'createdAt', 'updatedAt', 'id']) + sort: string = 'name'; + + @IsString() + @IsIn(['ASC', 'DESC']) + order: 'ASC' | 'DESC' = 'DESC'; + + @Type(() => DomainFilters) + @ValidateNested() + @IsObject() + @IsOptional() + filters?: DomainFilters; + + @IsInt() + @IsOptional() + // If set to -1, returns all results. + pageSize?: number; + + async filterResultQueryset(qs: SelectQueryBuilder, event) { + if (this.filters?.reverseName) { + qs.andWhere('domain.name ILIKE :name', { + name: `%${this.filters?.reverseName}%` + }); + } + if (this.filters?.ip) { + qs.andWhere('domain.ip LIKE :ip', { ip: `%${this.filters?.ip}%` }); + } + if (this.filters?.port) { + qs.andWhere('services.port::text LIKE :port', { + port: this.filters?.port + }); + } + if (this.filters?.service) { + qs.andWhere('services.products->>0 ILIKE :service', { + service: `%${this.filters?.service}%` + }); + } + if (this.filters?.organization) { + qs.andWhere('organization.id = :org', { + org: this.filters.organization + }); + } + if (this.filters?.organizationName) { + qs.andWhere('organization.name ILIKE :name', { + name: `%${this.filters?.organizationName}%` + }); + } + if (this.filters?.tag) { + qs.andWhere('organization.id IN (:...orgs)', { + orgs: await getTagOrganizations(event, this.filters.tag) + }); + } + if (this.filters?.vulnerability) { + qs.andWhere('vulnerabilities.title ILIKE :title', { + title: `%${this.filters?.vulnerability}%` + }); + } + return qs; + } + + async getResults(event) { + const pageSize = this.pageSize || PAGE_SIZE; + let qs = Domain.createQueryBuilder('domain') + .leftJoinAndSelect('domain.services', 'services') + .leftJoinAndSelect( + 'domain.vulnerabilities', + 'vulnerabilities', + "state = 'open'" + ) + .leftJoinAndSelect('domain.organization', 'organization') + .orderBy(`domain.${this.sort}`, this.order); + if (pageSize !== -1) { + qs = qs.skip(pageSize * (this.page - 1)).take(pageSize); + } + + if (!isGlobalViewAdmin(event)) { + qs.andWhere('organization.id IN (:...orgs)', { + orgs: getOrgMemberships(event) + }); + } + + await this.filterResultQueryset(qs, event); + return qs.getManyAndCount(); + } +} + +/** + * @swagger + * + * /domain/search: + * post: + * description: List domains by specifying a filter. + * tags: + * - Domains + */ +export const list = wrapHandler(async (event) => { + if (!isGlobalViewAdmin(event) && getOrgMemberships(event).length === 0) { + return { + statusCode: 200, + body: JSON.stringify({ + result: [], + count: 0 + }) + }; + } + await connectToDatabase(); + const search = await validateBody(DomainSearch, event.body); + const [result, count] = await search.getResults(event); + + return { + statusCode: 200, + body: JSON.stringify({ + result, + count + }) + }; +}); + +/** + * @swagger + * + * /domain/export: + * post: + * description: Export domains to a CSV file by specifying a filter. + * tags: + * - Domains + */ +export const export_ = wrapHandler(async (event) => { + if (!isGlobalViewAdmin(event) && getOrgMemberships(event).length === 0) { + return { + statusCode: 200, + body: JSON.stringify({ + result: [], + count: 0 + }) + }; + } + await connectToDatabase(); + const search = await validateBody(DomainSearch, event.body); + let [result] = await search.getResults(event); + const client = new S3Client(); + result = result.map((res: any) => { + res.organization = res.organization.name; + res.ports = res.services.map((service) => service.port).join(', '); + const products: { [key: string]: string } = {}; + for (const service of res.services) { + for (const product of service.products) { + if (product.name) + products[product.name.toLowerCase()] = + product.name + (product.version ? ` ${product.version}` : ''); + } + } + res.products = Object.values(products).join(', '); + return res; + }); + const url = await client.saveCSV( + Papa.unparse({ + fields: [ + 'name', + 'ip', + 'id', + 'ports', + 'products', + 'createdAt', + 'updatedAt', + 'organization' + ], + data: result + }), + 'domains' + ); + + return { + statusCode: 200, + body: JSON.stringify({ + url + }) + }; +}); + +/** + * @swagger + * + * /domain/{id}: + * get: + * description: Get information about a particular domain. + * parameters: + * - in: path + * name: id + * description: Domain id + * tags: + * - Domains + */ +export const get = wrapHandler(async (event) => { + let where = {}; + if (isGlobalViewAdmin(event)) { + where = {}; + } else { + where = { organization: In(getOrgMemberships(event)) }; + } + await connectToDatabase(); + const id = event.pathParameters?.domainId; + if (!isUUID(id)) { + return NotFound; + } + + const result = await Domain.findOne( + { id, ...where }, + { + relations: ['services', 'organization', 'vulnerabilities'] + } + ); + + return { + statusCode: result ? 200 : 404, + body: result ? JSON.stringify(result) : '' + }; +}); diff --git a/backend/src/api/functions.yml b/backend/src/api/functions.yml new file mode 100644 index 00000000..32a73fed --- /dev/null +++ b/backend/src/api/functions.yml @@ -0,0 +1,12 @@ +api: + handler: src/api.handler + events: + - http: + path: / # this matches the base path + method: ANY + cors: true + - http: + path: /{any+} # this matches any path, the token 'any' doesn't mean anything special + method: ANY + cors: true + # provisionedConcurrency: 1 diff --git a/backend/src/api/healthcheck.ts b/backend/src/api/healthcheck.ts new file mode 100644 index 00000000..59f2c176 --- /dev/null +++ b/backend/src/api/healthcheck.ts @@ -0,0 +1,8 @@ +import { wrapHandler } from './helpers'; + +export const handler = wrapHandler(async () => { + return { + statusCode: 200, + body: '' + }; +}); diff --git a/backend/src/api/helpers.ts b/backend/src/api/helpers.ts new file mode 100644 index 00000000..acc6627f --- /dev/null +++ b/backend/src/api/helpers.ts @@ -0,0 +1,244 @@ +import { + APIGatewayProxyHandler, + APIGatewayProxyEvent, + APIGatewayProxyResult, + Handler +} from 'aws-lambda'; +import { ValidationOptions, validateOrReject } from 'class-validator'; +import { ClassType } from 'class-transformer/ClassTransformer'; +import { plainToClass } from 'class-transformer'; +import S3Client from '../tasks/s3-client'; +import { SES } from 'aws-sdk'; +import * as nodemailer from 'nodemailer'; +import * as handlebars from 'handlebars'; + +export const validateBody = async ( + obj: ClassType, + body: string | null, + validateOptions?: ValidationOptions +): Promise => { + const raw: any = plainToClass(obj, JSON.parse(body ?? '{}')); + await validateOrReject(raw, { + ...validateOptions, + whitelist: true, + forbidUnknownValues: true + }); + return raw; +}; + +export const makeResponse = ( + event: APIGatewayProxyEvent, + opts: Partial +): APIGatewayProxyResult => { + const origin = event.headers?.origin || '*'; + const { body, statusCode = 200, ...rest } = opts; + return { + statusCode, + headers: { + 'Access-Control-Allow-Origin': origin + }, + body: body ?? '', + ...rest + }; +}; + +type WrapHandler = ( + handler: Handler< + APIGatewayProxyEvent & { + query?: any; + }, + APIGatewayProxyResult + > +) => APIGatewayProxyHandler; +export const wrapHandler: WrapHandler = + (handler) => async (event, context, callback) => { + try { + const result = (await handler( + event, + context, + callback + )) as APIGatewayProxyResult; + const resp = makeResponse(event, result); + if (typeof jest === 'undefined') { + console.log(`=> ${resp.statusCode} ${event.path} `); + } + return resp; + } catch (e) { + console.error(e); + return makeResponse(event, { + statusCode: Array.isArray(e) ? 400 : 500 + }); + } + }; + +export const NotFound: APIGatewayProxyResult = { + statusCode: 404, + body: 'Item not found. View logs for details.' +}; + +export const Unauthorized: APIGatewayProxyResult = { + statusCode: 403, + body: 'Unauthorized access. View logs for details.' +}; + +export const sendEmail = async ( + recipient: string, + subject: string, + body: string +) => { + const transporter = nodemailer.createTransport({ + SES: new SES({ region: 'us-east-1' }) + }); + + await transporter.sendMail({ + from: process.env.CROSSFEED_SUPPORT_EMAIL_SENDER!, + to: recipient, + subject: subject, + text: body, + replyTo: process.env.CROSSFEED_SUPPORT_EMAIL_REPLYTO! + }); +}; + +export const sendRegistrationTextEmail = async (recipient: string) => { + const transporter = nodemailer.createTransport({ + SES: new SES({ region: 'us-east-1' }) + }); + + const mailOptions = { + from: process.env.CROSSFEED_SUPPORT_EMAIL_SENDER!, + to: recipient, + subject: 'Crossfeed Registration Pending', + text: 'Your registration is pending approval.', + replyTo: process.env.CROSSFEED_SUPPORT_EMAIL_REPLYTO! + }; + + await transporter.sendMail(mailOptions, (error, data) => { + console.log(data); + if (error) { + console.log(error); + } + }); +}; + +export const sendRegistrationHtmlEmail = async (recipient: string) => { + const transporter = nodemailer.createTransport({ + SES: new SES({ region: 'us-east-1' }) + }); + + const mailOptions = { + from: process.env.CROSSFEED_SUPPORT_EMAIL_SENDER!, + to: recipient, + subject: 'Crossfeed Registration Pending', + html: '

Your registration is pending approval.

', + replyTo: process.env.CROSSFEED_SUPPORT_EMAIL_REPLYTO! + }; + + await transporter.sendMail(mailOptions, (error, data) => { + console.log(data); + if (error) { + console.log(error); + } + }); +}; + +export const sendUserRegistrationEmail = async ( + recepient: string, + subject: string, + firstName: string, + lastName: string, + templateFileName: string +) => { + try { + const client = new S3Client(); + const htmlTemplate = await client.getEmailAsset(templateFileName); + const template = handlebars.compile(htmlTemplate); + const data = { + firstName: firstName, + lastName: lastName + }; + + const htmlToSend = template(data); + const mailOptions = { + from: process.env.CROSSFEED_SUPPORT_EMAIL_SENDER!, + to: recepient, + subject: subject, + html: htmlToSend, + replyTo: process.env.CROSSFEED_SUPPORT_EMAIL_REPLYTO! + }; + + const transporter = nodemailer.createTransport({ + SES: new SES({ region: 'us-east-1' }) + }); + await transporter.sendMail(mailOptions); + } catch (errorMessage) { + console.log('Email error: ', errorMessage); + } +}; + +export const sendRegistrationDeniedEmail = async ( + recepient: string, + subject: string, + firstName: string, + lastName: string, + templateFileName: string +) => { + try { + const client = new S3Client(); + const htmlTemplate = await client.getEmailAsset(templateFileName); + const template = handlebars.compile(htmlTemplate); + const data = { + firstName: firstName, + lastName: lastName + }; + + const htmlToSend = template(data); + const mailOptions = { + from: process.env.CROSSFEED_SUPPORT_EMAIL_SENDER!, + to: recepient, + subject: subject, + html: htmlToSend, + replyTo: process.env.CROSSFEED_SUPPORT_EMAIL_REPLYTO! + }; + + const transporter = nodemailer.createTransport({ + SES: new SES({ region: 'us-east-1' }) + }); + await transporter.sendMail(mailOptions); + } catch (errorMessage) { + console.log('Email error: ', errorMessage); + } +}; + +export const sendRegistrationApprovedEmail = async ( + recepient: string, + subject: string, + firstName: string, + lastName: string, + templateFileName: string +) => { + try { + const client = new S3Client(); + const htmlTemplate = await client.getEmailAsset(templateFileName); + const template = handlebars.compile(htmlTemplate); + const data = { + firstName: firstName, + lastName: lastName + }; + + const htmlToSend = template(data); + const mailOptions = { + from: process.env.CROSSFEED_SUPPORT_EMAIL_SENDER!, + to: recepient, + subject: subject, + html: htmlToSend, + replyTo: process.env.CROSSFEED_SUPPORT_EMAIL_REPLYTO! + }; + + const transporter = nodemailer.createTransport({ + SES: new SES({ region: 'us-east-1' }) + }); + await transporter.sendMail(mailOptions); + } catch (errorMessage) { + console.log('Email error: ', errorMessage); + } +}; diff --git a/backend/src/api/login-gov.ts b/backend/src/api/login-gov.ts new file mode 100644 index 00000000..67038570 --- /dev/null +++ b/backend/src/api/login-gov.ts @@ -0,0 +1,71 @@ +import * as crypto from 'crypto'; +import { Issuer, ClientMetadata } from 'openid-client'; + +const discoveryUrl = + process.env.LOGIN_GOV_BASE_URL + '/.well-known/openid-configuration'; + +let jwkSet; + +try { + jwkSet = { + keys: [JSON.parse(process.env.LOGIN_GOV_JWT_KEY ?? '{}')] + }; +} catch (e) { + jwkSet = { + keys: [{}] + }; +} + +const clientOptions: ClientMetadata = { + client_id: process.env.LOGIN_GOV_ISSUER!, + token_endpoint_auth_method: 'private_key_jwt', + id_token_signed_response_alg: 'RS256', + key: 'client_id', + redirect_uris: [process.env.LOGIN_GOV_REDIRECT_URI!], + token_endpoint: process.env.LOGIN_GOV_BASE_URL + '/api/openid_connect/token' +}; + +const randomString = function (length) { + return crypto.randomBytes(length).toString('hex'); +}; + +export const login = async function (): Promise<{ + url: string; + state: string; + nonce: string; +}> { + const issuer = await Issuer.discover(discoveryUrl); + const client = new issuer.Client(clientOptions, jwkSet); + const nonce = randomString(32); + const state = randomString(32); + const url = client.authorizationUrl({ + response_type: 'code', + acr_values: `http://idmanagement.gov/ns/assurance/ial/1`, + scope: 'openid email', + redirect_uri: process.env.LOGIN_GOV_REDIRECT_URI, + nonce: nonce, + state: state, + prompt: 'select_account' + }); + return { url, state, nonce }; +}; + +export const callback = async function (body) { + const issuer = await Issuer.discover(discoveryUrl); + const client = new issuer.Client(clientOptions, jwkSet); + const tokenSet = await client.callback( + process.env.LOGIN_GOV_REDIRECT_URI, + { + code: body.code, + state: body.state + }, + { + state: body.origState, + nonce: body.nonce + } + ); + const userInfo = await client.userinfo(tokenSet); + return userInfo; +}; + +export default { login, callback }; diff --git a/backend/src/api/organizations.ts b/backend/src/api/organizations.ts new file mode 100644 index 00000000..371a8129 --- /dev/null +++ b/backend/src/api/organizations.ts @@ -0,0 +1,1110 @@ +import { + IsString, + isUUID, + IsArray, + IsBoolean, + IsUUID, + IsOptional, + IsNotEmpty, + IsNumber, + IsEnum +} from 'class-validator'; +import { + Organization, + connectToDatabase, + Role, + ScanTask, + Scan, + User, + OrganizationTag, + PendingDomain +} from '../models'; +import { validateBody, wrapHandler, NotFound, Unauthorized } from './helpers'; +import { + isOrgAdmin, + isGlobalWriteAdmin, + isRegionalAdmin, + getOrgMemberships, + isGlobalViewAdmin +} from './auth'; +import { In } from 'typeorm'; +import { plainToClass } from 'class-transformer'; +import { randomBytes } from 'crypto'; +import { promises } from 'dns'; + +/** + * @swagger + * + * /organizations/{id}: + * delete: + * description: Delete a particular organization. + * parameters: + * - in: path + * name: id + * description: Organization id + * tags: + * - Organizations + */ +export const del = wrapHandler(async (event) => { + const id = event.pathParameters?.organizationId; + + if (!id || !isUUID(id)) { + return NotFound; + } + + if (!isGlobalWriteAdmin(event)) return Unauthorized; + + await connectToDatabase(); + const result = await Organization.delete(id); + return { + statusCode: 200, + body: JSON.stringify(result) + }; +}); + +// Used exclusively for deleting pending domains +class PendingDomainBody { + @IsArray() + @IsOptional() + pendingDomains: PendingDomain[]; +} + +class NewOrganizationNonGlobalAdmins { + @IsString() + name: string; + + @IsString() + acronym: string; + + @IsBoolean() + isPassive: boolean; +} + +class NewOrganization extends NewOrganizationNonGlobalAdmins { + @IsArray() + rootDomains: string[]; + + @IsArray() + ipBlocks: string[]; + + @IsArray() + tags: OrganizationTag[]; + + @IsUUID() + @IsOptional() + parent?: string; +} + +class NewOrUpdatedOrganization extends NewOrganizationNonGlobalAdmins { + @IsArray() + rootDomains: string[]; + + @IsArray() + ipBlocks: string[]; + + @IsArray() + tags: OrganizationTag[]; + + @IsUUID() + @IsOptional() + parent?: string; + + @IsString() + @IsOptional() + state?: string; + + @IsString() + @IsOptional() + regionId?: string; + + @IsString() + @IsNotEmpty() + @IsOptional() + country?: string; + + @IsNumber() + @IsOptional() + stateFips?: number; + + @IsString() + @IsOptional() + stateName?: string; + + @IsString() + @IsOptional() + county?: string; + + @IsNumber() + @IsOptional() + countyFips?: number; +} + +// Type Validation Options +class UpdateOrganizationMetaV2 { + @IsString() + @IsNotEmpty() + @IsOptional() + name: string; + + @IsString() + @IsNotEmpty() + @IsOptional() + acronym: string; + + @IsBoolean() + @IsOptional() + isPassive: boolean; + + @IsString() + @IsNotEmpty() + @IsOptional() + state: string; + + @IsString() + @IsNotEmpty() + @IsOptional() + regionId: string; + + @IsString() + @IsNotEmpty() + @IsOptional() + country: string; + + @IsNumber() + @IsOptional() + stateFips: number; + + @IsString() + @IsNotEmpty() + @IsOptional() + stateName: string; + + @IsString() + @IsNotEmpty() + @IsOptional() + county: string; + + @IsNumber() + @IsOptional() + countyFips: number; + + @IsString() + @IsNotEmpty() + @IsOptional() + type: string; +} + +class NewDomain { + @IsString() + @IsNotEmpty() + domain: string; +} + +class NewOrganizationRoleDB { + @IsEnum(User) + user: User; + + @IsEnum(Organization) + organization: Organization; + + @IsBoolean() + approved: boolean; + + @IsString() + role: string; + + @IsEnum(User) + approvedBy: User; + + @IsEnum(User) + createdBy: User; +} + +class NewOrganizationRoleBody { + @IsString() + userId: string; + + @IsString() + @IsOptional() + role: any; +} + +const findOrCreateTags = async ( + tags: OrganizationTag[] +): Promise => { + const finalTags: OrganizationTag[] = []; + for (const tag of tags) { + if (!tag.id) { + // If no id is supplied, first check to see if a tag with this name exists + const found = await OrganizationTag.findOne({ + where: { name: tag.name } + }); + if (found) { + finalTags.push(found); + } else { + // If not, create it + const created = OrganizationTag.create({ name: tag.name }); + await created.save(); + finalTags.push(created); + } + } else { + finalTags.push(tag); + } + } + return finalTags; +}; + +/** + * @swagger + * + * /organizations/{id}: + * put: + * description: Update a particular organization. + * parameters: + * - in: path + * name: id + * description: Organization id + * tags: + * - Organizations + */ +export const update = wrapHandler(async (event) => { + const id = event.pathParameters?.organizationId; + + if (!id || !isUUID(id)) { + return NotFound; + } + + if (!isOrgAdmin(event, id)) return Unauthorized; + const body = await validateBody< + NewOrganization | NewOrganizationNonGlobalAdmins + >( + isGlobalWriteAdmin(event) + ? NewOrganization + : NewOrganizationNonGlobalAdmins, + event.body + ); + const pendingBody = await validateBody( + PendingDomainBody, + event.body + ); + + await connectToDatabase(); + const org = await Organization.findOne( + { + id + }, + { + relations: ['userRoles', 'granularScans'] + } + ); + if (org) { + if ('tags' in body) { + body.tags = await findOrCreateTags(body.tags); + } + + let newPendingDomains: PendingDomain[] = []; + if (pendingBody.pendingDomains) { + for (const domain of org.pendingDomains) { + if (pendingBody.pendingDomains.find((d) => d.name === domain.name)) { + // Don't delete + newPendingDomains.push(domain); + } + } + } else { + newPendingDomains = org.pendingDomains; + } + + Organization.merge(org, { + ...body, + pendingDomains: newPendingDomains, + parent: undefined + }); + await Organization.save(org); + return { + statusCode: 200, + body: JSON.stringify(org) + }; + } + return NotFound; +}); + +/** + * @swagger + * + * /organizations: + * post: + * description: Create a new organization. + * tags: + * - Organizations + */ +export const create = wrapHandler(async (event) => { + if (!isGlobalWriteAdmin(event)) return Unauthorized; + const body = await validateBody(NewOrUpdatedOrganization, event.body); + await connectToDatabase(); + + if ('tags' in body) { + body.tags = await findOrCreateTags(body.tags); + } + const organization = Organization.create({ + ...body, + createdBy: { id: event.requestContext.authorizer!.id }, + parent: { id: body.parent }, + regionId: REGION_STATE_MAP[body.stateName!] ?? null + }); + const res = await organization.save(); + return { + statusCode: 200, + body: JSON.stringify(res) + }; +}); + +/** + * @swagger + * + * /organizations: + * get: + * description: List organizations that the user is a member of or has access to. + * tags: + * - Organizations + */ +export const list = wrapHandler(async (event) => { + console.log('list function called with event: ', event); + + if (!isGlobalViewAdmin(event) && getOrgMemberships(event).length === 0) { + return { + //TODO: Should we return a 403? + statusCode: 200, + body: JSON.stringify([]) + }; + } + await connectToDatabase(); + console.log('Database connected'); + + let where: any = { parent: null }; + if (!isGlobalViewAdmin(event)) { + where = { id: In(getOrgMemberships(event)), parent: null }; + } + const result = await Organization.find({ + where, + relations: ['userRoles', 'tags'], + order: { name: 'ASC' } + }); + + console.log('Organization.find result: ', result); + + return { + statusCode: 200, + body: JSON.stringify(result) + }; +}); + +/** + * @swagger + * + * /organizations/tags: + * get: + * description: Fetchs all possible organization tags (must be global admin) + * tags: + * - Organizations + */ +export const getTags = wrapHandler(async (event) => { + if (!isGlobalViewAdmin(event)) { + return { + statusCode: 200, + body: JSON.stringify([]) + }; + } + await connectToDatabase(); + const result = await OrganizationTag.find({ + select: ['id', 'name'] + }); + + return { + statusCode: 200, + body: JSON.stringify(result) + }; +}); + +/** + * @swagger + * + * /organizations/{id}: + * get: + * description: Get information about a particular organization. + * parameters: + * - in: path + * name: id + * description: Organization id + * tags: + * - Organizations + */ +export const get = wrapHandler(async (event) => { + const id = event.pathParameters?.organizationId; + + if (!isOrgAdmin(event, id)) return Unauthorized; + + await connectToDatabase(); + const result = await Organization.findOne(id, { + relations: [ + 'userRoles', + 'userRoles.user', + 'granularScans', + 'tags', + 'parent', + 'children' + ] + }); + + if (result) { + result.scanTasks = await ScanTask.find({ + where: { + organization: { id } + }, + take: 10, + order: { + createdAt: 'DESC' + }, + relations: ['scan'] + }); + } + + return { + statusCode: result ? 200 : 404, + body: result ? JSON.stringify(result) : '' + }; +}); + +class UpdateBody { + @IsBoolean() + enabled: boolean; +} + +/** + * @swagger + * + * /organizations/{id}/granularScans/{scanId}/update: + * post: + * description: Enable or disable a scan for a particular organization; this endpoint can be called by organization admins and only works for user-modifiable scans. + * parameters: + * - in: path + * name: id + * description: Organization id + * - in: path + * name: scanId + * description: Role id + * tags: + * - Organizations + */ +export const updateScan = wrapHandler(async (event) => { + const organizationId = event.pathParameters?.organizationId; + + if (!organizationId || !isUUID(organizationId)) { + return NotFound; + } + + if (!isOrgAdmin(event, organizationId) && !isGlobalWriteAdmin(event)) + return Unauthorized; + + await connectToDatabase(); + const scanId = event.pathParameters?.scanId; + if (!scanId || !isUUID(scanId)) { + return NotFound; + } + const scan = await Scan.findOne({ + id: scanId, + isGranular: true, + isUserModifiable: true + }); + const organization = await Organization.findOne( + { + id: organizationId + }, + { + relations: ['granularScans'] + } + ); + if (!scan || !organization) { + return NotFound; + } + const body = await validateBody(UpdateBody, event.body); + if (body.enabled) { + organization?.granularScans.push(); + } + const existing = organization?.granularScans.find((s) => s.id === scanId); + if (body.enabled && !existing) { + organization.granularScans.push(plainToClass(Scan, { id: scanId })); + } else if (!body.enabled && existing) { + organization.granularScans = organization.granularScans.filter( + (s) => s.id !== scanId + ); + } + const res = await Organization.save(organization); + return { + statusCode: 200, + body: JSON.stringify(res) + }; +}); + +/** + * @swagger + * + * /organizations/{id}/initiateDomainVerification: + * post: + * description: Generates a token to verify a new domain via a DNS record + * parameters: + * - in: path + * name: id + * description: Organization id + * tags: + * - Organizations + */ +export const initiateDomainVerification = wrapHandler(async (event) => { + const organizationId = event.pathParameters?.organizationId; + + if (!organizationId || !isUUID(organizationId)) { + return NotFound; + } + + if (!isOrgAdmin(event, organizationId) && !isGlobalWriteAdmin(event)) + return Unauthorized; + const body = await validateBody(NewDomain, event.body); + + await connectToDatabase(); + const token = 'crossfeed-verification=' + randomBytes(16).toString('hex'); + + const organization = await Organization.findOne({ + id: organizationId + }); + if (!organization) { + return NotFound; + } + if (organization.rootDomains.find((domain) => domain === body.domain)) { + return { + statusCode: 422, + body: 'Domain already exists.' + }; + } + if ( + !organization.pendingDomains.find( + (domain) => domain['name'] === body.domain + ) + ) { + const domain: PendingDomain = { + name: body.domain, + token: token + }; + organization.pendingDomains.push(domain); + + const res = await Organization.save(organization); + } + return { + statusCode: 200, + body: JSON.stringify(organization.pendingDomains) + }; +}); + +/** + * @swagger + * + * /organizations/{id}/checkDomainVerification: + * post: + * description: Checks whether the DNS record has been created for the supplied domain + * parameters: + * - in: path + * name: id + * description: Organization id + * tags: + * - Organizations + */ +export const checkDomainVerification = wrapHandler(async (event) => { + const organizationId = event.pathParameters?.organizationId; + + if (!organizationId || !isUUID(organizationId)) { + return NotFound; + } + + if (!isOrgAdmin(event, organizationId) && !isGlobalWriteAdmin(event)) + return Unauthorized; + const body = await validateBody(NewDomain, event.body); + + await connectToDatabase(); + + const organization = await Organization.findOne({ + id: organizationId + }); + if (!organization) { + return NotFound; + } + const pendingDomain = organization.pendingDomains.find( + (domain) => domain['name'] === body.domain + ); + if (!pendingDomain) { + return { + statusCode: 422, + body: 'Please initiate the domain verification first.' + }; + } + try { + const res = await promises.resolveTxt(pendingDomain.name); + for (const record of res) { + for (const val of record) { + if (val === pendingDomain.token) { + // Success! + organization.rootDomains.push(pendingDomain.name); + organization.pendingDomains = organization.pendingDomains.filter( + (domain) => domain.name !== pendingDomain.name + ); + organization.save(); + return { + statusCode: 200, + body: JSON.stringify({ success: true, organization }) + }; + } + } + } + } catch (e) {} + + return { + statusCode: 200, + body: JSON.stringify({ success: false }) + }; +}); + +/** + * @swagger + * + * /organizations/{id}/roles/{roleId}/approve: + * post: + * description: Approve a role within an organization. + * parameters: + * - in: path + * name: id + * description: Organization id + * - in: path + * name: roleId + * description: Role id + * tags: + * - Organizations + */ +export const approveRole = wrapHandler(async (event) => { + const organizationId = event.pathParameters?.organizationId; + if (!isOrgAdmin(event, organizationId)) return Unauthorized; + + const id = event.pathParameters?.roleId; + if (!isUUID(id)) { + return NotFound; + } + + await connectToDatabase(); + const role = await Role.findOne({ + organization: { id: organizationId }, + id + }); + if (role) { + role.approved = true; + role.approvedBy = plainToClass(User, { + id: event.requestContext.authorizer!.id + }); + const result = await role.save(); + return { + statusCode: result ? 200 : 404, + body: JSON.stringify({}) + }; + } + + return NotFound; +}); + +/** + * @swagger + * + * /organizations/{id}/roles/{roleId}/remove: + * post: + * description: Remove a role within an organization. + * parameters: + * - in: path + * name: id + * description: Organization id + * - in: path + * name: roleId + * description: Role id + * tags: + * - Organizations + */ +export const removeRole = wrapHandler(async (event) => { + const organizationId = event.pathParameters?.organizationId; + if (!isOrgAdmin(event, organizationId)) return Unauthorized; + + const id = event.pathParameters?.roleId; + if (!id || !isUUID(id)) { + return NotFound; + } + + await connectToDatabase(); + const result = await Role.delete({ + organization: { id: organizationId }, + id + }); + return { + statusCode: 200, + body: JSON.stringify(result) + }; +}); + +/** + * @swagger + * + * /organizations/regionId/{regionId}: + * get: + * description: List organizations with specific regionId. + * parameters: + * - in: path + * name: regionId + * description: Organization regionId + * tags: + * - Organizations + */ +export const getByRegionId = wrapHandler(async (event) => { + if (!isRegionalAdmin(event)) return Unauthorized; + const regionId = event.pathParameters?.regionId; + await connectToDatabase(); + const result = await Organization.find({ + where: { regionId: regionId } + }); + + if (result) { + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } + return NotFound; +}); + +/** + * @swagger + * + * /organizations/state/{state}: + * get: + * description: List organizations with specific state. + * parameters: + * - in: path + * name: state + * description: Organization state + * tags: + * - Organizations + */ +export const getByState = wrapHandler(async (event) => { + if (!isRegionalAdmin(event)) return Unauthorized; + const state = event.pathParameters?.state; + await connectToDatabase(); + const result = await Organization.find({ + where: { state: state } + }); + + if (result) { + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } + return NotFound; +}); + +//V2 Endpoints + +/** + * @swagger + * + * /v2/organizations: + * get: + * description: List all organizations with query parameters. + * tags: + * - Users + * parameters: + * - in: query + * name: state + * required: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: regionId + * required: false + * schema: + * type: array + * items: + * type: string + * + */ +export const getAllV2 = wrapHandler(async (event) => { + if (!isRegionalAdmin(event)) return Unauthorized; + const filterParams = {}; + + if (event.query && event.query.state) { + filterParams['state'] = event.query.state; + } + if (event.query && event.query.regionId) { + filterParams['regionId'] = event.query.regionId; + } + + await connectToDatabase(); + if (Object.entries(filterParams).length === 0) { + const result = await Organization.find({}); + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } else { + const result = await Organization.find({ + where: filterParams + }); + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } +}); + +/** + * @swagger + * + * /v2/organizations/{id}: + * put: + * description: Update a particular organization. + * parameters: + * - in: path + * name: id + * description: Organization id + * tags: + * - Organizations + */ + +export const updateV2 = wrapHandler(async (event) => { + if (!isRegionalAdmin(event)) return Unauthorized; + // Get the organization id from the path + const id = event.pathParameters?.organizationId; + + // confirm that the id is a valid UUID + if (!id || !isUUID(id)) { + return NotFound; + } + + // TODO: check permissions + // if (!isOrgAdmin(event, id)) return Unauthorized; + + // Validate the body + const validatedBody = await validateBody( + UpdateOrganizationMetaV2, + event.body + ); + + // Connect to the database + await connectToDatabase(); + + // Update the organization + const updateResp = await Organization.update(id, validatedBody); + + // Handle response + if (updateResp) { + const updatedOrg = await Organization.findOne(id); + return { + statusCode: 200, + body: JSON.stringify(updatedOrg) + }; + } + return NotFound; +}); + +/** + * @swagger + * + * /v2/organizations/{orgId}/users: + * post: + * description: Add a user to a particular organization. + * parameters: + * - in: path + * name: orgId + * description: Organization id + * tags: + * - Organizations + */ + +export const addUserV2 = wrapHandler(async (event) => { + // Permissions + if (!isRegionalAdmin(event)) return Unauthorized; + // TODO: check permissions + // if (!isOrgAdmin(event, id)) return Unauthorized; + + // Validate the body + const body = await validateBody(NewOrganizationRoleBody, event.body); + + // Connect to the database + await connectToDatabase(); + + // Get the organization id from the path + const orgId = event.pathParameters?.organizationId; + // confirm that the orgId is a valid UUID + if (!orgId || !isUUID(orgId)) { + return NotFound; + } + // Get Organization from the database + const org = await Organization.findOne(orgId); + + // Get the user id from the body + const userId = body.userId; + // confirm that the userId is a valid UUID + if (!userId || !isUUID(userId)) { + return NotFound; + } + // Get User from the database + const user = await User.findOneOrFail(userId); + + const newRoleData = { + user: user, + organization: org, + approved: true, + role: body.role, + approvedBy: event.requestContext.authorizer!.id, + createdBy: event.requestContext.authorizer!.id + }; + + // Add a role to make association to user/organization + const newRole = Role.create(newRoleData); + await Role.save(newRole); + // const roleId = newRole.id; + + // Handle response + if (newRole) { + // const roleResp = await Organization.findOne(roleId); + return { + statusCode: 200, + body: JSON.stringify(newRole) + }; + } + return NotFound; +}); + +export const REGION_STATE_MAP = { + Alabama: '4', + Alaska: '10', + 'American Samoa': '9', + Arizona: '9', + Arkansas: '6', + California: '9', + Colorado: '8', + 'Commonwealth Northern Mariana Islands': '9', + Connecticut: '1', + Delaware: '3', + 'District of Columbia': '3', + 'Federal States of Micronesia': '9', + Florida: '4', + Georgia: '4', + Guam: '9', + Hawaii: '9', + Idaho: '10', + Illinois: '5', + Indiana: '5', + Iowa: '7', + Kansas: '7', + Kentucky: '4', + Louisiana: '6', + Maine: '1', + Maryland: '3', + Massachusetts: '1', + Michigan: '5', + Minnesota: '5', + Mississippi: '4', + Missouri: '7', + Montana: '8', + Nebraska: '7', + Nevada: '9', + 'New Hampshire': '1', + 'New Jersey': '2', + 'New Mexico': '6', + 'New York': '2', + 'North Carolina': '4', + 'North Dakota': '8', + Ohio: '5', + Oklahoma: '6', + Oregon: '10', + Pennsylvania: '3', + 'Puerto Rico': '2', + 'Republic of Marshall Islands': '9', + 'Rhode Island': '1', + 'South Carolina': '4', + 'South Dakota': '8', + Tennessee: '4', + Texas: '6', + Utah: '8', + Vermont: '1', + Virginia: '3', + 'Virgin Islands': '2', + Washington: '10', + 'West Virginia': '3', + Wisconsin: '5', + Wyoming: '8' +}; + +/** + * @swagger + * + * /organizations_upsert: + * post: + * description: Create a new organization or update it if it already exists. + * tags: + * - Organizations + */ +export const upsert_org = wrapHandler(async (event) => { + if (!isGlobalWriteAdmin(event)) return Unauthorized; + const body = await validateBody(NewOrUpdatedOrganization, event.body); + await connectToDatabase(); + + if ('tags' in body) { + body.tags = await findOrCreateTags(body.tags); + } + + if ('stateName' in body) { + body.regionId = REGION_STATE_MAP[body.stateName!] ?? null; + } + + const organization_id = await Organization.createQueryBuilder() + .insert() + .into(Organization) + .values([ + { + ...body, + createdBy: { id: event.requestContext.authorizer!.id }, + parent: { id: body.parent } + } + ]) + .orUpdate({ + conflict_target: ['acronym'], + overwrite: [ + 'name', + 'isPassive', + 'country', + 'state', + 'regionId', + 'stateFips', + 'stateName', + 'county', + 'countyFips' + ] + }) + .execute(); + + const current_org = await Organization.findOneOrFail( + organization_id.identifiers[0] + ); + + current_org.tags = body.tags; + + current_org.save(); + + return { + statusCode: 200, + body: JSON.stringify(current_org) + }; +}); diff --git a/backend/src/api/reports.ts b/backend/src/api/reports.ts new file mode 100644 index 00000000..0c035b25 --- /dev/null +++ b/backend/src/api/reports.ts @@ -0,0 +1,62 @@ +import { wrapHandler } from './helpers'; +import S3Client from '../tasks/s3-client'; +import { getOrgMemberships } from './auth'; + +/** + * @swagger + * + * /reports/export: + * post: + * description: Export CyHy report by specifying the report name returned in /reports/list and the organization id. User must be a member of the organization. + * tags: + * - Reports + */ +export const export_report = wrapHandler(async (event) => { + const reportName = JSON.parse(event.body!).reportName; + const orgId = JSON.parse(event.body!).currentOrganization.id; + if (getOrgMemberships(event).includes(orgId)) { + const client = new S3Client(); + const url = await client.exportReport(reportName, orgId); + if (url == 'File does not exist') { + return { + statusCode: 404, + body: 'File does not exist' + }; + } + return { + statusCode: 200, + body: JSON.stringify({ url }) + }; + } else { + return { + statusCode: 404, + body: 'User is not a member of this organization.' + }; + } +}); + +/** + * @swagger + * + * /reports/list: + * post: + * description: Get a list of available P&E reports by specifying organization id. User must be a member of the organization. + * tags: + * - Reports + */ +export const list_reports = wrapHandler(async (event) => { + const orgId = JSON.parse(event.body!).currentOrganization.id; + if (getOrgMemberships(event).includes(orgId)) { + const client = new S3Client(); + const data = await client.listReports(orgId); + return { + statusCode: 200, + body: JSON.stringify(data) + }; + } else { + return { + statusCode: 404, + body: 'User is not a member of this organization.' + }; + } +}); diff --git a/backend/src/api/roles.ts b/backend/src/api/roles.ts new file mode 100644 index 00000000..46e71d8a --- /dev/null +++ b/backend/src/api/roles.ts @@ -0,0 +1,834 @@ +import { + IsString, + isUUID, + IsArray, + IsBoolean, + IsUUID, + IsOptional, + IsNotEmpty, + IsNumber +} from 'class-validator'; +import { + Organization, + connectToDatabase, + Role, + ScanTask, + Scan, + User, + OrganizationTag, + PendingDomain +} from '../models'; +import { validateBody, wrapHandler, NotFound, Unauthorized } from './helpers'; +import { + isOrgAdmin, + isGlobalWriteAdmin, + isRegionalAdmin, + getOrgMemberships, + isGlobalViewAdmin +} from './auth'; +import { In } from 'typeorm'; +import { plainToClass } from 'class-transformer'; +import { randomBytes } from 'crypto'; +import { promises } from 'dns'; + +/** + * @swagger + * + * /roless/{id}: + * delete: + * description: Delete a particular organization. + * parameters: + * - in: path + * name: id + * description: Organization id + * tags: + * - Organizations + */ +export const del = wrapHandler(async (event) => { + const id = event.pathParameters?.organizationId; + + if (!id || !isUUID(id)) { + return NotFound; + } + + if (!isGlobalWriteAdmin(event)) return Unauthorized; + + await connectToDatabase(); + const result = await Organization.delete(id); + return { + statusCode: 200, + body: JSON.stringify(result) + }; +}); + +// Used exclusively for deleting pending domains +class PendingDomainBody { + @IsArray() + @IsOptional() + pendingDomains: PendingDomain[]; +} + +class NewOrganizationNonGlobalAdmins { + @IsString() + name: string; + + @IsBoolean() + isPassive: boolean; +} + +class NewOrganization extends NewOrganizationNonGlobalAdmins { + @IsArray() + rootDomains: string[]; + + @IsArray() + ipBlocks: string[]; + + @IsArray() + tags: OrganizationTag[]; + + @IsUUID() + @IsOptional() + parent?: string; +} + +// Type Validation Options +class UpdateOrganizationMetaV2 { + @IsString() + @IsNotEmpty() + @IsOptional() + name: string; + + @IsBoolean() + @IsOptional() + isPassive: boolean; + + @IsString() + @IsNotEmpty() + @IsOptional() + state: string; + + @IsString() + @IsNotEmpty() + @IsOptional() + regionId: string; + + @IsString() + @IsNotEmpty() + @IsOptional() + country: string; + + @IsNumber() + @IsOptional() + stateFips: number; + + @IsString() + @IsNotEmpty() + @IsOptional() + stateName: string; + + @IsString() + @IsNotEmpty() + @IsOptional() + county: string; + + @IsNumber() + @IsOptional() + countyFips: number; + + @IsString() + @IsNotEmpty() + @IsOptional() + acronym: string; + + @IsString() + @IsNotEmpty() + @IsOptional() + type: string; +} + +class NewDomain { + @IsString() + @IsNotEmpty() + domain: string; +} + +const findOrCreateTags = async ( + tags: OrganizationTag[] +): Promise => { + const finalTags: OrganizationTag[] = []; + for (const tag of tags) { + if (!tag.id) { + // If no id is supplied, first check to see if a tag with this name exists + const found = await OrganizationTag.findOne({ + where: { name: tag.name } + }); + if (found) { + finalTags.push(found); + } else { + // If not, create it + const created = OrganizationTag.create({ name: tag.name }); + await created.save(); + finalTags.push(created); + } + } else { + finalTags.push(tag); + } + } + return finalTags; +}; + +/** + * @swagger + * + * /organizations/{id}: + * put: + * description: Update a particular organization. + * parameters: + * - in: path + * name: id + * description: Organization id + * tags: + * - Organizations + */ +export const update = wrapHandler(async (event) => { + const id = event.pathParameters?.organizationId; + + if (!id || !isUUID(id)) { + return NotFound; + } + + if (!isOrgAdmin(event, id)) return Unauthorized; + const body = await validateBody< + NewOrganization | NewOrganizationNonGlobalAdmins + >( + isGlobalWriteAdmin(event) + ? NewOrganization + : NewOrganizationNonGlobalAdmins, + event.body + ); + const pendingBody = await validateBody( + PendingDomainBody, + event.body + ); + + await connectToDatabase(); + const org = await Organization.findOne( + { + id + }, + { + relations: ['userRoles', 'granularScans'] + } + ); + if (org) { + if ('tags' in body) { + body.tags = await findOrCreateTags(body.tags); + } + + let newPendingDomains: PendingDomain[] = []; + if (pendingBody.pendingDomains) { + for (const domain of org.pendingDomains) { + if (pendingBody.pendingDomains.find((d) => d.name === domain.name)) { + // Don't delete + newPendingDomains.push(domain); + } + } + } else { + newPendingDomains = org.pendingDomains; + } + + Organization.merge(org, { + ...body, + pendingDomains: newPendingDomains, + parent: undefined + }); + await Organization.save(org); + return { + statusCode: 200, + body: JSON.stringify(org) + }; + } + return NotFound; +}); + +/** + * @swagger + * + * /organizations: + * post: + * description: Create a new organization. + * tags: + * - Organizations + */ +export const create = wrapHandler(async (event) => { + if (!isGlobalWriteAdmin(event)) return Unauthorized; + const body = await validateBody(NewOrganization, event.body); + await connectToDatabase(); + + if ('tags' in body) { + body.tags = await findOrCreateTags(body.tags); + } + const organization = await Organization.create({ + ...body, + createdBy: { id: event.requestContext.authorizer!.id }, + parent: { id: body.parent } + }); + const res = await organization.save(); + return { + statusCode: 200, + body: JSON.stringify(res) + }; +}); + +/** + * @swagger + * + * /organizations: + * get: + * description: List organizations that the user is a member of or has access to. + * tags: + * - Organizations + */ +export const list = wrapHandler(async (event) => { + if (!isGlobalViewAdmin(event) && getOrgMemberships(event).length === 0) { + return { + statusCode: 200, + body: JSON.stringify([]) + }; + } + await connectToDatabase(); + let where: any = { parent: null }; + if (!isGlobalViewAdmin(event)) { + where = { id: In(getOrgMemberships(event)), parent: null }; + } + const result = await Organization.find({ + where, + relations: ['userRoles', 'tags'], + order: { name: 'ASC' } + }); + + return { + statusCode: 200, + body: JSON.stringify(result) + }; +}); + +/** + * @swagger + * + * /organizations/tags: + * get: + * description: Fetchs all possible organization tags (must be global admin) + * tags: + * - Organizations + */ +export const getTags = wrapHandler(async (event) => { + if (!isGlobalViewAdmin(event)) { + return { + statusCode: 200, + body: JSON.stringify([]) + }; + } + await connectToDatabase(); + const result = await OrganizationTag.find({ + select: ['id', 'name'] + }); + + return { + statusCode: 200, + body: JSON.stringify(result) + }; +}); + +/** + * @swagger + * + * /organizations/{id}: + * get: + * description: Get information about a particular organization. + * parameters: + * - in: path + * name: id + * description: Organization id + * tags: + * - Organizations + */ +export const get = wrapHandler(async (event) => { + const id = event.pathParameters?.organizationId; + + if (!isOrgAdmin(event, id)) return Unauthorized; + + await connectToDatabase(); + const result = await Organization.findOne(id, { + relations: [ + 'userRoles', + 'userRoles.user', + 'granularScans', + 'tags', + 'parent', + 'children' + ] + }); + + if (result) { + result.scanTasks = await ScanTask.find({ + where: { + organization: { id } + }, + take: 10, + order: { + createdAt: 'DESC' + }, + relations: ['scan'] + }); + } + + return { + statusCode: result ? 200 : 404, + body: result ? JSON.stringify(result) : '' + }; +}); + +class UpdateBody { + @IsBoolean() + enabled: boolean; +} + +/** + * @swagger + * + * /organizations/{id}/granularScans/{scanId}/update: + * post: + * description: Enable or disable a scan for a particular organization; this endpoint can be called by organization admins and only works for user-modifiable scans. + * parameters: + * - in: path + * name: id + * description: Organization id + * - in: path + * name: scanId + * description: Role id + * tags: + * - Organizations + */ +export const updateScan = wrapHandler(async (event) => { + const organizationId = event.pathParameters?.organizationId; + + if (!organizationId || !isUUID(organizationId)) { + return NotFound; + } + + if (!isOrgAdmin(event, organizationId) && !isGlobalWriteAdmin(event)) + return Unauthorized; + + await connectToDatabase(); + const scanId = event.pathParameters?.scanId; + if (!scanId || !isUUID(scanId)) { + return NotFound; + } + const scan = await Scan.findOne({ + id: scanId, + isGranular: true, + isUserModifiable: true + }); + const organization = await Organization.findOne( + { + id: organizationId + }, + { + relations: ['granularScans'] + } + ); + if (!scan || !organization) { + return NotFound; + } + const body = await validateBody(UpdateBody, event.body); + if (body.enabled) { + organization?.granularScans.push(); + } + const existing = organization?.granularScans.find((s) => s.id === scanId); + if (body.enabled && !existing) { + organization.granularScans.push(plainToClass(Scan, { id: scanId })); + } else if (!body.enabled && existing) { + organization.granularScans = organization.granularScans.filter( + (s) => s.id !== scanId + ); + } + const res = await Organization.save(organization); + return { + statusCode: 200, + body: JSON.stringify(res) + }; +}); + +/** + * @swagger + * + * /organizations/{id}/initiateDomainVerification: + * post: + * description: Generates a token to verify a new domain via a DNS record + * parameters: + * - in: path + * name: id + * description: Organization id + * tags: + * - Organizations + */ +export const initiateDomainVerification = wrapHandler(async (event) => { + const organizationId = event.pathParameters?.organizationId; + + if (!organizationId || !isUUID(organizationId)) { + return NotFound; + } + + if (!isOrgAdmin(event, organizationId) && !isGlobalWriteAdmin(event)) + return Unauthorized; + const body = await validateBody(NewDomain, event.body); + + await connectToDatabase(); + const token = 'crossfeed-verification=' + randomBytes(16).toString('hex'); + + const organization = await Organization.findOne({ + id: organizationId + }); + if (!organization) { + return NotFound; + } + if (organization.rootDomains.find((domain) => domain === body.domain)) { + return { + statusCode: 422, + body: 'Domain already exists.' + }; + } + if ( + !organization.pendingDomains.find( + (domain) => domain['name'] === body.domain + ) + ) { + const domain: PendingDomain = { + name: body.domain, + token: token + }; + organization.pendingDomains.push(domain); + + const res = await Organization.save(organization); + } + return { + statusCode: 200, + body: JSON.stringify(organization.pendingDomains) + }; +}); + +/** + * @swagger + * + * /organizations/{id}/checkDomainVerification: + * post: + * description: Checks whether the DNS record has been created for the supplied domain + * parameters: + * - in: path + * name: id + * description: Organization id + * tags: + * - Organizations + */ +export const checkDomainVerification = wrapHandler(async (event) => { + const organizationId = event.pathParameters?.organizationId; + + if (!organizationId || !isUUID(organizationId)) { + return NotFound; + } + + if (!isOrgAdmin(event, organizationId) && !isGlobalWriteAdmin(event)) + return Unauthorized; + const body = await validateBody(NewDomain, event.body); + + await connectToDatabase(); + + const organization = await Organization.findOne({ + id: organizationId + }); + if (!organization) { + return NotFound; + } + const pendingDomain = organization.pendingDomains.find( + (domain) => domain['name'] === body.domain + ); + if (!pendingDomain) { + return { + statusCode: 422, + body: 'Please initiate the domain verification first.' + }; + } + try { + const res = await promises.resolveTxt(pendingDomain.name); + for (const record of res) { + for (const val of record) { + if (val === pendingDomain.token) { + // Success! + organization.rootDomains.push(pendingDomain.name); + organization.pendingDomains = organization.pendingDomains.filter( + (domain) => domain.name !== pendingDomain.name + ); + organization.save(); + return { + statusCode: 200, + body: JSON.stringify({ success: true, organization }) + }; + } + } + } + } catch (e) {} + + return { + statusCode: 200, + body: JSON.stringify({ success: false }) + }; +}); + +/** + * @swagger + * + * /organizations/{id}/roles/{roleId}/approve: + * post: + * description: Approve a role within an organization. + * parameters: + * - in: path + * name: id + * description: Organization id + * - in: path + * name: roleId + * description: Role id + * tags: + * - Organizations + */ +export const approveRole = wrapHandler(async (event) => { + const organizationId = event.pathParameters?.organizationId; + if (!isOrgAdmin(event, organizationId)) return Unauthorized; + + const id = event.pathParameters?.roleId; + if (!isUUID(id)) { + return NotFound; + } + + await connectToDatabase(); + const role = await Role.findOne({ + organization: { id: organizationId }, + id + }); + if (role) { + role.approved = true; + role.approvedBy = plainToClass(User, { + id: event.requestContext.authorizer!.id + }); + const result = await role.save(); + return { + statusCode: result ? 200 : 404, + body: JSON.stringify({}) + }; + } + + return NotFound; +}); + +/** + * @swagger + * + * /organizations/{id}/roles/{roleId}/remove: + * post: + * description: Remove a role within an organization. + * parameters: + * - in: path + * name: id + * description: Organization id + * - in: path + * name: roleId + * description: Role id + * tags: + * - Organizations + */ +export const removeRole = wrapHandler(async (event) => { + const organizationId = event.pathParameters?.organizationId; + if (!isOrgAdmin(event, organizationId)) return Unauthorized; + + const id = event.pathParameters?.roleId; + if (!id || !isUUID(id)) { + return NotFound; + } + + await connectToDatabase(); + const result = await Role.delete({ + organization: { id: organizationId }, + id + }); + return { + statusCode: 200, + body: JSON.stringify(result) + }; +}); + +/** + * @swagger + * + * /organizations/regionId/{regionId}: + * get: + * description: List organizations with specific regionId. + * parameters: + * - in: path + * name: regionId + * description: Organization regionId + * tags: + * - Organizations + */ +export const getByRegionId = wrapHandler(async (event) => { + if (!isRegionalAdmin(event)) return Unauthorized; + const regionId = event.pathParameters?.regionId; + await connectToDatabase(); + const result = await Organization.find({ + where: { regionId: regionId } + }); + + if (result) { + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } + return NotFound; +}); + +/** + * @swagger + * + * /organizations/state/{state}: + * get: + * description: List organizations with specific state. + * parameters: + * - in: path + * name: state + * description: Organization state + * tags: + * - Organizations + */ +export const getByState = wrapHandler(async (event) => { + if (!isRegionalAdmin(event)) return Unauthorized; + const state = event.pathParameters?.state; + await connectToDatabase(); + const result = await Organization.find({ + where: { state: state } + }); + + if (result) { + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } + return NotFound; +}); + +// V2 Endpoints + +/** + * @swagger + * + * /v2/organizations: + * get: + * description: List all organizations with query parameters. + * tags: + * - Users + * parameters: + * - in: query + * name: state + * required: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: regionId + * required: false + * schema: + * type: array + * items: + * type: string + * + */ +export const getAllV2 = wrapHandler(async (event) => { + if (!isRegionalAdmin(event)) return Unauthorized; + + const filterParams = {}; + + if (event.query && event.query.state) { + filterParams['state'] = event.query.state; + } + if (event.query && event.query.regionId) { + filterParams['regionId'] = event.query.regionId; + } + + await connectToDatabase(); + if (Object.entries(filterParams).length === 0) { + const result = await Organization.find({}); + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } else { + const result = await Organization.find({ + where: filterParams + }); + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } +}); + +/** + * @swagger + * + * /v2/organizations/{id}: + * put: + * description: Update a particular organization. + * parameters: + * - in: path + * name: id + * description: Organization id + * tags: + * - Organizations + */ + +export const updateV2 = wrapHandler(async (event) => { + if (!isRegionalAdmin(event)) return Unauthorized; + // Get the organization id from the path + const id = event.pathParameters?.organizationId; + + // confirm that the id is a valid UUID + if (!id || !isUUID(id)) { + return NotFound; + } + + // TODO: check permissions + // if (!isOrgAdmin(event, id)) return Unauthorized; + + // Validate the body + const validatedBody = await validateBody( + UpdateOrganizationMetaV2, + event.body + ); + + // Connect to the database + await connectToDatabase(); + + // Update the organization + const updateResp = await Organization.update(id, validatedBody); + + // Handle response + if (updateResp) { + const updatedOrg = await Organization.findOne(id); + return { + statusCode: 200, + body: JSON.stringify(updatedOrg) + }; + } + return NotFound; +}); diff --git a/backend/src/api/saved-searches.ts b/backend/src/api/saved-searches.ts new file mode 100644 index 00000000..1497e429 --- /dev/null +++ b/backend/src/api/saved-searches.ts @@ -0,0 +1,159 @@ +import { + IsString, + isUUID, + IsObject, + IsArray, + IsNumber, + IsBoolean, + IsOptional +} from 'class-validator'; +import { connectToDatabase, SavedSearch, Vulnerability } from '../models'; +import { validateBody, wrapHandler, NotFound, Unauthorized } from './helpers'; +import { FindManyOptions } from 'typeorm'; + +export const del = wrapHandler(async (event) => { + const id = event.pathParameters?.searchId; + + if (!id || !isUUID(id)) { + return NotFound; + } + + const where = { createdBy: { id: event.requestContext.authorizer!.id } }; + + await connectToDatabase(); + const search = await SavedSearch.findOne( + { + id, + ...where + }, + { + relations: [] + } + ); + if (search) { + const result = await SavedSearch.delete({ ...where, id }); + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } + return NotFound; +}); + +class NewSavedSearch { + @IsString() + name: string; + + @IsNumber() + count: number; + + @IsString() + sortDirection: string; + + @IsString() + sortField: string; + + @IsString() + searchTerm: string; + + @IsString() + searchPath: string; + + @IsArray() + filters: { field: string; values: any[]; type: string }[]; + + @IsBoolean() + createVulnerabilities: boolean; + + @IsObject() + @IsOptional() + vulnerabilityTemplate: Partial; +} + +const PAGE_SIZE = 20; + +export const update = wrapHandler(async (event) => { + const id = event.pathParameters?.searchId; + if (!id || !isUUID(id)) { + return NotFound; + } + const where = { createdBy: { id: event.requestContext.authorizer!.id } }; + + const body = await validateBody(NewSavedSearch, event.body); + await connectToDatabase(); + const search = await SavedSearch.findOne( + { + id, + ...where + }, + { + relations: [] + } + ); + if (search) { + SavedSearch.merge(search, body); + await SavedSearch.save(search); + return { + statusCode: 200, + body: JSON.stringify(search) + }; + } + return NotFound; +}); + +export const create = wrapHandler(async (event) => { + const body = await validateBody(NewSavedSearch, event.body); + await connectToDatabase(); + const search = await SavedSearch.create({ + ...body, + createdBy: { id: event.requestContext.authorizer!.id } + }); + const res = await SavedSearch.save(search); + return { + statusCode: 200, + body: JSON.stringify(res) + }; +}); + +export const list = wrapHandler(async (event) => { + await connectToDatabase(); + const where = { createdBy: { id: event.requestContext.authorizer!.id } }; + + const pageSize = event.query?.pageSize + ? parseInt(event.query.pageSize) + : PAGE_SIZE; + const page = event.query?.page ? parseInt(event.query?.page) : 1; + + console.log(event.query); + const result = await SavedSearch.findAndCount({ + where, + take: pageSize, + skip: pageSize * (page - 1) + } as FindManyOptions); + + return { + statusCode: 200, + body: JSON.stringify({ + result: result[0], + count: result[1] + }) + }; +}); + +export const get = wrapHandler(async (event) => { + const id = event.pathParameters?.searchId; + const where = { createdBy: { id: event.requestContext.authorizer!.id } }; + + await connectToDatabase(); + const result = await SavedSearch.findOne( + { ...where, id }, + { + relations: [] + } + ); + + return { + statusCode: result ? 200 : 404, + body: result ? JSON.stringify(result) : '' + }; +}); diff --git a/backend/src/api/scan-tasks.ts b/backend/src/api/scan-tasks.ts new file mode 100644 index 00000000..ba4cb340 --- /dev/null +++ b/backend/src/api/scan-tasks.ts @@ -0,0 +1,202 @@ +import { + IsInt, + IsPositive, + IsString, + IsIn, + ValidateNested, + isUUID, + IsUUID, + IsOptional, + IsObject +} from 'class-validator'; +import { Type } from 'class-transformer'; +import { ScanTask, connectToDatabase } from '../models'; +import { validateBody, wrapHandler, NotFound, Unauthorized } from './helpers'; +import { SelectQueryBuilder } from 'typeorm'; +import { + getTagOrganizations, + isGlobalViewAdmin, + isGlobalWriteAdmin +} from './auth'; +import ECSClient from '../tasks/ecs-client'; + +const PAGE_SIZE = parseInt(process.env.PAGE_SIZE ?? '') || 25; + +class ScanTaskFilters { + @IsString() + @IsOptional() + name?: string; + + @IsString() + @IsOptional() + status?: string; + + @IsUUID() + @IsOptional() + organization?: string; + + @IsUUID() + @IsOptional() + tag?: string; +} + +class ScanTaskSearch { + @IsInt() + @IsPositive() + page: number = 1; + + @IsString() + @IsIn(['createdAt', 'finishedAt']) + sort: string = 'createdAt'; + + @IsString() + @IsIn(['ASC', 'DESC']) + order: 'ASC' | 'DESC' = 'DESC'; + + @Type(() => ScanTaskFilters) + @ValidateNested() + @IsObject() + @IsOptional() + filters?: ScanTaskFilters; + + async filterResultQueryset(qs: SelectQueryBuilder, event) { + if (this.filters?.name) { + qs.andWhere('scan.name ILIKE :name', { + name: `${this.filters?.name}` + }); + } + if (this.filters?.status) { + qs.andWhere('scan_task.status ILIKE :status', { + status: `${this.filters?.status}` + }); + } + if (this.filters?.organization) { + qs.andWhere('organization.id = :org', { + org: this.filters.organization + }); + } + if (this.filters?.tag) { + qs.andWhere('organization.id IN (:...orgs)', { + orgs: await getTagOrganizations(event, this.filters.tag) + }); + } + return qs; + } + + async getResults(event) { + const qs = ScanTask.createQueryBuilder('scan_task') + .leftJoinAndSelect('scan_task.scan', 'scan') + .leftJoinAndSelect('scan_task.organizations', 'organization') + .orderBy(`scan_task.${this.sort}`, this.order) + .skip(PAGE_SIZE * (this.page - 1)) + .take(PAGE_SIZE); + + await this.filterResultQueryset(qs, event); + return qs.getManyAndCount(); + } +} + +/** + * @swagger + * + * /scan-tasks/search: + * post: + * description: List scantasks by specifying a filter. + * tags: + * - Scan Tasks + */ +export const list = wrapHandler(async (event) => { + if (!isGlobalViewAdmin(event)) { + return Unauthorized; + } + await connectToDatabase(); + const search = await validateBody(ScanTaskSearch, event.body); + const [result, count] = await search.getResults(event); + return { + statusCode: 200, + body: JSON.stringify({ + result, + count + }) + }; +}); + +/** + * @swagger + * + * /scan-tasks/{id}/kill: + * delete: + * description: Kill a particular scantask. Calling this endpoint does not kill the actual Fargate task, but just marks the task as "failed" in the database. + * parameters: + * - in: path + * name: id + * description: Scantask id + * tags: + * - Scan Tasks + */ +export const kill = wrapHandler(async (event) => { + if (!isGlobalWriteAdmin(event)) { + return Unauthorized; + } + const id = event.pathParameters?.scanTaskId; + + if (!id || !isUUID(id)) { + return NotFound; + } + await connectToDatabase(); + const scanTask = await ScanTask.findOne(id); + if (!scanTask) { + return NotFound; + } + if (scanTask.status === 'failed' || scanTask.status === 'finished') { + return { + statusCode: 400, + body: 'ScanTask has already finished.' + }; + } + if (scanTask) { + scanTask.status = 'failed'; + scanTask.finishedAt = new Date(); + scanTask.output = 'Manually stopped at ' + new Date().toISOString(); + await ScanTask.save(scanTask); + } + return { + statusCode: 200, + body: JSON.stringify({}) + }; +}); + +/** + * @swagger + * + * /scan-tasks/{id}/logs: + * get: + * description: Retrieve logs from a particular scantask. + * parameters: + * - in: path + * name: id + * description: Scantask id + * tags: + * - Scan Tasks + */ +export const logs = wrapHandler(async (event) => { + if (!isGlobalViewAdmin(event)) { + return Unauthorized; + } + const id = event.pathParameters?.scanTaskId; + + if (!id || !isUUID(id)) { + return NotFound; + } + await connectToDatabase(); + const scanTask = await ScanTask.findOne(id); + if (!scanTask || !scanTask.fargateTaskArn) { + return NotFound; + } + const ecsClient = await new ECSClient(); + const logs = await ecsClient.getLogs(scanTask.fargateTaskArn); + return { + statusCode: 200, + body: logs || '' + }; +}); diff --git a/backend/src/api/scans.ts b/backend/src/api/scans.ts new file mode 100644 index 00000000..33423b2d --- /dev/null +++ b/backend/src/api/scans.ts @@ -0,0 +1,522 @@ +import { + IsInt, + IsPositive, + IsString, + IsIn, + isUUID, + IsObject, + IsBoolean, + IsUUID, + IsArray +} from 'class-validator'; +import { + Scan, + connectToDatabase, + Organization, + ScanTask, + OrganizationTag +} from '../models'; +import { validateBody, wrapHandler, NotFound, Unauthorized } from './helpers'; +import { isGlobalWriteAdmin, isGlobalViewAdmin } from './auth'; +import LambdaClient from '../tasks/lambda-client'; + +interface ScanSchema { + [name: string]: { + // Scan type. Only Fargate is supported. + type: 'fargate'; + + description: string; + + // Whether scan is passive (not allowed to hit the domain). + isPassive: boolean; + + // Whether scan is global. Global scans run once for all organizations, as opposed + // to non-global scans, which are run for each organization. + global: boolean; + + // CPU and memory for the scan. See this page for more information: + // https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html + cpu?: string; + memory?: string; + + // A scan is "chunked" if its work is divided and run in parallel by multiple workers. + // To make a scan chunked, make sure it is a global scan and specify the "numChunks" variable, + // which corresponds to the number of workers that will be created to run the task. + // Chunked scans can only be run on scans whose implementation takes into account the + // chunkNumber and numChunks parameters specified in commandOptions. + numChunks?: number; + }; +} + +export const SCAN_SCHEMA: ScanSchema = { + vulnSync: { + type: 'fargate', + isPassive: true, + global: true, + description: 'Pull in vulnerability data from PEs Vulnerability database', + cpu: '1024', + memory: '8192' + }, + cveSync: { + type: 'fargate', + isPassive: true, + global: true, + description: + "Matches detected software versions to CVEs from NIST NVD and CISA's Known Exploited Vulnerabilities Catalog.", + cpu: '1024', + memory: '8192' + }, + testProxy: { + type: 'fargate', + isPassive: false, + global: true, + description: 'Not a real scan, used to test proxy' + }, + test: { + type: 'fargate', + isPassive: false, + global: true, + description: 'Not a real scan, used to test' + }, + censys: { + type: 'fargate', + isPassive: true, + global: false, + description: 'Passive discovery of subdomains from public certificates' + }, + amass: { + type: 'fargate', + isPassive: false, + global: false, + description: + 'Open source tool that integrates passive APIs and active subdomain enumeration in order to discover target subdomains' + }, + findomain: { + type: 'fargate', + isPassive: true, + global: false, + description: + 'Open source tool that integrates passive APIs in order to discover target subdomains' + }, + portscanner: { + type: 'fargate', + isPassive: false, + global: false, + description: 'Active port scan of common ports' + }, + wappalyzer: { + type: 'fargate', + isPassive: true, + global: false, + cpu: '1024', + memory: '4096', + description: + 'Open source tool that fingerprints web technologies based on HTTP responses' + }, + shodan: { + type: 'fargate', + isPassive: true, + global: false, + description: + 'Fetch passive port, banner, and vulnerability data from shodan', + cpu: '1024', + memory: '8192' + }, + sslyze: { + type: 'fargate', + isPassive: true, + global: false, + description: 'SSL certificate inspection' + }, + censysIpv4: { + type: 'fargate', + isPassive: true, + global: true, + cpu: '2048', + memory: '6144', + numChunks: 20, + description: 'Fetch passive port and banner data from censys ipv4 dataset' + }, + censysCertificates: { + type: 'fargate', + isPassive: true, + global: true, + cpu: '2048', + memory: '6144', + numChunks: 20, + description: 'Fetch TLS certificate data from censys certificates dataset' + }, + cve: { + type: 'fargate', + isPassive: true, + global: true, + cpu: '1024', + memory: '8192', + description: + "Matches detected software versions to CVEs from NIST NVD and CISA's Known Exploited Vulnerabilities Catalog." + }, + dotgov: { + type: 'fargate', + isPassive: true, + global: true, + description: + 'Create organizations based on root domains from the dotgov registrar dataset. All organizations are created with the "dotgov" tag and have a " (dotgov)" suffix added to their name.' + }, + searchSync: { + type: 'fargate', + isPassive: true, + global: true, + cpu: '1024', + memory: '4096', + description: + 'Syncs records with Elasticsearch so that they appear in search results.' + }, + intrigueIdent: { + type: 'fargate', + isPassive: true, + global: false, + cpu: '1024', + memory: '4096', + description: + 'Open source tool that fingerprints web technologies based on HTTP responses' + }, + webscraper: { + type: 'fargate', + isPassive: true, + global: true, + numChunks: 3, + cpu: '1024', + memory: '4096', + description: 'Scrapes all webpages on a given domain, respecting robots.txt' + }, + hibp: { + type: 'fargate', + isPassive: true, + global: false, + cpu: '2048', + memory: '16384', + description: + 'Finds emails that have appeared in breaches related to a given domain' + }, + lookingGlass: { + type: 'fargate', + isPassive: true, + global: false, + description: 'Finds vulnerabilities and malware from the LookingGlass API' + }, + dnstwist: { + type: 'fargate', + isPassive: true, + global: false, + cpu: '2048', + memory: '16384', + description: + 'Domain name permutation engine for detecting similar registered domains.' + }, + rootDomainSync: { + type: 'fargate', + isPassive: true, + global: false, + description: + 'Creates domains from root domains by doing a single DNS lookup for each root domain.' + }, + savedSearch: { + type: 'fargate', + isPassive: true, + global: true, + description: 'Performs saved searches to update their search results' + }, + trustymail: { + type: 'fargate', + isPassive: true, + global: false, + description: + 'Evaluates SPF/DMARC records and checks MX records for STARTTLS support' + } +}; + +class NewScan { + @IsString() + @IsIn(Object.keys(SCAN_SCHEMA)) + name: string = 'name'; + + @IsObject() + arguments: Object = {}; + + @IsInt() + @IsPositive() + frequency: number = 1; + + @IsBoolean() + isGranular: boolean; + + @IsBoolean() + isUserModifiable: boolean; + + @IsBoolean() + isSingleScan: boolean; + + @IsUUID('all', { each: true }) + organizations: string[]; + + @IsArray() + tags: OrganizationTag[]; +} + +/** + * @swagger + * + * /scans/{id}: + * delete: + * description: Delete a particular scan. + * parameters: + * - in: path + * name: id + * description: Scan id + * tags: + * - Scans + */ +export const del = wrapHandler(async (event) => { + if (!isGlobalWriteAdmin(event)) return Unauthorized; + await connectToDatabase(); + const id = event.pathParameters?.scanId; + if (!id || !isUUID(id)) { + return NotFound; + } + const result = await Scan.delete(id); + return { + statusCode: 200, + body: JSON.stringify(result) + }; +}); + +/** + * @swagger + * + * /scans/{id}: + * put: + * description: Update a particular scan. + * parameters: + * - in: path + * name: id + * description: Scan id + * tags: + * - Scans + */ +export const update = wrapHandler(async (event) => { + if (!isGlobalWriteAdmin(event)) return Unauthorized; + await connectToDatabase(); + const id = event.pathParameters?.scanId; + if (!id || !isUUID(id)) { + return NotFound; + } + const body = await validateBody(NewScan, event.body); + const scan = await Scan.findOne({ + id: id + }); + + if (scan) { + Scan.merge(scan, { + ...body, + organizations: body.organizations.map((id) => ({ id })), + tags: body.tags + }); + const res = await Scan.save(scan); + return { + statusCode: 200, + body: JSON.stringify(res) + }; + } + return NotFound; +}); + +/** + * @swagger + * + * /scans: + * post: + * description: Create a new scan. + * tags: + * - Scans + */ +export const create = wrapHandler(async (event) => { + if (!isGlobalWriteAdmin(event)) return Unauthorized; + await connectToDatabase(); + const body = await validateBody(NewScan, event.body); + const scan = await Scan.create({ + ...body, + organizations: body.organizations.map((id) => ({ id })), + tags: body.tags, + createdBy: { id: event.requestContext.authorizer!.id } + }); + const res = await Scan.save(scan); + return { + statusCode: 200, + body: JSON.stringify(res) + }; +}); + +/** + * @swagger + * + * /scans/{id}: + * get: + * description: Get information about a particular scan. + * parameters: + * - in: path + * name: id + * description: Scan id + * tags: + * - Scans + */ +export const get = wrapHandler(async (event) => { + if (!isGlobalViewAdmin(event)) return Unauthorized; + await connectToDatabase(); + const id = event.pathParameters?.scanId; + if (!id || !isUUID(id)) { + return NotFound; + } + const scan = await Scan.findOne( + { + id: id + }, + { + relations: ['organizations', 'tags'] + } + ); + + if (scan) { + const schema = SCAN_SCHEMA[scan.name]; + const organizations = await Organization.find(); + return { + statusCode: 200, + body: JSON.stringify({ + scan: scan, + schema: schema, + organizations: organizations.map((e) => ({ + name: e.name, + id: e.id + })) + }) + }; + } + return NotFound; +}); + +/** + * @swagger + * + * /scans: + * get: + * description: List scans. + * tags: + * - Scans + */ +export const list = wrapHandler(async (event) => { + // if (!isGlobalWriteAdmin(event)) return Unauthorized; + await connectToDatabase(); + const result = await Scan.find({ relations: ['tags'] }); + const organizations = await Organization.find(); + return { + statusCode: 200, + body: JSON.stringify({ + scans: result, + schema: SCAN_SCHEMA, + organizations: organizations.map((e) => ({ + name: e.name, + id: e.id + })) + }) + }; +}); + +/** + * @swagger + * + * /granularScans: + * get: + * description: List user-modifiable scans. These scans are retrieved by a standard organization admin user, who is then able to enable or disable these particular scans. + * tags: + * - Scans + */ +export const listGranular = wrapHandler(async (event) => { + await connectToDatabase(); + const scans = await Scan.find({ + select: ['id', 'name', 'isUserModifiable'], + where: { + isGranular: true, + isUserModifiable: true, + isSingleScan: false + } + }); + return { + statusCode: 200, + body: JSON.stringify({ + scans, + schema: SCAN_SCHEMA + }) + }; +}); + +/** + * @swagger + * + * /scheduler/invoke: + * post: + * description: Manually invoke scheduler to run scheduled scans. + * tags: + * - Scans + */ +export const invokeScheduler = wrapHandler(async (event) => { + if (!isGlobalWriteAdmin(event)) return Unauthorized; + const lambdaClient = new LambdaClient(); + const response = await lambdaClient.runCommand({ + name: `${process.env.SLS_LAMBDA_PREFIX!}-scheduler` + }); + if (response.StatusCode !== 202) { + return { + statusCode: 500, + body: 'Invocation failed.' + }; + } + return { + statusCode: 200, + body: '' + }; +}); + +/** + * @swagger + * + * /scans/{id}/run: + * post: + * description: Manually run a particular scan. + * parameters: + * - in: path + * name: id + * description: Scan id + * tags: + * - Scans + */ +export const runScan = wrapHandler(async (event) => { + if (!isGlobalWriteAdmin(event)) return Unauthorized; + await connectToDatabase(); + const id = event.pathParameters?.scanId; + if (!id || !isUUID(id)) { + return NotFound; + } + const scan = await Scan.findOne({ + id: id + }); + + if (scan) { + scan.manualRunPending = true; + + const res = await Scan.save(scan); + return { + statusCode: 200, + body: JSON.stringify(res) + }; + } + return NotFound; +}); diff --git a/backend/src/api/search.ts b/backend/src/api/search.ts new file mode 100644 index 00000000..5b258763 --- /dev/null +++ b/backend/src/api/search.ts @@ -0,0 +1,190 @@ +import { validateBody, wrapHandler } from './helpers'; +import { + getOrgMemberships, + getTagOrganizations, + isGlobalViewAdmin +} from './auth'; +import { buildRequest } from './search/buildRequest'; +import ESClient from '../tasks/es-client'; +import { IsArray, IsInt, IsOptional, IsString, IsUUID } from 'class-validator'; +import { Domain } from 'domain'; +import S3Client from '../tasks/s3-client'; +import * as Papa from 'papaparse'; + +class SearchBody { + @IsInt() + current: number; + + @IsInt() + resultsPerPage: number; + + @IsString() + searchTerm: string; + + @IsString() + sortDirection: string; + + @IsString() + sortField: string; + + @IsArray() + filters: { field: string; values: any[]; type: string }[]; + + @IsOptional() + @IsUUID() + organizationId?: string; + + @IsOptional() + @IsUUID() + tagId?: string; +} + +export const fetchAllResults = async ( + filters: Partial, + options: { + organizationIds: string[]; + matchAllOrganizations: boolean; + } +): Promise => { + const client = new ESClient(); + const RESULTS_PER_PAGE = 1000; + let results: Domain[] = []; + let current = 1; + while (true) { + const request = buildRequest( + { + ...filters, + current, + resultsPerPage: RESULTS_PER_PAGE + }, + options + ); + current += 1; + let searchResults; + try { + searchResults = await client.searchDomains(request); + } catch (e) { + console.error(e.meta.body.error); + continue; + } + if (searchResults.body.hits.hits.length === 0) break; + results = results.concat( + searchResults.body.hits.hits.map((res) => res._source as Domain) + ); + } + return results; +}; + +const getOptions = async ( + searchBody: SearchBody, + event +): Promise<{ + organizationIds: string[]; + matchAllOrganizations: boolean; +}> => { + let options; + if ( + searchBody.organizationId && + (getOrgMemberships(event).includes(searchBody.organizationId) || + isGlobalViewAdmin(event)) + ) { + // Search for a specific organization + options = { + organizationIds: [searchBody.organizationId], + matchAllOrganizations: false + }; + } else if (searchBody.tagId) { + options = { + organizationIds: await getTagOrganizations(event, searchBody.tagId), + matchAllOrganizations: false + }; + } else { + options = { + organizationIds: getOrgMemberships(event), + matchAllOrganizations: isGlobalViewAdmin(event) + }; + } + return options; +}; + +/** + * @swagger + * + * /search/export: + * post: + * description: Export a search result to a CSV file by specifying an elasticsearch query + * tags: + * - Search + */ +export const export_ = wrapHandler(async (event) => { + const searchBody = await validateBody(SearchBody, event.body); + const options = await getOptions(searchBody, event); + let results: any = await fetchAllResults(searchBody, options); + results = results.map((res) => { + res.organization = res.organization.name; + res.ports = res.services.map((service) => service.port).join(', '); + const products: { [key: string]: string } = {}; + for (const service of res.services) { + for (const product of service.products) { + if (product.name) + products[product.name.toLowerCase()] = + product.name + (product.version ? ` ${product.version}` : ''); + } + } + res.products = Object.values(products).join(', '); + return res; + }); + const client = new S3Client(); + const url = await client.saveCSV( + Papa.unparse({ + fields: [ + 'name', + 'ip', + 'id', + 'ports', + 'products', + 'createdAt', + 'updatedAt', + 'organization' + ], + data: results + }), + 'domains' + ); + + return { + statusCode: 200, + body: JSON.stringify({ + url + }) + }; +}); + +/** + * @swagger + * + * /search: + * post: + * description: Perform a search on all assets using Elasticsearch. + * tags: + * - Search + */ +export const search = wrapHandler(async (event) => { + const searchBody = await validateBody(SearchBody, event.body); + const options = await getOptions(searchBody, event); + const request = buildRequest(searchBody, options); + + const client = new ESClient(); + let searchResults; + try { + searchResults = await client.searchDomains(request); + } catch (e) { + console.error(e.meta.body.error); + throw e; + } + + return { + statusCode: 200, + body: JSON.stringify(searchResults.body) + }; +}); diff --git a/backend/src/api/search/buildRequest.ts b/backend/src/api/search/buildRequest.ts new file mode 100755 index 00000000..d9c72644 --- /dev/null +++ b/backend/src/api/search/buildRequest.ts @@ -0,0 +1,253 @@ +import buildRequestFilter from './buildRequestFilter'; + +function buildFrom(current, resultsPerPage) { + if (!current || !resultsPerPage) return; + return (current - 1) * resultsPerPage; +} + +const nonKeywordFields = new Set(['updatedAt', 'createdAt']); +function buildSort(sortDirection, sortField) { + if (!sortDirection || !sortField) { + return; + } + if (nonKeywordFields.has(sortField)) { + return [{ [sortField]: sortDirection }]; + } + return [{ [`${sortField}.keyword`]: sortDirection }]; +} + +function buildMatch(searchTerm) { + return searchTerm + ? { + query_string: { + query: searchTerm, + analyze_wildcard: true, + fields: ['*'] + } + } + : { match_all: {} }; +} + +function buildChildMatch(searchTerm) { + return searchTerm + ? { + query_string: { + query: searchTerm, + analyze_wildcard: true, + fields: ['*'] + } + } + : { match_all: {} }; +} + +/* + + Converts current application state to an Elasticsearch request. + + When implementing an onSearch Handler in Search UI, the handler needs to take the + current state of the application and convert it to an API request. + + For instance, there is a "current" property in the application state that you receive + in this handler. The "current" property represents the current page in pagination. This + method converts our "current" property to Elasticsearch's "from" parameter. + + This "current" property is a "page" offset, while Elasticsearch's "from" parameter + is a "item" offset. In other words, for a set of 100 results and a page size + of 10, if our "current" value is "4", then the equivalent Elasticsearch "from" value + would be "40". This method does that conversion. + + We then do similar things for searchTerm, filters, sort, etc. +*/ +export function buildRequest( + state, + options: { organizationIds: string[]; matchAllOrganizations: boolean } +) { + const { + current, + filters, + resultsPerPage, + searchTerm, + sortDirection, + sortField + } = state; + + const sort = buildSort(sortDirection, sortField); + const match = buildMatch(searchTerm); + const size = resultsPerPage; + const from = buildFrom(current, resultsPerPage); + const filter = buildRequestFilter(filters); + + let query: any = { + bool: { + must: [ + { + match: { + parent_join: 'domain' + } + }, + { + bool: { + should: [ + match, + { + has_child: { + type: 'webpage', + query: buildChildMatch(searchTerm), + inner_hits: { + _source: ['webpage_url'], + highlight: { + fragment_size: 50, + number_of_fragments: 3, + fields: { + webpage_body: {} + } + } + } + } + } + ] + } + } + ], + ...(filter && { filter }) + } + }; + if (!options.matchAllOrganizations) { + query = { + bool: { + must: [ + { + terms: { + 'organization.id.keyword': options.organizationIds + } + }, + query + ] + } + }; + } + + const body = { + // Static query Configuration + // -------------------------- + // https://www.elastic.co/guide/en/elasticsearch/reference/7.x/search-request-highlighting.html + highlight: { + fragment_size: 200, + number_of_fragments: 1, + fields: { + name: {} + } + }, + //https://www.elastic.co/guide/en/elasticsearch/reference/7.x/search-request-source-filtering.html#search-request-source-filtering + // _source: ["id", "nps_link", "title", "description"], + aggs: { + name: { terms: { field: 'name.keyword' } }, + fromRootDomain: { + terms: { field: 'fromRootDomain.keyword' } + }, + organization: { + terms: { field: 'organization.name.keyword' } + }, + services: { + nested: { + path: 'services' + }, + aggs: { + port: { + terms: { + field: 'services.port' + } + }, + name: { + terms: { + field: 'services.service.keyword' + } + }, + // TODO: products type nested + products: { + nested: { + path: 'products' + }, + aggs: { + cpe: { + terms: { + field: 'services.products.cpe.keyword' + } + } + } + } + } + }, + vulnerabilities: { + nested: { + path: 'vulnerabilities' + }, + aggs: { + severity: { + terms: { + field: 'vulnerabilities.severity.keyword' + } + }, + cve: { + terms: { + field: 'vulnerabilities.cve.keyword' + } + } + } + } + // visitors: { + // range: { + // field: "visitors", + // ranges: [ + // { from: 0.0, to: 10000.0, key: "0 - 10000" }, + // { from: 10001.0, to: 100000.0, key: "10001 - 100000" }, + // { from: 100001.0, to: 500000.0, key: "100001 - 500000" }, + // { from: 500001.0, to: 1000000.0, key: "500001 - 1000000" }, + // { from: 1000001.0, to: 5000000.0, key: "1000001 - 5000000" }, + // { from: 5000001.0, to: 10000000.0, key: "5000001 - 10000000" }, + // { from: 10000001.0, key: "10000001+" } + // ] + // } + // }, + // acres: { + // range: { + // field: "acres", + // ranges: [ + // { from: -1.0, key: "Any" }, + // { from: 0.0, to: 1000.0, key: "Small" }, + // { from: 1001.0, to: 100000.0, key: "Medium" }, + // { from: 100001.0, key: "Large" } + // ] + // } + // } + }, + + // Dynamic values based on current Search UI state + // -------------------------- + // https://www.elastic.co/guide/en/elasticsearch/reference/7.x/full-text-queries.html + query, + // https://www.elastic.co/guide/en/elasticsearch/reference/7.x/search-request-sort.html + ...(sort && { sort }), + // https://www.elastic.co/guide/en/elasticsearch/reference/7.x/search-request-from-size.html + ...(size && { size }), + ...(from && { from }) + }; + return body; +} + +export function buildAutocompleteRequest(state) { + const { searchTerm } = state; + + const body = { + suggest: { + 'main-suggest': { + prefix: searchTerm, + completion: { + field: 'suggest' + } + } + } + }; + + return body; +} diff --git a/backend/src/api/search/buildRequestFilter.ts b/backend/src/api/search/buildRequestFilter.ts new file mode 100755 index 00000000..fec9d5e9 --- /dev/null +++ b/backend/src/api/search/buildRequestFilter.ts @@ -0,0 +1,103 @@ +function getTermFilterValue(field, fieldValue) { + // We do this because if the value is a boolean value, we need to apply + // our filter differently. We're also only storing the string representation + // of the boolean value, so we need to convert it to a Boolean. + + // TODO We need better approach for boolean values + if (fieldValue === 'false' || fieldValue === 'true') { + return { [field]: fieldValue === 'true' }; + } + if (typeof fieldValue === 'number') { + return { [field]: fieldValue }; + } + if (field === 'name') { + // If name does not have wildcards, make it wildcard by default + if (fieldValue !== '' && !fieldValue.includes('*')) { + fieldValue = '*' + fieldValue + '*'; + } + } + return { [`${field}.keyword`]: fieldValue }; +} + +function getTermFilter(filter) { + const fieldPath = filter.field.split('.'); + let searchType = 'term'; + let search = {}; + if (['name', 'ip'].includes(filter.field)) { + searchType = 'wildcard'; + } + if (filter.field === 'services.port') { + searchType = 'match'; + } + + if (filter.type === 'any') { + search = { + bool: { + should: filter.values.map((filterValue) => ({ + [searchType]: getTermFilterValue(filter.field, filterValue) + })), + minimum_should_match: 1 + } + }; + } else if (filter.type === 'all') { + search = { + bool: { + filter: filter.values.map((filterValue) => ({ + [searchType]: getTermFilterValue(filter.field, filterValue) + })) + } + }; + } + if (fieldPath.length > 1) { + return { + nested: { + path: fieldPath[0], + query: search + } + }; + } else { + return search; + } +} + +// function getRangeFilter(filter) { +// if (filter.type === 'any') { +// return { +// bool: { +// should: filter.values.map(filterValue => ({ +// range: { +// [filter.field]: { +// ...(filterValue.to && { lt: filterValue.to }), +// ...(filterValue.to && { gt: filterValue.from }) +// } +// } +// })), +// minimum_should_match: 1 +// } +// }; +// } else if (filter.type === 'all') { +// return { +// bool: { +// filter: filter.values.map(filterValue => ({ +// range: { +// [filter.field]: { +// ...(filterValue.to && { lt: filterValue.to }), +// ...(filterValue.to && { gt: filterValue.from }) +// } +// } +// })) +// } +// }; +// } +// } + +export default function buildRequestFilter(filters) { + if (!filters) return; + + filters = filters.reduce((acc, filter) => { + return [...acc, getTermFilter(filter)]; + }, []); + + if (filters.length < 1) return; + return filters; +} diff --git a/backend/src/api/stats.ts b/backend/src/api/stats.ts new file mode 100644 index 00000000..6b1c1f82 --- /dev/null +++ b/backend/src/api/stats.ts @@ -0,0 +1,198 @@ +import { ValidateNested, IsOptional, IsObject, IsUUID } from 'class-validator'; +import { Type } from 'class-transformer'; +import { Domain, connectToDatabase, Vulnerability, Service } from '../models'; +import { validateBody, wrapHandler } from './helpers'; +import { SelectQueryBuilder } from 'typeorm'; +import { + isGlobalViewAdmin, + getOrgMemberships, + getTagOrganizations +} from './auth'; + +interface Point { + id: string; + label: string; + value: number; +} + +interface Stats { + domains: { + services: Point[]; + ports: Point[]; + numVulnerabilities: Point[]; + total: number; + }; + vulnerabilities: { + severity: Point[]; + byOrg: Point[]; + latestVulnerabilities: Vulnerability[]; + mostCommonVulnerabilities: Vulnerability[]; + }; +} + +class StatsFilters { + @IsUUID() + @IsOptional() + organization?: string; + + @IsUUID() + @IsOptional() + tag?: string; +} + +class StatsSearch { + @Type(() => StatsFilters) + @ValidateNested() + @IsObject() + @IsOptional() + filters?: StatsFilters; +} + +/** + * @swagger + * + * /stats: + * get: + * description: Get stats. + * tags: + * - Stats + */ +export const get = wrapHandler(async (event) => { + await connectToDatabase(); + const search = await validateBody(StatsSearch, event.body); + + const filterQuery = async ( + qs: SelectQueryBuilder + ): Promise> => { + if (!isGlobalViewAdmin(event)) { + qs.andWhere('domain."organizationId" IN (:...orgs)', { + orgs: getOrgMemberships(event) + }); + } + if (search.filters?.organization) { + qs.andWhere('domain."organizationId" = :org', { + org: search.filters?.organization + }); + } + if (search.filters?.tag) { + qs.andWhere('domain."organizationId" IN (:...orgs)', { + orgs: await getTagOrganizations(event, search.filters.tag) + }); + } + + return qs.cache(15 * 60 * 1000); // 15 minutes + }; + + const performQuery = async (qs: SelectQueryBuilder) => { + qs = await filterQuery(qs); + return (await qs.getRawMany()).map((e) => ({ + id: String(e.id), + value: Number(e.value), + label: String(e.id) + })) as { id: string; value: number; label: string }[]; + }; + + const MAX_RESULTS = 50; + + const services = await performQuery( + Service.createQueryBuilder('service') + .innerJoinAndSelect('service.domain', 'domain') + .where('service IS NOT NULL') + .select('service as id, count(*) as value') + .groupBy('service') + .orderBy('value', 'DESC') + ); + const ports = await performQuery( + Domain.createQueryBuilder('domain') + .innerJoinAndSelect('domain.services', 'services') + .select('services.port as id, count(*) as value') + .groupBy('services.port') + .orderBy('value', 'DESC') + ); + const numVulnerabilities = await performQuery( + Domain.createQueryBuilder('domain') + .innerJoinAndSelect('domain.vulnerabilities', 'vulnerabilities') + .andWhere("vulnerabilities.state = 'open'") + .select( + "CONCAT(domain.name, '|', vulnerabilities.severity) as id, count(*) as value" + ) + .groupBy('vulnerabilities.severity, domain.id') + .orderBy('value', 'DESC') + .limit(MAX_RESULTS) + ); + const latestVulnerabilities = await ( + await filterQuery( + Vulnerability.createQueryBuilder('vulnerability') + .leftJoinAndSelect('vulnerability.domain', 'domain') + .andWhere("vulnerability.state = 'open'") + .orderBy('vulnerability.createdAt', 'ASC') + .limit(MAX_RESULTS) + ) + ).getMany(); + const mostCommonVulnerabilities = await ( + await filterQuery( + Vulnerability.createQueryBuilder('vulnerability') + .leftJoinAndSelect('vulnerability.domain', 'domain') + .andWhere("vulnerability.state = 'open'") + .select( + 'vulnerability.title, vulnerability.description, vulnerability.severity, count(*) as count' + ) + .groupBy( + 'vulnerability.title, vulnerability.description, vulnerability.severity' + ) + .orderBy('count', 'DESC') + .limit(MAX_RESULTS) + ) + ).getRawMany(); + const severity = await performQuery( + Vulnerability.createQueryBuilder('vulnerability') + .leftJoinAndSelect('vulnerability.domain', 'domain') + .andWhere("vulnerability.state = 'open'") + .select('vulnerability.severity as id, count(*) as value') + .groupBy('vulnerability.severity') + .orderBy('vulnerability.severity', 'ASC') + ); + const total = await performQuery( + Domain.createQueryBuilder('domain').select('count(*) as value') + ); + const byOrg = ( + await ( + await filterQuery( + Domain.createQueryBuilder('domain') + .innerJoinAndSelect('domain.organization', 'organization') + .innerJoinAndSelect('domain.vulnerabilities', 'vulnerabilities') + .andWhere("vulnerabilities.state = 'open'") + .select( + 'organization.name as id, organization.id as "orgId", count(*) as value' + ) + .groupBy('organization.name, organization.id') + .orderBy('value', 'DESC') + ) + ).getRawMany() + ).map((e) => ({ + id: String(e.id), + orgId: String(e.orgId), + value: Number(e.value), + label: String(e.id) + })); + const result: Stats = { + domains: { + services, + ports: ports, + numVulnerabilities: numVulnerabilities, + total: total[0].value + }, + vulnerabilities: { + severity, + byOrg, + latestVulnerabilities, + mostCommonVulnerabilities + } + }; + return { + statusCode: 200, + body: JSON.stringify({ + result + }) + }; +}); diff --git a/backend/src/api/users.ts b/backend/src/api/users.ts new file mode 100644 index 00000000..836b42a5 --- /dev/null +++ b/backend/src/api/users.ts @@ -0,0 +1,954 @@ +import { + IsString, + isUUID, + IsBoolean, + IsOptional, + IsEmail, + IsEnum, + IsInt, + IsIn, + IsNumber, + IsObject, + IsPositive, + ValidateNested, + IsUUID +} from 'class-validator'; +import { User, connectToDatabase, Role, Organization } from '../models'; +import { + validateBody, + wrapHandler, + NotFound, + Unauthorized, + sendEmail, + sendUserRegistrationEmail, + sendRegistrationApprovedEmail, + sendRegistrationDeniedEmail +} from './helpers'; +import { UserType } from '../models/user'; +import { + getUserId, + canAccessUser, + isGlobalViewAdmin, + isRegionalAdmin, + isOrgAdmin, + isGlobalWriteAdmin +} from './auth'; +import { Type, plainToClass } from 'class-transformer'; +import { IsNull } from 'typeorm'; +import { create } from './organizations'; + +class UserSearch { + @IsInt() + @IsPositive() + page: number = 1; + + @IsString() + @IsIn([ + 'fullName', + 'firstName', + 'lastName', + 'email', + 'name', + 'userType', + 'dateAcceptedTerms', + 'lastLoggedIn', + 'acceptedTermsVersion', + 'state', + 'regionId' + ]) + @IsOptional() + sort: string = 'fullName'; + + @IsString() + @IsIn(['ASC', 'DESC']) + order: 'ASC' | 'DESC' = 'DESC'; + + @IsInt() + @IsOptional() + // If set to -1, returns all results. + pageSize?: number; + + @IsString() + @IsOptional() + @IsIn(['title']) + groupBy?: 'title'; + + async getResults(event): Promise<[User[], number]> { + const pageSize = this.pageSize || 25; + const sort = this.sort === 'name' ? 'user.fullName' : 'user.' + this.sort; + const qs = User.createQueryBuilder('user') + .leftJoinAndSelect('user.roles', 'roles') // Include the roles relation + .leftJoinAndSelect('roles.organization', 'organization') // Include the organization relation + .orderBy(sort, this.order); + const result = await qs.getMany(); + const count = await qs.getCount(); + return [result, count]; + } +} + +// New User +class NewUser { + @IsString() + firstName: string; + + @IsString() + lastName: string; + + @IsString() + @IsOptional() + state: string; + + @IsString() + @IsOptional() + regionId: string; + + @IsEmail() + @IsOptional() + email: string; + + @IsString() + @IsOptional() + organization: string; + + @IsBoolean() + @IsOptional() + organizationAdmin: string; + + @IsEnum(UserType) + @IsOptional() + userType: UserType; +} + +class UpdateUser { + @IsString() + @IsOptional() + state: string; + + @IsString() + @IsOptional() + regionId: string; + + @IsBoolean() + @IsOptional() + invitePending: boolean; + + @IsEnum(UserType) + @IsOptional() + userType: UserType; + + // @IsString() + @IsEnum(Organization) + @IsOptional() + organization: Organization; + + @IsString() + @IsOptional() + role: string; +} + +const REGION_STATE_MAP = { + Connecticut: '1', + Maine: '1', + Massachusetts: '1', + 'New Hampshire': '1', + 'Rhode Island': '1', + Vermont: '1', + 'New Jersey': '2', + 'New York': '2', + 'Puerto Rico': '2', + 'Virgin Islands': '2', + Delaware: '3', + Maryland: '3', + Pennsylvania: '3', + Virginia: '3', + 'District of Columbia': '3', + 'West Virginia': '3', + Alabama: '4', + Florida: '4', + Georgia: '4', + Kentucky: '4', + Mississippi: '4', + 'North Carolina': '4', + 'South Carolina': '4', + Tennessee: '4', + Illinois: '5', + Indiana: '5', + Michigan: '5', + Minnesota: '5', + Ohio: '5', + Wisconsin: '5', + Arkansas: '6', + Louisiana: '6', + 'New Mexico': '6', + Oklahoma: '6', + Texas: '6', + Iowa: '7', + Kansas: '7', + Missouri: '7', + Nebraska: '7', + Colorado: '8', + Montana: '8', + 'North Dakota': '8', + 'South Dakota': '8', + Utah: '8', + Wyoming: '8', + Arizona: '9', + California: '9', + Hawaii: '9', + Nevada: '9', + Guam: '9', + 'American Samoa': '9', + 'Commonwealth Northern Mariana Islands': '9', + 'Republic of Marshall Islands': '9', + 'Federal States of Micronesia': '9', + Alaska: '10', + Idaho: '10', + Oregon: '10', + Washington: '10' +}; + +/** + * @swagger + * + * /users/{id}: + * delete: + * description: Delete a particular user. + * parameters: + * - in: path + * name: id + * description: User id + * tags: + * - Users + */ +export const del = wrapHandler(async (event) => { + if (!isGlobalWriteAdmin(event)) return Unauthorized; + await connectToDatabase(); + const id = event.pathParameters?.userId; + if (!id || !isUUID(id)) { + return NotFound; + } + const result = await User.delete(id); + return { + statusCode: 200, + body: JSON.stringify(result) + }; +}); + +/** + * @swagger + * + * /users/{id}: + * put: + * description: Update a particular user. + * parameters: + * - in: path + * name: id + * description: User id + * tags: + * - Users + */ +export const update = wrapHandler(async (event) => { + if (!canAccessUser(event, event.pathParameters?.userId)) return Unauthorized; + await connectToDatabase(); + const id = event.pathParameters?.userId; + if (!id || !isUUID(id)) { + return NotFound; + } + const body = await validateBody(NewUser, event.body); + if (!isGlobalWriteAdmin(event) && body.userType) { + // Non-global admins can't set userType + return Unauthorized; + } + const user = await User.findOne( + { + id: id + }, + { + relations: ['roles', 'roles.organization'] + } + ); + if (user) { + console.log(JSON.stringify({ original_user: user })); + user.firstName = body.firstName ?? user.firstName; + user.lastName = body.lastName ?? user.lastName; + user.fullName = user.firstName + ' ' + user.lastName; + user.userType = body.userType ?? user.userType; + await User.save(user); + console.log(JSON.stringify({ updated_user: user })); + return { + statusCode: 200, + body: JSON.stringify(user) + }; + } + return NotFound; +}); + +const sendInviteEmail = async (email: string, organization?: Organization) => { + const staging = process.env.NODE_ENV !== 'production'; + + await sendEmail( + email, + 'Crossfeed Invitation', + `Hi there, + +You've been invited to join ${ + organization?.name ? `the ${organization?.name} organization on ` : '' + }Crossfeed. To accept the invitation and start using Crossfeed, sign on at ${ + process.env.FRONTEND_DOMAIN + }/signup. + +Crossfeed access instructions: + +1. Visit ${process.env.FRONTEND_DOMAIN}/signup. +2. Select "Create Account." +3. Enter your email address and a new password for Crossfeed. +4. A confirmation code will be sent to your email. Enter this code when you receive it. +5. You will be prompted to enable MFA. Scan the QR code with an authenticator app on your phone, such as Microsoft Authenticator. Enter the MFA code you see after scanning. +6. After configuring your account, you will be redirected to Crossfeed. + +For more information on using Crossfeed, view the Crossfeed user guide at https://docs.crossfeed.cyber.dhs.gov/user-guide/quickstart/. + +If you encounter any difficulties, please feel free to reply to this email (or send an email to ${ + process.env.CROSSFEED_SUPPORT_EMAIL_REPLYTO + }).` + ); +}; + +/** + * @swagger + * + * /users: + * post: + * description: Invite a new user. + * tags: + * - Users + */ +export const invite = wrapHandler(async (event) => { + const body = await validateBody(NewUser, event.body); + // Invoker must be either an organization or global admin + if (body.organization) { + if (!isOrgAdmin(event, body.organization)) return Unauthorized; + } else { + if (!isGlobalWriteAdmin(event)) return Unauthorized; + } + if (!isGlobalWriteAdmin(event) && body.userType) { + // Non-global admins can't set userType + return Unauthorized; + } + + await connectToDatabase(); + + body.email = body.email.toLowerCase(); + + if (body.state) { + body.regionId = REGION_STATE_MAP[body.state]; + } + + // Check if user already exists + let user = await User.findOne({ + email: body.email + }); + + let organization: Organization | undefined; + + if (body.organization) { + organization = await Organization.findOne(body.organization); + } + + if (!user) { + user = await User.create({ + invitePending: true, + ...body + }); + await User.save(user); + if (process.env.IS_LOCAL!) { + console.log('Cannot send invite email while running on local.'); + } else { + await sendInviteEmail(user.email, organization); + } + } else if (!user.firstName && !user.lastName) { + // Only set the user first name and last name the first time the user is invited. + user.firstName = body.firstName; + user.lastName = body.lastName; + await User.save(user); + } + // Always update the userType, if specified in the request. + if (body.userType) { + user.userType = body.userType; + await User.save(user); + } + + if (organization) { + // Create approved role if organization supplied + await Role.createQueryBuilder() + .insert() + .values({ + user: user, + organization: { id: body.organization }, + approved: true, + createdBy: { id: event.requestContext.authorizer!.id }, + approvedBy: { id: event.requestContext.authorizer!.id }, + role: body.organizationAdmin ? 'admin' : 'user' + }) + .onConflict( + ` + ("userId", "organizationId") DO UPDATE + SET "role" = excluded."role", + "approved" = excluded."approved", + "approvedById" = excluded."approvedById" + ` + ) + .execute(); + } + + const updated = await User.findOne( + { + id: user.id + }, + { + relations: ['roles', 'roles.organization'] + } + ); + return { + statusCode: 200, + body: JSON.stringify(updated) + }; +}); + +/** + * @swagger + * + * /users/me: + * get: + * description: Get information about the current user. + * tags: + * - Users + */ +export const me = wrapHandler(async (event) => { + await connectToDatabase(); + const result = await User.findOne(getUserId(event), { + relations: ['roles', 'roles.organization', 'apiKeys'] + }); + return { + statusCode: 200, + body: JSON.stringify(result) + }; +}); + +/** + * @swagger + * + * /users/me/acceptTerms: + * post: + * description: Accept the latest terms of service. + * tags: + * - Users + */ +export const acceptTerms = wrapHandler(async (event) => { + await connectToDatabase(); + const user = await User.findOne(getUserId(event), { + relations: ['roles', 'roles.organization'] + }); + if (!user || !event.body) { + return NotFound; + } + user.dateAcceptedTerms = new Date(); + user.acceptedTermsVersion = JSON.parse(event.body).version; + await user.save(); + return { + statusCode: 200, + body: JSON.stringify(user) + }; +}); + +/** + * @swagger + * + * /users: + * get: + * description: List users. + * tags: + * - Users + * + */ +export const list = wrapHandler(async (event) => { + if (!isGlobalViewAdmin(event)) return Unauthorized; + await connectToDatabase(); + const result = await User.find({ + relations: ['roles', 'roles.organization'] + }); + return { + statusCode: 200, + body: JSON.stringify(result) + }; +}); + +/** + * @swagger + * + * /users/search: + * post: + * description: List users. + * tags: + * - Users + */ +export const search = wrapHandler(async (event) => { + if (!isGlobalViewAdmin(event)) return Unauthorized; + await connectToDatabase(true); + const search = await validateBody(UserSearch, event.body); + const [result, count] = await search.getResults(event); + return { + statusCode: 200, + body: JSON.stringify({ result, count }) + }; +}); + +/** + * @swagger + * + * /users/regionId/{regionId}: + * get: + * description: List users with specific regionId. + * parameters: + * - in: path + * name: regionId + * description: User regionId + * tags: + * - Users + */ +export const getByRegionId = wrapHandler(async (event) => { + if (!isRegionalAdmin(event)) return Unauthorized; + const regionId = event.pathParameters?.regionId; + await connectToDatabase(); + const result = await User.find({ + where: { regionId: regionId }, + relations: ['roles', 'roles.organization'] + }); + if (result) { + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } + return NotFound; +}); + +/** + * @swagger + * + * /users/state/{state}: + * get: + * description: List users with specific state. + * parameters: + * - in: path + * name: state + * description: User state + * tags: + * - Users + */ +export const getByState = wrapHandler(async (event) => { + if (!isRegionalAdmin(event)) return Unauthorized; + const state = event.pathParameters?.state; + await connectToDatabase(); + const result = await User.find({ + where: { state: state }, + relations: ['roles', 'roles.organization'] + }); + if (result) { + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } + return NotFound; +}); + +/** + * @swagger + * + * /users/register: + * post: + * description: New user registration. + * tags: + * - Users + */ +export const register = wrapHandler(async (event) => { + const body = await validateBody(NewUser, event.body); + const newUser = { + firstName: body.firstName, + lastName: body.lastName, + email: body.email.toLowerCase(), + userType: UserType.STANDARD, + state: body.state, + regionId: REGION_STATE_MAP[body.state], + invitePending: true + }; + console.log(JSON.stringify(newUser)); + + await connectToDatabase(); + + // Check if user already exists + const userCheck = await User.findOne({ + where: { email: newUser.email } + }); + + let id = ''; + // Create if user does not exist + if (userCheck) { + console.log('User already exists.'); + return { + statusCode: 422, + body: 'User email already exists. Registration failed.' + }; + } + + const createdUser = await User.create(newUser); + await User.save(createdUser); + id = createdUser.id; + const savedUser = await User.findOne(id, { + relations: ['roles', 'roles.organization'] + }); + if (!savedUser) { + return NotFound; + } + // Send email notification + await sendUserRegistrationEmail( + savedUser.email, + 'Crossfeed Registration Pending', + savedUser.firstName, + savedUser.lastName, + 'crossfeed_registration_notification.html' + ); + + return { + statusCode: 200, + body: JSON.stringify(savedUser) + }; +}); + +/** + * @swagger + * + * /users/{id}/register/approve: + * put: + * description: Approve a particular users registration. + * parameters: + * - in: path + * name: id + * description: User id + * tags: + * - Users + */ +export const registrationApproval = wrapHandler(async (event) => { + // Get the user id from the path + const userId = event.pathParameters?.userId; + + // Confirm that the id is a valid UUID + if (!userId || !isUUID(userId)) { + return NotFound; + } + + // Connect to the database + await connectToDatabase(); + + const user = await User.findOne(userId); + if (!user) { + return NotFound; + } + + // Send email notification + await sendRegistrationApprovedEmail( + user.email, + 'Crossfeed Registration Approved', + user.firstName, + user.lastName, + 'crossfeed_approval_notification.html' + ); + + // TODO: Handle Response Output + return { + statusCode: 200, + body: 'User registration approved.' + }; +}); + +/** + * @swagger + * + * /users/{id}/register/deny: + * put: + * description: Deny a particular users registration. + * parameters: + * - in: path + * name: id + * description: User id + * tags: + * - Users + */ +export const registrationDenial = wrapHandler(async (event) => { + // Get the user id from the path + const userId = event.pathParameters?.userId; + + // Confirm that the id is a valid UUID + if (!userId || !isUUID(userId)) { + return NotFound; + } + + // Connect to the database + await connectToDatabase(); + + const user = await User.findOne(userId); + if (!user) { + return NotFound; + } + + await sendRegistrationDeniedEmail( + user.email, + 'Crossfeed Registration Denied', + user.firstName, + user.lastName, + 'crossfeed_denial_notification.html' + ); + + // TODO: Handle Response Output + return { + statusCode: 200, + body: 'User registration denied.' + }; +}); + +//***************// +// V2 Endpoints // +//***************// + +/** + * @swagger + * + * /v2/users: + * get: + * description: List all users with query parameters. + * tags: + * - Users + * parameters: + * - in: query + * name: state + * required: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: regionId + * required: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: invitePending + * required: false + * schema: + * type: array + * items: + * type: string + * + */ +export const getAllV2 = wrapHandler(async (event) => { + if (!isRegionalAdmin(event)) return Unauthorized; + + const filterParams = {}; + + if (event.query && event.query.state) { + filterParams['state'] = event.query.state; + } + if (event.query && event.query.regionId) { + filterParams['regionId'] = event.query.regionId; + } + if (event.query && event.query.invitePending) { + filterParams['invitePending'] = event.query.invitePending; + } + + await connectToDatabase(); + if (Object.entries(filterParams).length === 0) { + const result = await User.find({ + relations: ['roles', 'roles.organization'] + }); + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } else { + const result = await User.find({ + where: filterParams, + relations: ['roles', 'roles.organization'] + }); + return { + statusCode: 200, + body: JSON.stringify(result) + }; + } +}); + +/** + * @swagger + * + * /v2/users: + * post: + * description: Create a new user. + * tags: + * - Users + */ +export const inviteV2 = wrapHandler(async (event) => { + const body = await validateBody(NewUser, event.body); + // Invoker must be either an organization or global admin + if (body.organization) { + if (!isOrgAdmin(event, body.organization)) return Unauthorized; + } else { + if (!isGlobalWriteAdmin(event)) return Unauthorized; + } + if (!isGlobalWriteAdmin(event) && body.userType) { + // Non-global admins can't set userType + return Unauthorized; + } + + await connectToDatabase(); + + body.email = body.email.toLowerCase(); + const userEmail = body.email.toLowerCase(); + + const sendRegisterEmail = async (email: string) => { + const staging = process.env.NODE_ENV !== 'production'; + + await sendEmail( + email, + 'Crossfeed Registration', + `Hello, + Your Crossfeed registration is under review. + You will receive an email when your registration is approved. + + Thank you!` + ); + }; + + // Check if user already exists + let user = await User.findOne({ + email: body.email + }); + + // Handle Organization assignment if provided + let organization: Organization | undefined; + if (body.organization) { + organization = await Organization.findOne(body.organization); + } + + // Create user if not found + if (!user) { + // Create User object + user = await User.create({ + invitePending: true, + ...body + }); + // Save User to DB + await User.save(user); + + // Send Notification Email to user + await sendRegisterEmail(userEmail); + } else if (!user.firstName && !user.lastName) { + // Only set the user first name and last name the first time the user is invited. + user.firstName = body.firstName; + user.lastName = body.lastName; + // Save User to DB + await User.save(user); + } + + // Always update the userType, if specified in the request. + if (body.userType) { + user.userType = body.userType; + await User.save(user); + } + + if (organization) { + // Create approved role if organization supplied + await Role.createQueryBuilder() + .insert() + .values({ + user: user, + organization: { id: body.organization }, + approved: true, + createdBy: { id: event.requestContext.authorizer!.id }, + approvedBy: { id: event.requestContext.authorizer!.id }, + role: body.organizationAdmin ? 'admin' : 'user' + }) + .onConflict( + ` + ("userId", "organizationId") DO UPDATE + SET "role" = excluded."role", + "approved" = excluded."approved", + "approvedById" = excluded."approvedById" + ` + ) + .execute(); + } + + const updated = await User.findOne( + { + id: user.id + }, + { + relations: ['roles', 'roles.organization'] + } + ); + return { + statusCode: 200, + body: JSON.stringify(updated) + }; +}); + +/** + * @swagger + * + * /v2/users/{id}: + * put: + * description: Update a particular user. + * parameters: + * - in: path + * name: id + * description: User id + * tags: + * - Users + */ +export const updateV2 = wrapHandler(async (event) => { + // Get the user id from the path + const userId = event.pathParameters?.userId; + + // Confirm that the id is a valid UUID + if (!userId || !isUUID(userId)) { + return NotFound; + } + + // Validate the body + const body = await validateBody(UpdateUser, event.body); + + // Connect to the database + await connectToDatabase(); + + const user = await User.findOne(userId); + if (!user) { + return NotFound; + } + + // Update the user + const updatedResp = await User.update(userId, body); + + // Handle response + if (updatedResp) { + const updatedUser = await User.findOne(userId, { + relations: ['roles', 'roles.organization'] + }); + return { + statusCode: 200, + body: JSON.stringify(updatedUser) + }; + } + return NotFound; +}); diff --git a/backend/src/api/vulnerabilities.ts b/backend/src/api/vulnerabilities.ts new file mode 100644 index 00000000..218df49b --- /dev/null +++ b/backend/src/api/vulnerabilities.ts @@ -0,0 +1,379 @@ +import { + IsInt, + IsPositive, + IsString, + IsIn, + ValidateNested, + isUUID, + IsOptional, + IsObject, + IsUUID, + IsBoolean +} from 'class-validator'; +import { Type } from 'class-transformer'; +import { Vulnerability, connectToDatabase, User } from '../models'; +import { validateBody, wrapHandler, NotFound } from './helpers'; +import { Column, SelectQueryBuilder } from 'typeorm'; +import { + getOrgMemberships, + getTagOrganizations, + isGlobalViewAdmin, + isGlobalWriteAdmin +} from './auth'; +import S3Client from '../tasks/s3-client'; +import * as Papa from 'papaparse'; + +const PAGE_SIZE = parseInt(process.env.PAGE_SIZE ?? '') || 25; + +class VulnerabilityFilters { + @IsUUID() + @IsOptional() + id?: string; + + @IsString() + @IsOptional() + title?: string; + + @IsString() + @IsOptional() + domain?: string; + + @IsString() + @IsOptional() + severity?: string; + + @IsString() + @IsOptional() + cpe?: string; + + @IsString() + @IsOptional() + state?: string; + + @IsString() + @IsOptional() + substate?: string; + + @IsUUID() + @IsOptional() + organization?: string; + + @IsUUID() + @IsOptional() + tag?: string; + + @IsBoolean() + @IsOptional() + isKev?: boolean; +} + +class VulnerabilitySearch { + @IsInt() + @IsPositive() + page: number = 1; + + @IsString() + @IsIn([ + 'title', + 'createdAt', + 'severity', + 'cvss', + 'state', + 'createdAt', + 'domain' + ]) + @IsOptional() + sort: string = 'createdAt'; + + @IsString() + @IsIn(['ASC', 'DESC']) + order: 'ASC' | 'DESC' = 'DESC'; + + @Type(() => VulnerabilityFilters) + @ValidateNested() + @IsObject() + @IsOptional() + filters?: VulnerabilityFilters; + + @IsInt() + @IsOptional() + // If set to -1, returns all results. + pageSize?: number; + + @IsString() + @IsOptional() + @IsIn(['title']) + groupBy?: 'title'; + + async filterResultQueryset(qs: SelectQueryBuilder, event) { + if (this.filters?.id) { + qs.andWhere('vulnerability.id = :id', { + id: this.filters.id + }); + } + if (this.filters?.title) { + qs.andWhere('vulnerability.title ILIKE :title', { + title: `%${this.filters.title}%` + }); + } + if (this.filters?.domain) { + qs.andWhere('domain.name ILIKE :name', { + name: `%${this.filters.domain}%` + }); + } + if (this.filters?.severity) { + qs.andWhere('vulnerability.severity=:severity', { + severity: this.filters.severity + }); + } + if (this.filters?.cpe) { + qs.andWhere('vulnerability.cpe ILIKE :cpe', { + cpe: `%${this.filters.cpe}%` + }); + } + if (this.filters?.state) { + qs.andWhere('vulnerability.state=:state', { + state: this.filters.state + }); + } + if (this.filters?.substate) { + qs.andWhere('vulnerability.substate=:substate', { + substate: this.filters.substate + }); + } + if (this.filters?.isKev || this.filters?.isKev === false) { + qs.andWhere('vulnerability.isKev=:isKev', { + isKev: this.filters.isKev + }); + } + if (this.filters?.organization) { + qs.andWhere('organization.id = :org', { + org: this.filters.organization + }); + } + if (this.filters?.tag) { + qs.andWhere('organization.id IN (:...orgs)', { + orgs: await getTagOrganizations(event, this.filters.tag) + }); + } + return qs; + } + + async getResults(event): Promise<[Vulnerability[], number]> { + const pageSize = this.pageSize || PAGE_SIZE; + const groupBy = this.groupBy; + const sort = + this.sort === 'domain' + ? 'domain.name' + : this.sort === 'severity' + ? 'vulnerability.cvss' + : `vulnerability.${this.sort}`; + let qs = Vulnerability.createQueryBuilder('vulnerability') + .leftJoinAndSelect('vulnerability.domain', 'domain') + .leftJoinAndSelect('domain.organization', 'organization') + .leftJoinAndSelect('vulnerability.service', 'service'); + + if (groupBy) { + qs = qs + .groupBy('title, cve, "isKev", description, severity') + .select([ + 'title', + 'cve', + '"isKev"', + 'description', + 'severity', + 'count(*) as cnt' + ]) + .orderBy('cnt', 'DESC'); + } else { + qs = qs.orderBy(sort, this.order); + } + + if (pageSize !== -1) { + qs = qs.skip(pageSize * (this.page - 1)).take(pageSize); + } + + await this.filterResultQueryset(qs, event); + if (!isGlobalViewAdmin(event)) { + qs.andWhere('organization.id IN (:...orgs)', { + orgs: getOrgMemberships(event) + }); + } + + if (groupBy) { + const results = await qs.getRawMany(); + // TODO: allow pagination of grouped-by results. For now, we just + // return one page max of grouped-by results. + return [results, results.length]; + } else { + return qs.getManyAndCount(); + } + } +} + +/** + * @swagger + * + * /vulnerabilities/{id}: + * put: + * description: Update a particular vulnerability. + * parameters: + * - in: path + * name: id + * description: Vulnerability id + * tags: + * - Vulnerabilities + */ +export const update = wrapHandler(async (event) => { + await connectToDatabase(); + const id = event.pathParameters?.vulnerabilityId; + if (!isUUID(id) || !event.body) { + return NotFound; + } + const vuln = await Vulnerability.findOne( + { id }, + { relations: ['domain', 'domain.organization'] } + ); + let isAuthorized = false; + if (vuln && vuln.domain.organization && vuln.domain.organization.id) { + isAuthorized = + isGlobalWriteAdmin(event) || + getOrgMemberships(event).includes(vuln.domain.organization.id); + } + if (vuln && isAuthorized) { + const body = JSON.parse(event.body); + const user = await User.findOne({ + id: event.requestContext.authorizer!.id + }); + if (body.substate) { + vuln.setState(body.substate, false, user ? user : null); + } + if (body.notes) vuln.notes = body.notes; + if (body.comment) { + vuln.actions.unshift({ + type: 'comment', + automatic: false, + userId: user ? user.id : null, + userName: user ? user.fullName : null, + date: new Date(), + value: body.comment + }); + } + vuln.save(); + + return { + statusCode: 200, + body: JSON.stringify(vuln) + }; + } + return { + statusCode: 404, + body: '' + }; +}); + +/** + * @swagger + * + * /vulnerabilities/search: + * post: + * description: List vulnerabilities by specifying a filter. + * tags: + * - Vulnerabilities + */ +export const list = wrapHandler(async (event) => { + await connectToDatabase(true); + const search = await validateBody(VulnerabilitySearch, event.body); + const [result, count] = await search.getResults(event); + return { + statusCode: 200, + body: JSON.stringify({ + result, + count + }) + }; +}); + +/** + * @swagger + * + * /vulnerabilities/export: + * post: + * description: Export vulnerabilities to a CSV file by specifying a filter. + * tags: + * - Vulnerabilities + */ +export const export_ = wrapHandler(async (event) => { + await connectToDatabase(); + const search = await validateBody(VulnerabilitySearch, event.body); + const [result, count] = await search.getResults(event); + const client = new S3Client(); + const url = await client.saveCSV( + Papa.unparse({ + fields: [ + 'organization', + 'domain', + 'title', + 'description', + 'cve', + 'isKev', + 'cwe', + 'cpe', + 'description', + 'cvss', + 'severity', + 'state', + 'substate', + 'lastSeen', + 'createdAt', + 'id' + ], + data: result.map((e) => ({ + ...e, + organization: e.domain?.organization?.name, + domain: e.domain?.name + })) + }), + 'vulnerabilities' + ); + + return { + statusCode: 200, + body: JSON.stringify({ + url + }) + }; +}); + +/** + * @swagger + * + * /vulnerabilities/{id}: + * get: + * description: Get information about a particular vulnerability. + * parameters: + * - in: path + * name: id + * description: Vulnerability id + * tags: + * - Vulnerabilities + */ +export const get = wrapHandler(async (event) => { + await connectToDatabase(); + const id = event.pathParameters?.vulnerabilityId; + if (!isUUID(id)) { + return NotFound; + } + + // Need to use QueryBuilder because typeorm doesn't support nested + // relations filtering -- see https://github.com/typeorm/typeorm/issues/3890 + const search = new VulnerabilitySearch(); + search.filters = new VulnerabilityFilters(); + search.filters.id = id; + const [result] = await search.getResults(event); + + return { + statusCode: result.length ? 200 : 404, + body: result.length ? JSON.stringify(result[0]) : '' + }; +}); diff --git a/backend/src/models/api-key.ts b/backend/src/models/api-key.ts new file mode 100644 index 00000000..de2baf5e --- /dev/null +++ b/backend/src/models/api-key.ts @@ -0,0 +1,44 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + UpdateDateColumn, + CreateDateColumn, + BaseEntity, + ManyToOne +} from 'typeorm'; +import { User } from './'; + +@Entity() +export class ApiKey extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @ManyToOne((type) => User, (user) => user.apiKeys, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + user: User; + + @Column({ + type: 'timestamp', + nullable: true + }) + lastUsed: Date | null; + + @Column({ + type: 'text' + }) + hashedKey: string; + + @Column({ + type: 'text' + }) + lastFour: string; +} diff --git a/backend/src/models/connection.ts b/backend/src/models/connection.ts new file mode 100644 index 00000000..ec8c8cd3 --- /dev/null +++ b/backend/src/models/connection.ts @@ -0,0 +1,59 @@ +import { createConnection, Connection } from 'typeorm'; +import { + Domain, + Service, + Vulnerability, + Scan, + Organization, + User, + Role, + ScanTask, + Webpage, + ApiKey, + SavedSearch, + OrganizationTag, + Cpe, + Cve +} from '.'; + +let connection: Connection | null = null; + +const connectDb = async (logging?: boolean) => { + const connection = createConnection({ + type: 'postgres', + host: process.env.DB_HOST, + port: parseInt(process.env.DB_PORT ?? ''), + username: process.env.DB_USERNAME, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, + entities: [ + Cpe, + Cve, + Domain, + Service, + Vulnerability, + Scan, + Organization, + User, + Role, + ScanTask, + Webpage, + ApiKey, + SavedSearch, + OrganizationTag + ], + synchronize: false, + name: 'default', + dropSchema: false, + logging: logging ?? false, + cache: true + }); + return connection; +}; + +export const connectToDatabase = async (logging?: boolean) => { + if (!connection?.isConnected) { + connection = await connectDb(logging); + } + return connection; +}; diff --git a/backend/src/models/cpe.ts b/backend/src/models/cpe.ts new file mode 100644 index 00000000..ac18be70 --- /dev/null +++ b/backend/src/models/cpe.ts @@ -0,0 +1,31 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + ManyToMany, + BaseEntity, + Unique +} from 'typeorm'; +import { Cve } from './cve'; + +@Entity() +@Unique(['name', 'version', 'vendor']) +export class Cpe extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column() + name: string; + + @Column() + version: string; + + @Column() + vendor: string; + + @Column() + lastSeenAt: Date; + + @ManyToMany(() => Cve, (cve) => cve.cpes) + cves: Cve[]; +} diff --git a/backend/src/models/cve.ts b/backend/src/models/cve.ts new file mode 100644 index 00000000..4eda5fd2 --- /dev/null +++ b/backend/src/models/cve.ts @@ -0,0 +1,117 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + ManyToMany, + BaseEntity, + JoinTable, + Unique +} from 'typeorm'; +import { Cpe } from './cpe'; + +//TODO: Refactor column names to camelCase to match the rest of the codebase? +@Entity() +@Unique(['name']) +export class Cve extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ nullable: true }) + name: string; + + @Column({ nullable: true }) + publishedAt: Date; + + @Column({ nullable: true }) + modifiedAt: Date; + + @Column({ nullable: true }) + status: string; + + @Column({ nullable: true }) + description: string; + + @Column({ nullable: true }) + cvssV2Source: string; + + @Column({ nullable: true }) + cvssV2Type: string; + + @Column({ nullable: true }) + cvssV2Version: string; + + @Column({ nullable: true }) + cvssV2VectorString: string; + + @Column({ nullable: true }) + cvssV2BaseScore: string; + + @Column({ nullable: true }) + cvssV2BaseSeverity: string; + + @Column({ nullable: true }) + cvssV2ExploitabilityScore: string; + + @Column({ nullable: true }) + cvssV2ImpactScore: string; + + @Column({ nullable: true }) + cvssV3Source: string; + + @Column({ nullable: true }) + cvssV3Type: string; + + @Column({ nullable: true }) + cvssV3Version: string; + + @Column({ nullable: true }) + cvssV3VectorString: string; + + @Column({ nullable: true }) + cvssV3BaseScore: string; + + @Column({ nullable: true }) + cvssV3BaseSeverity: string; + + @Column({ nullable: true }) + cvssV3ExploitabilityScore: string; + + @Column({ nullable: true }) + cvssV3ImpactScore: string; + + @Column({ nullable: true }) + cvssV4Source: string; + + @Column({ nullable: true }) + cvssV4Type: string; + + @Column({ nullable: true }) + cvssV4Version: string; + + @Column({ nullable: true }) + cvssV4VectorString: string; + + @Column({ nullable: true }) + cvssV4BaseScore: string; + + @Column({ nullable: true }) + cvssV4BaseSeverity: string; + + @Column({ nullable: true }) + cvssV4ExploitabilityScore: string; + + @Column({ nullable: true }) + cvssV4ImpactScore: string; + + @Column('simple-array', { nullable: true }) + weaknesses: string[]; + + @Column('simple-array', { nullable: true }) + references: string[]; + + @ManyToMany(() => Cpe, (cpe) => cpe.cves, { + cascade: true + }) + @JoinTable() + cpes: Cpe[]; +} diff --git a/backend/src/models/domain.ts b/backend/src/models/domain.ts new file mode 100644 index 00000000..2a6be83c --- /dev/null +++ b/backend/src/models/domain.ts @@ -0,0 +1,191 @@ +import { + Entity, + Index, + Column, + OneToMany, + PrimaryGeneratedColumn, + UpdateDateColumn, + CreateDateColumn, + BaseEntity, + BeforeInsert, + ManyToOne +} from 'typeorm'; +import { Service } from './service'; +import { Organization } from './organization'; +import { Vulnerability } from './vulnerability'; +import { Scan } from './scan'; +import { Webpage } from './webpage'; + +@Entity() +@Index(['name', 'organization'], { unique: true }) +export class Domain extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + /** When this model was last synced with Elasticsearch. */ + @Column({ + type: 'timestamp', + nullable: true + }) + syncedAt: Date | null; + + @Column({ + nullable: true + }) + ip: string; + + /** Associated root domain that led to the discovery of this domain. */ + @Column({ + nullable: true + }) + fromRootDomain: string; + + /** Scan that discovered this domain (findomain, amass) */ + @Column({ + nullable: true + }) + subdomainSource: string; + + /** Set to true if the domain only has an associated IP address, but not a domain name. In this case, the `name` field is set to the IP address. */ + @Column({ + nullable: true, + default: false + }) + ipOnly: boolean; + + @ManyToOne((type) => Scan, { + onDelete: 'SET NULL', + onUpdate: 'CASCADE' + }) + discoveredBy: Scan; + + @Column({ + length: 512 + }) + reverseName: string; + + @Column({ + length: 512 + }) + name: string; + + @OneToMany((type) => Service, (service) => service.domain) + services: Service[]; + + @OneToMany((type) => Vulnerability, (vulnerability) => vulnerability.domain) + vulnerabilities: Vulnerability[]; + + @OneToMany((type) => Webpage, (webpage) => webpage.domain) + webpages: Service[]; + + @ManyToOne((type) => Organization, { onDelete: 'CASCADE', nullable: false }) + organization: Organization; + + @Column({ + length: 512, + nullable: true, + type: 'varchar' + }) + screenshot: string | null; + + @Column({ + nullable: true, + type: 'varchar' + }) + country: string | null; + + @Column({ + nullable: true, + type: 'varchar' + }) + asn: string | null; + + @Column({ + default: false + }) + cloudHosted: boolean; + + /** SSL Certificate information */ + @Column({ + type: 'jsonb', + nullable: true + }) + ssl: { + issuerOrg?: string; + issuerCN?: string; + validFrom?: string; + validTo?: string; + protocol?: string; + altNames?: string[]; + bits?: string; + fingerprint?: string; + valid?: boolean; + } | null; + + /** Censys Certificates results */ + @Column({ + type: 'jsonb', + default: {} + }) + censysCertificatesResults: { + [x: string]: any; + }; + + @BeforeInsert() + setLowerCase() { + this.name = this.name.toLowerCase(); + } + + @BeforeInsert() + setReverseName() { + this.reverseName = this.name.split('.').reverse().join('.'); + } + + // Trustymail results + @Column({ + type: 'jsonb', + default: {} + }) + trustymailResults: { + updatedAt: 'timestamp'; + Domain: string; + 'Base Domain': string; + Live: boolean; + 'MX Record': boolean; + 'MX Record DNSSEC': string; + 'Mail Servers': string[]; + 'Mail Server Ports Tested': number[]; + 'Domain Supports SMTP Results': string[]; + 'Domain Supports SMTP': string; + 'Domain Supports STARTTLS Results': string[]; + 'Domain Supports STARTTLS': string; + 'SPF Record': boolean; + 'SPF Record DNSSEC': string; + 'Valid SPF': boolean; + 'SPF Results': string[]; + 'DMARC Record': boolean; + 'DMARC Record DNSSEC': string; + 'Valid DMARC': boolean; + 'DMARC Results': string[]; + 'DMARC Record on Base Domain': boolean; + 'DMARC Record on Base Domain DNSSEC': string; + 'Valid DMARC Record on Base Domain': boolean; + 'DMARC Results on Base Domain': string[]; + 'DMARC Policy': string; + 'DMARC Subdomain Policy': string; + 'DMARC Policy Percentage': number; + 'DMARC Aggregate Report URIs': string[]; + 'DMARC Forensic Report URIs': string[]; + 'DMARC Has Aggregate Report URI': boolean; + 'DMARC Has Forensic Report URI': boolean; + 'DMARC Reporting Address Acceptance Error': boolean; + 'Syntax Errors': string[]; + 'Debug Info': string[]; + } | null; +} diff --git a/backend/src/models/generated/censysCertificates.ts b/backend/src/models/generated/censysCertificates.ts new file mode 100644 index 00000000..07cc4fac --- /dev/null +++ b/backend/src/models/generated/censysCertificates.ts @@ -0,0 +1,2109 @@ +/* tslint:disable */ +/** + * This file was automatically generated by json-schema-to-typescript. + * DO NOT MODIFY IT BY HAND. Instead, run "npm run codegen" to regenerate this file. + */ + +export interface CensysCertificatesData { + validation?: { + nss?: { + paths?: { + path?: string; + [k: string]: unknown; + }; + /** + * True if the certificate is explicitly blacklisted by some method than OneCRL/CRLSet. For example, a set of certificates revoked by Cloudflare are blacklisted by SPKI hash in Chrome. + */ + blacklisted?: boolean; + /** + * True if now or at some point in the past there existed a path from the certificate to the root store. + */ + had_trusted_path?: boolean; + /** + * True if the certificate is explicitly whitelisted, e.g. the set of trusted WoSign certificates Apple uses. + */ + whitelisted?: boolean; + /** + * True if the certificate is in the revocation set (e.g. OneCRL) associated with this root store. + */ + in_revocation_set?: boolean; + /** + * True if the certificate is valid now or was ever valid in the past. + */ + was_valid?: boolean; + /** + * ((has_trusted_path && !revoked && !blacklisted) || whitelisted) && !expired + */ + valid?: boolean; + parents?: string; + /** + * True if there exists a path from the certificate to the root store. + */ + trusted_path?: boolean; + /** + * Indicates if the certificate is a root, intermediate, or leaf. + */ + type?: string; + [k: string]: unknown; + }; + google_ct_primary?: { + paths?: { + path?: string; + [k: string]: unknown; + }; + /** + * True if the certificate is explicitly blacklisted by some method than OneCRL/CRLSet. For example, a set of certificates revoked by Cloudflare are blacklisted by SPKI hash in Chrome. + */ + blacklisted?: boolean; + /** + * True if now or at some point in the past there existed a path from the certificate to the root store. + */ + had_trusted_path?: boolean; + /** + * True if the certificate is explicitly whitelisted, e.g. the set of trusted WoSign certificates Apple uses. + */ + whitelisted?: boolean; + /** + * True if the certificate is in the revocation set (e.g. OneCRL) associated with this root store. + */ + in_revocation_set?: boolean; + /** + * True if the certificate is valid now or was ever valid in the past. + */ + was_valid?: boolean; + /** + * ((has_trusted_path && !revoked && !blacklisted) || whitelisted) && !expired + */ + valid?: boolean; + parents?: string; + /** + * True if there exists a path from the certificate to the root store. + */ + trusted_path?: boolean; + /** + * Indicates if the certificate is a root, intermediate, or leaf. + */ + type?: string; + [k: string]: unknown; + }; + apple?: { + paths?: { + path?: string; + [k: string]: unknown; + }; + /** + * True if the certificate is explicitly blacklisted by some method than OneCRL/CRLSet. For example, a set of certificates revoked by Cloudflare are blacklisted by SPKI hash in Chrome. + */ + blacklisted?: boolean; + /** + * True if now or at some point in the past there existed a path from the certificate to the root store. + */ + had_trusted_path?: boolean; + /** + * True if the certificate is explicitly whitelisted, e.g. the set of trusted WoSign certificates Apple uses. + */ + whitelisted?: boolean; + /** + * True if the certificate is in the revocation set (e.g. OneCRL) associated with this root store. + */ + in_revocation_set?: boolean; + /** + * True if the certificate is valid now or was ever valid in the past. + */ + was_valid?: boolean; + /** + * ((has_trusted_path && !revoked && !blacklisted) || whitelisted) && !expired + */ + valid?: boolean; + parents?: string; + /** + * True if there exists a path from the certificate to the root store. + */ + trusted_path?: boolean; + /** + * Indicates if the certificate is a root, intermediate, or leaf. + */ + type?: string; + [k: string]: unknown; + }; + microsoft?: { + paths?: { + path?: string; + [k: string]: unknown; + }; + /** + * True if the certificate is explicitly blacklisted by some method than OneCRL/CRLSet. For example, a set of certificates revoked by Cloudflare are blacklisted by SPKI hash in Chrome. + */ + blacklisted?: boolean; + /** + * True if now or at some point in the past there existed a path from the certificate to the root store. + */ + had_trusted_path?: boolean; + /** + * True if the certificate is explicitly whitelisted, e.g. the set of trusted WoSign certificates Apple uses. + */ + whitelisted?: boolean; + /** + * True if the certificate is in the revocation set (e.g. OneCRL) associated with this root store. + */ + in_revocation_set?: boolean; + /** + * True if the certificate is valid now or was ever valid in the past. + */ + was_valid?: boolean; + /** + * ((has_trusted_path && !revoked && !blacklisted) || whitelisted) && !expired + */ + valid?: boolean; + parents?: string; + /** + * True if there exists a path from the certificate to the root store. + */ + trusted_path?: boolean; + /** + * Indicates if the certificate is a root, intermediate, or leaf. + */ + type?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + parent_spki_subject_fingerprint?: string; + tags?: string; + added_at?: string; + fingerprint_sha256?: string; + raw?: string; + parents?: string; + zlint?: { + version?: string; + errors_present?: boolean; + fatals_present?: boolean; + warnings_present?: boolean; + lints?: { + e_name_constraint_empty?: string; + e_ev_valid_time_too_long?: string; + e_sub_ca_must_not_contain_any_policy?: string; + e_root_ca_extended_key_usage_present?: string; + e_ext_ian_uri_format_invalid?: string; + e_rsa_mod_less_than_2048_bits?: string; + e_ext_san_missing?: string; + e_sub_cert_cert_policy_empty?: string; + e_sub_ca_crl_distribution_points_does_not_contain_url?: string; + e_sub_cert_postal_code_must_not_appear?: string; + e_ext_cert_policy_disallowed_any_policy_qualifier?: string; + e_ext_san_not_critical_without_subject?: string; + e_sub_ca_crl_distribution_points_missing?: string; + e_cert_policy_ov_requires_country?: string; + w_name_constraint_on_x400?: string; + w_multiple_subject_rdn?: string; + e_ian_dns_name_includes_null_char?: string; + e_ext_name_constraints_not_in_ca?: string; + e_subject_locality_name_max_length?: string; + n_contains_redacted_dnsname?: string; + e_international_dns_name_not_unicode?: string; + e_sub_cert_locality_name_must_not_appear?: string; + w_ext_cert_policy_contains_noticeref?: string; + e_sub_cert_country_name_must_appear?: string; + e_ext_key_usage_cert_sign_without_ca?: string; + w_root_ca_basic_constraints_path_len_constraint_field_present?: string; + e_cab_dv_conflicts_with_street?: string; + e_ext_subject_key_identifier_missing_ca?: string; + e_sub_cert_aia_marked_critical?: string; + w_sub_cert_aia_does_not_contain_issuing_ca_url?: string; + e_san_dns_name_includes_null_char?: string; + e_subject_common_name_max_length?: string; + e_ext_key_usage_without_bits?: string; + e_utc_time_not_in_zulu?: string; + e_ext_freshest_crl_marked_critical?: string; + e_international_dns_name_not_nfkc?: string; + e_ext_san_empty_name?: string; + e_sub_cert_key_usage_cert_sign_bit_set?: string; + w_ext_san_critical_with_subject_dn?: string; + w_sub_ca_aia_does_not_contain_issuing_ca_url?: string; + e_subject_state_name_max_length?: string; + w_san_iana_pub_suffix_empty?: string; + e_ext_authority_key_identifier_missing?: string; + e_ext_san_contains_reserved_ip?: string; + e_ext_san_directory_name_present?: string; + e_distribution_point_incomplete?: string; + e_dsa_params_missing?: string; + e_dnsname_underscore_in_sld?: string; + e_cab_dv_conflicts_with_province?: string; + e_ian_wildcard_not_first?: string; + n_ca_digital_signature_not_set?: string; + e_dnsname_not_valid_tld?: string; + e_issuer_field_empty?: string; + e_sub_ca_crl_distribution_points_marked_critical?: string; + e_cab_dv_conflicts_with_org?: string; + e_ca_key_usage_missing?: string; + e_ext_san_uniform_resource_identifier_present?: string; + e_ext_subject_directory_attr_critical?: string; + e_name_constraint_maximum_not_absent?: string; + e_cert_policy_iv_requires_country?: string; + e_cab_dv_conflicts_with_postal?: string; + e_inhibit_any_policy_not_critical?: string; + e_ev_organization_name_missing?: string; + e_public_key_type_not_allowed?: string; + e_old_sub_ca_rsa_mod_less_than_1024_bits?: string; + e_ext_san_uri_not_ia5?: string; + e_sub_cert_key_usage_crl_sign_bit_set?: string; + e_ext_policy_constraints_not_critical?: string; + e_subject_country_not_iso?: string; + e_signature_algorithm_not_supported?: string; + e_cab_iv_requires_personal_name?: string; + e_san_dns_name_starts_with_period?: string; + e_ext_policy_map_any_policy?: string; + e_subject_not_dn?: string; + e_ext_policy_constraints_empty?: string; + e_san_bare_wildcard?: string; + e_ext_san_uri_host_not_fqdn_or_ip?: string; + e_ian_dns_name_starts_with_period?: string; + e_ca_key_usage_not_critical?: string; + w_root_ca_contains_cert_policy?: string; + w_sub_cert_certificate_policies_marked_critical?: string; + w_name_constraint_on_edi_party_name?: string; + e_ext_san_edi_party_name_present?: string; + e_generalized_time_includes_fraction_seconds?: string; + e_dnsname_left_label_wildcard_correct?: string; + n_subject_common_name_included?: string; + w_multiple_issuer_rdn?: string; + e_subject_empty_without_san?: string; + w_sub_ca_name_constraints_not_critical?: string; + e_dsa_correct_order_in_subgroup?: string; + w_dnsname_underscore_in_trd?: string; + e_sub_cert_aia_missing?: string; + e_root_ca_key_usage_present?: string; + e_utc_time_does_not_include_seconds?: string; + w_name_constraint_on_registered_id?: string; + e_serial_number_longer_than_20_octets?: string; + e_sub_cert_valid_time_too_long?: string; + w_ext_key_usage_not_critical?: string; + e_sub_cert_crl_distribution_points_marked_critical?: string; + w_ext_aia_access_location_missing?: string; + e_generalized_time_not_in_zulu?: string; + e_ca_key_cert_sign_not_set?: string; + e_dsa_improper_modulus_or_divisor_size?: string; + e_serial_number_not_positive?: string; + w_ext_policy_map_not_in_cert_policy?: string; + e_sub_cert_or_sub_ca_using_sha1?: string; + e_ext_name_constraints_not_critical?: string; + e_validity_time_not_positive?: string; + e_ext_san_dns_name_too_long?: string; + e_sub_cert_eku_missing?: string; + w_eku_critical_improperly?: string; + w_subject_dn_trailing_whitespace?: string; + e_dnsname_empty_label?: string; + w_sub_cert_sha1_expiration_too_long?: string; + e_sub_cert_not_is_ca?: string; + e_name_constraint_minimum_non_zero?: string; + e_ev_locality_name_missing?: string; + e_ext_ian_uri_host_not_fqdn_or_ip?: string; + e_cert_unique_identifier_version_not_2_or_3?: string; + e_generalized_time_does_not_include_seconds?: string; + e_ev_country_name_missing?: string; + e_cab_dv_conflicts_with_locality?: string; + e_path_len_constraint_improperly_included?: string; + e_sub_ca_eku_name_constraints?: string; + e_sub_ca_aia_marked_critical?: string; + w_rsa_mod_not_odd?: string; + e_sub_cert_aia_does_not_contain_ocsp_url?: string; + e_ev_business_category_missing?: string; + e_sub_ca_eku_missing?: string; + e_sub_cert_locality_name_must_appear?: string; + e_sub_cert_given_name_surname_contains_correct_policy?: string; + e_cab_ov_requires_org?: string; + e_sub_cert_street_address_should_not_exist?: string; + e_ext_aia_marked_critical?: string; + e_sub_ca_certificate_policies_missing?: string; + w_issuer_dn_leading_whitespace?: string; + w_ext_policy_map_not_critical?: string; + e_ext_authority_key_identifier_no_key_identifier?: string; + e_cert_policy_ov_requires_province_or_locality?: string; + e_ec_improper_curves?: string; + e_dnsname_wildcard_only_in_left_label?: string; + e_rsa_public_exponent_too_small?: string; + w_ext_crl_distribution_marked_critical?: string; + e_rsa_exp_negative?: string; + e_subject_common_name_not_from_san?: string; + e_subject_organizational_unit_name_max_length?: string; + n_sub_ca_eku_not_technically_constrained?: string; + e_ca_subject_field_empty?: string; + e_root_ca_key_usage_must_be_critical?: string; + e_ext_ian_dns_not_ia5_string?: string; + w_ext_cert_policy_explicit_text_includes_control?: string; + w_ext_ian_critical?: string; + e_sub_cert_certificate_policies_missing?: string; + w_rsa_mod_factors_smaller_than_752?: string; + e_ian_bare_wildcard?: string; + w_serial_number_low_entropy?: string; + e_ext_san_no_entries?: string; + e_sub_ca_aia_does_not_contain_ocsp_url?: string; + w_sub_ca_eku_critical?: string; + w_ext_subject_key_identifier_missing_sub_cert?: string; + e_rsa_no_public_key?: string; + e_dnsname_hyphen_in_sld?: string; + e_cert_policy_iv_requires_province_or_locality?: string; + e_subject_contains_noninformational_value?: string; + w_dnsname_wildcard_left_of_public_suffix?: string; + e_ext_ian_uri_not_ia5?: string; + w_sub_ca_certificate_policies_marked_critical?: string; + e_sub_ca_aia_missing?: string; + e_basic_constraints_not_critical?: string; + w_rsa_public_exponent_not_in_range?: string; + e_ext_cert_policy_duplicate?: string; + e_ext_cert_policy_explicit_text_too_long?: string; + w_issuer_dn_trailing_whitespace?: string; + e_ext_san_dns_not_ia5_string?: string; + e_sub_cert_province_must_not_appear?: string; + e_subject_contains_reserved_ip?: string; + e_dsa_shorter_than_2048_bits?: string; + e_dnsname_bad_character_in_label?: string; + e_san_wildcard_not_first?: string; + e_ext_ian_empty_name?: string; + w_ext_cert_policy_explicit_text_not_nfc?: string; + e_ca_country_name_invalid?: string; + e_ca_country_name_missing?: string; + w_sub_cert_eku_extra_values?: string; + e_dnsname_contains_bare_iana_suffix?: string; + w_ian_iana_pub_suffix_empty?: string; + e_old_root_ca_rsa_mod_less_than_2048_bits?: string; + e_ca_is_ca?: string; + e_sub_cert_province_must_appear?: string; + e_ca_common_name_missing?: string; + e_path_len_constraint_zero_or_less?: string; + e_ext_san_uri_relative?: string; + e_ext_subject_key_identifier_critical?: string; + e_sub_cert_eku_server_auth_client_auth_missing?: string; + e_wrong_time_format_pre2050?: string; + e_dsa_unique_correct_representation?: string; + e_ext_ian_uri_relative?: string; + e_ext_cert_policy_explicit_text_ia5_string?: string; + w_distribution_point_missing_ldap_or_uri?: string; + e_subject_info_access_marked_critical?: string; + e_ext_san_other_name_present?: string; + e_ca_crl_sign_not_set?: string; + e_ev_serial_number_missing?: string; + e_ext_san_registered_id_present?: string; + e_ext_san_uri_format_invalid?: string; + e_ext_ian_space_dns_name?: string; + e_dnsname_label_too_long?: string; + e_ext_san_rfc822_name_present?: string; + e_sub_cert_crl_distribution_points_does_not_contain_url?: string; + e_ca_organization_name_missing?: string; + w_subject_dn_leading_whitespace?: string; + e_ext_ian_rfc822_format_invalid?: string; + e_subject_organization_name_max_length?: string; + e_cert_contains_unique_identifier?: string; + e_ext_duplicate_extension?: string; + e_invalid_certificate_version?: string; + e_ext_ian_no_entries?: string; + e_cert_extensions_version_not_3?: string; + e_old_sub_cert_rsa_mod_less_than_1024_bits?: string; + e_ext_san_space_dns_name?: string; + e_ext_authority_key_identifier_critical?: string; + e_ext_san_rfc822_format_invalid?: string; + e_rsa_public_exponent_not_odd?: string; + w_ext_cert_policy_explicit_text_not_utf8?: string; + [k: string]: unknown; + }; + notices_present?: boolean; + [k: string]: unknown; + }; + precert?: boolean; + ct?: { + certificatetransparency_cn_ct?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_argon_2017?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + sheca_ct?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_nessie_2019?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_nessie_2018?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_pilot?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_xenon_2019?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + comodo_mammoth?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + akamai_ct?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + behind_the_sofa?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_argon_2018?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_argon_2019?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + wosign_ct?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_xenon_2021?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + letsencrypt_ct_faux?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + comodo_dodo?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + venafi_api_ctlog?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + wosign_ctlog2?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + izenpe_eus_ct?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + wotrus_ctlog?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + gdca_log2?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + wosign_ctlog3?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + letsencrypt_ct_oak_2021?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_golem?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_skydiver?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + letsencrypt_ct_oak_2022?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_aviator?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + gdca_ct?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_rocketeer?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + izenpe_com_ct?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + cloudflare_nimbus_2021?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + cloudflare_nimbus_2020?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + symantec_ws_deneb?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_daedalus?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_xenon_2018?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + izenpe_com_pilot?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_yeti_2022?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_xenon_2022?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_yeti_2020?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_yeti_2021?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + symantec_ws_ct?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_argon_2020?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_nessie_2020?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_nessie_2021?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_nessie_2022?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + letsencrypt_ct_oak?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_xenon_2020?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + comodo_sabre?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_argon_2021?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + gdca_ctlog?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + nordu_ct_flimsy?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_testtube?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_yeti_2019?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_yeti_2018?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + nordu_ct_plausible?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + startssl_ct?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + symantec_ws_vega?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + wotrus_ctlog3?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + ctlogs_alpha?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + wosign_ctlog?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + cloudflare_nimbus_2017?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + symantec_ws_sirius?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_icarus?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_ct1?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + letsencrypt_ct_oak_2020?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + gdca_log?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + digicert_ct2?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + letsencrypt_ct_oak_2019?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + cloudflare_nimbus_2018?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + cloudflare_nimbus_2019?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + cnnic_ctserver?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + certly_log?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + sheca_ctlog?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + letsencrypt_ct_clicky?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + google_submariner?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + venafi_api_ctlog_gen2?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + letsencrypt_ct_birch?: { + index?: string; + censys_to_ct_at?: string; + ct_to_censys_at?: string; + added_to_ct_at?: string; + sct?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + /** + * The certificate's public key. Only one of the *_public_key fields will be set. + */ + subject_key_info?: { + /** + * The SHA2-256 digest calculated over the certificate's DER-encoded SubjectPublicKeyInfo field. + */ + fingerprint_sha256?: string; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_public_key?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + /** + * Identifies the type of key and any relevant parameters. + */ + key_algorithm?: { + /** + * OID of the public key on the certificate. This is helpful when an unknown type is present. This field is reserved and not currently populated. + */ + oid?: string; + /** + * Name of public key type, e.g., RSA or ECDSA. More information is available the named SubRecord (e.g., RSAPublicKey()). + */ + name?: string; + [k: string]: unknown; + }; + /** + * The public portion of an ECDSA asymmetric key. + */ + ecdsa_public_key?: { + b?: string; + curve?: string; + gy?: string; + n?: string; + p?: string; + length?: string; + pub?: string; + y?: string; + x?: string; + gx?: string; + [k: string]: unknown; + }; + /** + * The public portion of a DSA asymmetric key. + */ + dsa_public_key?: { + q?: string; + p?: string; + y?: string; + g?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The x.509 certificate version number. + */ + version?: string; + /** + * A canonical string representation of the subject name. + */ + subject_dn?: string; + /** + * List of raw extensions that were not recognized by the application. + */ + unknown_extensions?: { + /** + * Certificates should be rejected if they have critical extensions the validator does not recognize. + */ + critical?: boolean; + /** + * The OBJECT IDENTIFIER identifying the extension. + */ + id?: string; + /** + * The raw value of the extnValue OCTET STREAM. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Identifies the algorithm used by the CA to sign the certificate. + */ + signature_algorithm?: { + /** + * The OBJECT IDENTIFIER of the signature algorithm, in dotted-decimal notation. + */ + oid?: string; + /** + * Name of signature algorithm, e.g., SHA1-RSA or ECDSA-SHA512. Unknown algorithms get an integer id. + */ + name?: string; + [k: string]: unknown; + }; + /** + * This is set if any of the certificate's names contain redacted fields. + */ + redacted?: boolean; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct_fingerprint?: string; + /** + * A canonical string representation of the issuer name. + */ + issuer_dn?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs_fingerprint?: string; + extensions?: { + /** + * The parsed id-ce-nameConstraints extension (2.5.29.30). Specifies a name space within which all child certificates' subject names MUST be located. + */ + name_constraints?: { + /** + * Permitted names of type directoryName. + */ + permitted_directory_names?: { + /** + * jurisdictionCountry elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.3) + */ + jurisdiction_country?: string; + /** + * stateOrProviceName (ST) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.8) + */ + province?: string; + /** + * surname (SN) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.4) + */ + surname?: string; + /** + * localityName (L) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.7) + */ + locality?: string; + /** + * domainComponent (DC) elements of the distinguished name (OBJECT IDENTIFIER 0.9.2342.19200300.100.1.25) + */ + domain_component?: string; + /** + * countryName (C) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.6) + */ + country?: string; + /** + * jurisdictionStateOrProvice elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.2) + */ + jurisdiction_province?: string; + /** + * jurisdictionLocality elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.1) + */ + jurisdiction_locality?: string; + /** + * postalCode elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.17) + */ + postal_code?: string; + /** + * organizationId elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.97) + */ + organization_id?: string; + /** + * organizationalUnit (OU) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.11) + */ + organizational_unit?: string; + /** + * givenName (G) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.42) + */ + given_name?: string; + /** + * serialNumber elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.5) + */ + serial_number?: string; + /** + * commonName (CN) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.3) + */ + common_name?: string; + /** + * organizationName (O) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.10) + */ + organization?: string; + /** + * emailAddress (E) elements of the distinguished name (OBJECT IDENTIFIER 1.2.840.113549.1.9.1) + */ + email_address?: string; + /** + * streetAddress (STREET) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.9) + */ + street_address?: string; + [k: string]: unknown; + }; + /** + * Permitted names of type rfc822Name. + */ + permitted_email_addresses?: string; + /** + * Excluded names of type ediPartyName. + */ + excluded_edi_party_names?: { + /** + * The partyName (a DirectoryString) + */ + party_name?: string; + /** + * The nameAssigner (a DirectoryString) + */ + name_assigner?: string; + [k: string]: unknown; + }; + /** + * Permitted names of type registeredID. + */ + permitted_registered_ids?: string; + /** + * Excluded names of type rfc822Name. + */ + excluded_email_addresses?: string; + /** + * Excluded names of type registeredID. + */ + excluded_registered_ids?: string; + /** + * Excluded names of type dNSName. + */ + excluded_names?: string; + /** + * If set, clients unable to understand this extension must reject this certificate. + */ + critical?: boolean; + /** + * Permitted names of type ediPartyName + */ + permitted_edi_party_names?: { + /** + * The partyName (a DirectoryString) + */ + party_name?: string; + /** + * The nameAssigner (a DirectoryString) + */ + name_assigner?: string; + [k: string]: unknown; + }; + /** + * Excluded names of type directoryName. + */ + excluded_directory_names?: { + /** + * jurisdictionCountry elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.3) + */ + jurisdiction_country?: string; + /** + * stateOrProviceName (ST) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.8) + */ + province?: string; + /** + * surname (SN) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.4) + */ + surname?: string; + /** + * localityName (L) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.7) + */ + locality?: string; + /** + * domainComponent (DC) elements of the distinguished name (OBJECT IDENTIFIER 0.9.2342.19200300.100.1.25) + */ + domain_component?: string; + /** + * countryName (C) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.6) + */ + country?: string; + /** + * jurisdictionStateOrProvice elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.2) + */ + jurisdiction_province?: string; + /** + * jurisdictionLocality elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.1) + */ + jurisdiction_locality?: string; + /** + * postalCode elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.17) + */ + postal_code?: string; + /** + * organizationId elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.97) + */ + organization_id?: string; + /** + * organizationalUnit (OU) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.11) + */ + organizational_unit?: string; + /** + * givenName (G) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.42) + */ + given_name?: string; + /** + * serialNumber elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.5) + */ + serial_number?: string; + /** + * commonName (CN) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.3) + */ + common_name?: string; + /** + * organizationName (O) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.10) + */ + organization?: string; + /** + * emailAddress (E) elements of the distinguished name (OBJECT IDENTIFIER 1.2.840.113549.1.9.1) + */ + email_address?: string; + /** + * streetAddress (STREET) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.9) + */ + street_address?: string; + [k: string]: unknown; + }; + /** + * Permitted names of type dNSName. + */ + permitted_names?: string; + [k: string]: unknown; + }; + /** + * A key identifier, usually a digest of the DER encoding of a SubjectPublicKeyInfo. This is the hex encoding of the OCTET STRING value. + */ + authority_key_id?: string; + /** + * The CA/BF organization ID extensions (2.23.140.3.1) + */ + cabf_organization_id?: { + country?: string; + state?: string; + scheme?: string; + reference?: string; + [k: string]: unknown; + }; + /** + * The parsed Subject Alternative Name extension (id-ce-subjectAltName, 2.5.29.17). + */ + subject_alt_name?: { + /** + * uniformResourceIdentifier entries in the GeneralName (CHOICE tag 6). + */ + uniform_resource_identifiers?: string; + /** + * Parsed directoryName entries in the GeneralName (CHOICE tag 4). + */ + directory_names?: { + /** + * jurisdictionCountry elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.3) + */ + jurisdiction_country?: string; + /** + * stateOrProviceName (ST) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.8) + */ + province?: string; + /** + * surname (SN) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.4) + */ + surname?: string; + /** + * localityName (L) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.7) + */ + locality?: string; + /** + * domainComponent (DC) elements of the distinguished name (OBJECT IDENTIFIER 0.9.2342.19200300.100.1.25) + */ + domain_component?: string; + /** + * countryName (C) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.6) + */ + country?: string; + /** + * jurisdictionStateOrProvice elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.2) + */ + jurisdiction_province?: string; + /** + * jurisdictionLocality elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.1) + */ + jurisdiction_locality?: string; + /** + * postalCode elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.17) + */ + postal_code?: string; + /** + * organizationId elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.97) + */ + organization_id?: string; + /** + * organizationalUnit (OU) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.11) + */ + organizational_unit?: string; + /** + * givenName (G) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.42) + */ + given_name?: string; + /** + * serialNumber elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.5) + */ + serial_number?: string; + /** + * commonName (CN) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.3) + */ + common_name?: string; + /** + * organizationName (O) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.10) + */ + organization?: string; + /** + * emailAddress (E) elements of the distinguished name (OBJECT IDENTIFIER 1.2.840.113549.1.9.1) + */ + email_address?: string; + /** + * streetAddress (STREET) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.9) + */ + street_address?: string; + [k: string]: unknown; + }; + /** + * iPAddress entries in the GeneralName (CHOICE tag 7). + */ + ip_addresses?: string; + /** + * otherName entries in the GeneralName (CHOICE tag 0). An arbitrary binary value identified by an OBJECT IDENTIFIER. + */ + other_names?: { + /** + * The OBJECT IDENTIFIER identifying the syntax of the otherName value. + */ + id?: string; + /** + * The raw otherName value. + */ + value?: string; + [k: string]: unknown; + }; + /** + * registeredID entries in the GeneralName (OBJECT IDENTIFIER, CHOICE tag 8). Stored in dotted-decimal format. + */ + registered_ids?: string; + /** + * Parsed eDIPartyName entries in the GeneralName (CHOICE tag 5) + */ + edi_party_names?: { + /** + * The partyName (a DirectoryString) + */ + party_name?: string; + /** + * The nameAssigner (a DirectoryString) + */ + name_assigner?: string; + [k: string]: unknown; + }; + /** + * dNSName entries in the GeneralName (IA5String, CHOICE tag 2). + */ + dns_names?: string; + /** + * rfc822Name entries in the GeneralName (IA5String, CHOICE tag 1). + */ + email_addresses?: string; + [k: string]: unknown; + }; + /** + * The parsed id-pe-authorityInfoAccess extension (1.3.6.1.5.7.1.1). Only id-ad-caIssuers and id-ad-ocsp accessMethods are supported; others are omitted. + */ + authority_info_access?: { + /** + * URLs of accessLocations with accessMethod of id-ad-ocsp, pointing to OCSP servers that can be used to check this certificate's revocation status. Only uniformResourceIdentifier accessLocations are supported; others are omitted. + */ + ocsp_urls?: string; + /** + * URLs of accessLocations with accessMethod of id-ad-caIssuers, pointing to locations where this certificate's issuers can be downloaded. Only uniformResourceIdentifier accessLocations are supported; others are omitted. + */ + issuer_urls?: string; + [k: string]: unknown; + }; + /** + * The parsed id-ce-basicConstraints extension (2.5.29.19); see RFC 5280. + */ + basic_constraints?: { + /** + * When present, gives the maximum number of non-self-issued intermediate certificates that may follow this certificate in a valid certification path. + */ + max_path_len?: string; + /** + * Indicates that the certificate is permitted to sign other certificates. + */ + is_ca?: boolean; + [k: string]: unknown; + }; + /** + * IDs and parsed statements for qualified certificates (1.3.6.1.5.5.7.1.3) + */ + qc_statements?: { + /** + * All included statement OIDs + */ + ids?: string; + /** + * Contains known QCStatements. Each field is repeated to handle the case where a single statement appears more than once. + */ + parsed?: { + /** + * Statement ID 0.4.0.1862.1.7 + */ + legislation?: { + /** + * Country codes for the set of countries where this certificate issued as a qualified certificate + */ + country_codes?: string; + [k: string]: unknown; + }; + /** + * Statement ID 0.4.0.1862.1.3 + */ + retention_period?: string; + /** + * Statement ID 0.4.0.1862.1.5 + */ + pds_locations?: { + /** + * Included PDS locations + */ + locations?: { + /** + * Location of the PDS + */ + url?: string; + /** + * Locale code + */ + language?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Statement ID 0.4.0.1862.1.2 + */ + limit?: { + /** + * Currency, if provided as an integer + */ + currency_number?: string; + /** + * Currency, if provided as a string + */ + currency?: string; + /** + * Value in currency + */ + amount?: string; + /** + * Total is amount times 10 raised to the exponent + */ + exponent?: string; + [k: string]: unknown; + }; + /** + * True if present (Statement ID 0.4.0.1862.1.4 + */ + sscd?: boolean; + /** + * True if present (Statement ID 0.4.0.1862.1.1) + */ + etsi_compliance?: boolean; + /** + * Statement ID 0.4.0.1862.1.6 + */ + types?: { + /** + * Included QC type OIDs + */ + ids?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The parsed id-ce-certificatePolicies extension (2.5.29.32). + */ + certificate_policies?: { + /** + * List of URIs to the policies + */ + cps?: string; + /** + * The OBJECT IDENTIFIER identifying the policy. + */ + id?: string; + /** + * List of textual notices to display relying parties. + */ + user_notice?: { + /** + * Names an organization and identifies, by number, a particular textual statement prepared by that organization. + */ + notice_reference?: { + /** + * The numeric identifier(s) of the notice. + */ + notice_numbers?: string; + /** + * The organization that prepared the notice. + */ + organization?: string; + [k: string]: unknown; + }; + /** + * Textual statement with a maximum size of 200 characters. Should be a UTF8String or IA5String. + */ + explicit_text?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The parsed id-ce-cRLDistributionPoints extension (2.5.29.31). Contents are a list of distributionPoint URLs (other distributionPoint types are omitted). + */ + crl_distribution_points?: string; + /** + * The parsed id-ce-keyUsage extension (2.5.29.15); see RFC 5280. + */ + key_usage?: { + /** + * Indicates if the keyEncipherment bit(2) is set. + */ + key_encipherment?: boolean; + /** + * Indicates if the digitalSignature bit(0) is set. + */ + digital_signature?: boolean; + /** + * Indicates if the encipherOnly bit(7) is set. + */ + decipher_only?: boolean; + /** + * Indicates if the keyAgreement bit(4) is set. + */ + key_agreement?: boolean; + /** + * Indicates if the dataEncipherment bit(3) is set. + */ + data_encipherment?: boolean; + /** + * Integer value of the bitmask in the extension + */ + value?: string; + /** + * Indicates if the decipherOnly bit(8) is set. + */ + encipher_only?: boolean; + /** + * Indicates if the keyCertSign bit(5) is set. + */ + certificate_sign?: boolean; + /** + * Indicates if the contentCommitment bit(1) (formerly called nonRepudiation) is set. + */ + content_commitment?: boolean; + /** + * Indicates if the cRLSign bit(6) is set. + */ + crl_sign?: boolean; + [k: string]: unknown; + }; + /** + * The parsed Certificate Transparency SignedCertificateTimestampsList extension (1.3.6.1.4.1.11129.2.4.2); see RFC 6962. + */ + signed_certificate_timestamps?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + /** + * This is true if the certificate possesses the Certificate Transparency Precertificate Poison extension (1.3.6.1.4.1.11129.2.4.3). + */ + ct_poison?: boolean; + /** + * A key identifier, usually a digest of the DER encoding of a SubjectPublicKeyInfo. This is the hex encoding of the OCTET STRING value. + */ + subject_key_id?: string; + /** + * The parsed Issuer Alternative Name extension (id-ce-issuerAltName, 2.5.29.18). + */ + issuer_alt_name?: { + /** + * uniformResourceIdentifier entries in the GeneralName (CHOICE tag 6). + */ + uniform_resource_identifiers?: string; + /** + * Parsed directoryName entries in the GeneralName (CHOICE tag 4). + */ + directory_names?: { + /** + * jurisdictionCountry elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.3) + */ + jurisdiction_country?: string; + /** + * stateOrProviceName (ST) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.8) + */ + province?: string; + /** + * surname (SN) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.4) + */ + surname?: string; + /** + * localityName (L) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.7) + */ + locality?: string; + /** + * domainComponent (DC) elements of the distinguished name (OBJECT IDENTIFIER 0.9.2342.19200300.100.1.25) + */ + domain_component?: string; + /** + * countryName (C) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.6) + */ + country?: string; + /** + * jurisdictionStateOrProvice elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.2) + */ + jurisdiction_province?: string; + /** + * jurisdictionLocality elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.1) + */ + jurisdiction_locality?: string; + /** + * postalCode elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.17) + */ + postal_code?: string; + /** + * organizationId elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.97) + */ + organization_id?: string; + /** + * organizationalUnit (OU) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.11) + */ + organizational_unit?: string; + /** + * givenName (G) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.42) + */ + given_name?: string; + /** + * serialNumber elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.5) + */ + serial_number?: string; + /** + * commonName (CN) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.3) + */ + common_name?: string; + /** + * organizationName (O) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.10) + */ + organization?: string; + /** + * emailAddress (E) elements of the distinguished name (OBJECT IDENTIFIER 1.2.840.113549.1.9.1) + */ + email_address?: string; + /** + * streetAddress (STREET) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.9) + */ + street_address?: string; + [k: string]: unknown; + }; + /** + * iPAddress entries in the GeneralName (CHOICE tag 7). + */ + ip_addresses?: string; + /** + * otherName entries in the GeneralName (CHOICE tag 0). An arbitrary binary value identified by an OBJECT IDENTIFIER. + */ + other_names?: { + /** + * The OBJECT IDENTIFIER identifying the syntax of the otherName value. + */ + id?: string; + /** + * The raw otherName value. + */ + value?: string; + [k: string]: unknown; + }; + /** + * registeredID entries in the GeneralName (OBJECT IDENTIFIER, CHOICE tag 8). Stored in dotted-decimal format. + */ + registered_ids?: string; + /** + * Parsed eDIPartyName entries in the GeneralName (CHOICE tag 5) + */ + edi_party_names?: { + /** + * The partyName (a DirectoryString) + */ + party_name?: string; + /** + * The nameAssigner (a DirectoryString) + */ + name_assigner?: string; + [k: string]: unknown; + }; + /** + * dNSName entries in the GeneralName (IA5String, CHOICE tag 2). + */ + dns_names?: string; + /** + * rfc822Name entries in the GeneralName (IA5String, CHOICE tag 1). + */ + email_addresses?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * A list of subject names in the certificate, including the Subject CommonName and SubjectAltName DNSNames, IPAddresses and URIs. + */ + names?: string; + signature?: { + /** + * Indicates whether the subject key was also used to sign the certificate. + */ + self_signed?: boolean; + valid?: boolean; + /** + * Contents of the signature BIT STRING. + */ + value?: string; + signature_algorithm?: { + /** + * The OBJECT IDENTIFIER of the signature algorithm, in dotted-decimal notation. + */ + oid?: string; + /** + * Name of signature algorithm, e.g., SHA1-RSA or ECDSA-SHA512. Unknown algorithms get an integer id. + */ + name?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * How the certificate is validated -- Domain validated (DV), Organization Validated (OV), Extended Validation (EV), or unknown. + */ + validation_level?: string; + /** + * Serial number as an signed decimal integer. Stored as string to support >uint lengths. Negative values are allowed. + */ + serial_number?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_md5?: string; + /** + * The parsed subject name. + */ + subject?: { + /** + * jurisdictionCountry elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.3) + */ + jurisdiction_country?: string; + /** + * stateOrProviceName (ST) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.8) + */ + province?: string; + /** + * surname (SN) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.4) + */ + surname?: string; + /** + * localityName (L) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.7) + */ + locality?: string; + /** + * domainComponent (DC) elements of the distinguished name (OBJECT IDENTIFIER 0.9.2342.19200300.100.1.25) + */ + domain_component?: string; + /** + * countryName (C) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.6) + */ + country?: string; + /** + * jurisdictionStateOrProvice elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.2) + */ + jurisdiction_province?: string; + /** + * jurisdictionLocality elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.1) + */ + jurisdiction_locality?: string; + /** + * postalCode elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.17) + */ + postal_code?: string; + /** + * organizationId elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.97) + */ + organization_id?: string; + /** + * organizationalUnit (OU) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.11) + */ + organizational_unit?: string; + /** + * givenName (G) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.42) + */ + given_name?: string; + /** + * serialNumber elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.5) + */ + serial_number?: string; + /** + * commonName (CN) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.3) + */ + common_name?: string; + /** + * organizationName (O) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.10) + */ + organization?: string; + /** + * emailAddress (E) elements of the distinguished name (OBJECT IDENTIFIER 1.2.840.113549.1.9.1) + */ + email_address?: string; + /** + * streetAddress (STREET) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.9) + */ + street_address?: string; + [k: string]: unknown; + }; + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject_fingerprint?: string; + validity?: { + /** + * Timestamp of when certificate is first valid. Timezone is UTC. + */ + start?: string; + /** + * The length of time, in seconds, that the certificate is valid. + */ + length?: string; + /** + * Timestamp of when certificate expires. Timezone is UTC. + */ + end?: string; + [k: string]: unknown; + }; + /** + * The parsed issuer name. + */ + issuer?: { + /** + * jurisdictionCountry elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.3) + */ + jurisdiction_country?: string; + /** + * stateOrProviceName (ST) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.8) + */ + province?: string; + /** + * surname (SN) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.4) + */ + surname?: string; + /** + * localityName (L) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.7) + */ + locality?: string; + /** + * domainComponent (DC) elements of the distinguished name (OBJECT IDENTIFIER 0.9.2342.19200300.100.1.25) + */ + domain_component?: string; + /** + * countryName (C) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.6) + */ + country?: string; + /** + * jurisdictionStateOrProvice elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.2) + */ + jurisdiction_province?: string; + /** + * jurisdictionLocality elements of the distinguished name (OBJECT IDENTIFIER 1.3.6.1.4.1.311.60.2.1.1) + */ + jurisdiction_locality?: string; + /** + * postalCode elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.17) + */ + postal_code?: string; + /** + * organizationId elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.97) + */ + organization_id?: string; + /** + * organizationalUnit (OU) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.11) + */ + organizational_unit?: string; + /** + * givenName (G) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.42) + */ + given_name?: string; + /** + * serialNumber elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.5) + */ + serial_number?: string; + /** + * commonName (CN) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.3) + */ + common_name?: string; + /** + * organizationName (O) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.10) + */ + organization?: string; + /** + * emailAddress (E) elements of the distinguished name (OBJECT IDENTIFIER 1.2.840.113549.1.9.1) + */ + email_address?: string; + /** + * streetAddress (STREET) elements of the distinguished name (OBJECT IDENTIFIER 2.5.4.9) + */ + street_address?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + metadata?: { + post_processed_at?: string; + post_processed?: boolean; + parse_status?: string; + seen_in_scan?: boolean; + updated_at?: string; + added_at?: string; + source?: string; + parse_version?: string; + parse_error?: string; + [k: string]: unknown; + }; + [k: string]: unknown; +} diff --git a/backend/src/models/generated/censysIpv4.ts b/backend/src/models/generated/censysIpv4.ts new file mode 100644 index 00000000..aa5802b4 --- /dev/null +++ b/backend/src/models/generated/censysIpv4.ts @@ -0,0 +1,16214 @@ +/* tslint:disable */ +/** + * This file was automatically generated by json-schema-to-typescript. + * DO NOT MODIFY IT BY HAND. Instead, run "npm run codegen" to regenerate this file. + */ + +export interface CensysIpv4Data { + p11211?: { + memcached?: { + banner?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + certificate?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + chain?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * All server stats, formatted 'key=value key2=value2' + */ + stats?: string; + /** + * What protocol the scanner used when connecting to the server (tcp/tls/udp) + */ + connected_on?: string; + /** + * Is the server willing to use the binary protocol to communicate + */ + binary_protocol_running?: boolean; + /** + * If true, Memcached was detected on this machine. + */ + supported?: boolean; + /** + * Is SASL running on the server + */ + sasl_enabled?: boolean; + /** + * Is the server willing to use the ascii protocol to communicate + */ + ascii_protocol_running?: boolean; + /** + * Memcached version + */ + version?: string; + /** + * libevent version being used by the server + */ + libevent?: string; + /** + * Server responds to UDP + */ + responds_to_udp?: boolean; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p20000?: { + dnp3?: { + status?: { + /** + * Time the scan was run. + */ + timestamp?: string; + support?: boolean; + raw_response?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p3306?: { + mysql?: { + banner?: { + /** + * If the server allows upgrading the session to use TLS, this is the log of the handshake. + */ + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Additional certificates provided by the server. + */ + chain?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * If true, MySQL was detected on this machine. + */ + supported?: boolean; + /** + * Optional string describing the error. Only set if there is an error. + */ + error_message?: string; + /** + * The set of capability flags the server returned in the initial HandshakePacket. Each entry corresponds to a bit being set in the flags; key names correspond to the #defines in the MySQL docs. + */ + capability_flags?: { + CLIENT_IGNORE_SPACE?: boolean; + CLIENT_RESERVED?: boolean; + CLIENT_PLUGIN_AUTH?: boolean; + CLIENT_INTERACTIVE?: boolean; + CLIENT_SECURE_CONNECTION?: boolean; + CLIENT_MULTI_RESULTS?: boolean; + CLIENT_CONNECT_ATTRS?: boolean; + CLIENT_IGNORE_SIGPIPE?: boolean; + CLIENT_TRANSACTIONS?: boolean; + CLIENT_NO_SCHEMA?: boolean; + CLIENT_LONG_FLAG?: boolean; + CLIENT_CONNECT_WITH_DB?: boolean; + CLIENT_SSL?: boolean; + CLIENT_FOUND_ROWS?: boolean; + CLIENT_COMPRESS?: boolean; + CLIENT_LOCAL_FILES?: boolean; + CLIENT_ODBC?: boolean; + CLIENT_PLUGIN_AUTH_LEN_ENC_CLIENT_DATA?: boolean; + CLIENT_LONG_PASSWORD?: boolean; + CLIENT_MULTI_STATEMENTS?: boolean; + CLIENT_SESSION_TRACK?: boolean; + CLIENT_PS_MULTI_RESULTS?: boolean; + CLIENT_PROTOCOL_41?: boolean; + CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS?: boolean; + CLIENT_DEPRECATED_EOF?: boolean; + [k: string]: unknown; + }; + /** + * The set of status flags the server returned in the initial HandshakePacket. Each entry corresponds to a bit being set in the flags; key names correspond to the #defines in the MySQL docs. + */ + status_flags?: { + SERVER_STATUS_DB_DROPPED?: boolean; + SERVER_STATUS_IN_TRANS_READONLY?: boolean; + SERVER_STATUS_CURSOR_EXISTS?: boolean; + SERVER_SESSION_STATE_CHANGED?: boolean; + SERVER_QUERY_NO_INDEX_USED?: boolean; + SERVER_STATUS_IN_TRANS?: boolean; + SERVER_QUERY_NO_GOOD_INDEX_USED?: boolean; + SERVER_MORE_RESULTS_EXISTS?: boolean; + SERVER_STATUS_NO_BACKSLASH_ESCAPES?: boolean; + SERVER_PS_OUT_PARAMS?: boolean; + SERVER_STATUS_METADATA_CHANGED?: boolean; + SERVER_STATUS_AUTOCOMMIT?: boolean; + SERVER_STATUS_LAST_ROW_SENT?: boolean; + SERVER_QUERY_WAS_SLOW?: boolean; + [k: string]: unknown; + }; + /** + * 8-bit unsigned integer representing the server's protocol version sent in the initial HandshakePacket from the server. + */ + protocol_version?: string; + /** + * The friendly name for the error code as defined at https://dev.mysql.com/doc/refman/8.0/en/error-messages-server.html, or UNKNOWN. + */ + error_id?: string; + /** + * Only set if there is an error returned by the server, for example if the scanner is not on the allowed hosts list. + */ + error_code?: string; + /** + * The specific server version returned in the initial HandshakePacket. Often in the form x.y.z, but not always. + */ + server_version?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p161?: { + snmp?: { + banner?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + certificate?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + chain?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * If true, SNMP was detected on this machine. + */ + supported?: boolean; + /** + * 1.3.6.1.2.1.1 - System Variables + */ + oid_system?: { + /** + * 1.3.6.1.2.1.1.3 - 1/100ths of sec + */ + uptime?: string; + /** + * 1.3.6.1.2.1.1.5 - Name, usually FQDN + */ + name?: string; + /** + * 1.3.6.1.2.1.1.1 - Description of entity + */ + descr?: string; + /** + * 1.3.6.1.2.1.1.2 - Vendor ID + */ + object_id?: string; + /** + * 1.3.6.1.2.1.1.4 - Contact info + */ + contact?: string; + /** + * 1.3.6.1.2.1.1.6 - Physical location + */ + location?: string; + /** + * 1.3.6.1.2.1.1.7 - Set of services offered by entity + */ + services?: { + /** + * Physical (e.g. repeaters) + */ + layer_1?: boolean; + /** + * Internet (e.g. IP gateways) + */ + layer_3?: boolean; + /** + * Datalink/subnetwork (e.g. bridges) + */ + layer_2?: boolean; + /** + * OSI layer 5 + */ + layer_5?: boolean; + /** + * End-to-end (e.g. IP hosts) + */ + layer_4?: boolean; + /** + * Applications (e.g. mail relays) + */ + layer_7?: boolean; + /** + * OSI layer 6 + */ + layer_6?: boolean; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * 1.3.6.1.2.1.47.1.1.1.1 - Entity Physical + */ + oid_physical?: { + /** + * 1.3.6.1.2.1.47.1.1.1.1.12 - Name of mfg + */ + manufacturer_name?: string; + /** + * 1.3.6.1.2.1.47.1.1.1.1.9 - Firmware revision string + */ + firmware_rev?: string; + /** + * 1.3.6.1.2.1.47.1.1.1.1.10 - Software revision string + */ + software_rev?: string; + /** + * 1.3.6.1.2.1.47.1.1.1.1.11 - Serial number string + */ + serial_number?: string; + /** + * 1.3.6.1.2.1.47.1.1.1.1.8 - Hardware revision string + */ + hardware_rev?: string; + /** + * 1.3.6.1.2.1.47.1.1.1.1.13 - Model name of component + */ + model_name?: string; + /** + * 1.3.6.1.2.1.47.1.1.1.1.7 - Entity name + */ + name?: string; + [k: string]: unknown; + }; + /** + * 1.3.6.1.2.1.2 - Interfaces + */ + oid_interfaces?: { + /** + * 1.3.6.1.2.1.2.1 - Number of network interfaces + */ + num_interfaces?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p80?: { + http?: { + get?: { + /** + * The HTTP body, truncated according to configured MaxSize (default 256kb). + */ + body?: string; + /** + * HTTP response headers. Names are normalized by converting them to lowercase and replacing hyphens with underscores. When a header is returned multiple times, only the first is included. Values are truncated to 256 bytes. + */ + headers?: { + /** + * The value of the content_length header. + */ + content_length?: string; + /** + * The value of the x-ua-compatible header. + */ + x_ua_compatible?: string; + /** + * The value of the via header. + */ + via?: string; + /** + * The value of the pragma header. + */ + pragma?: string; + /** + * The value of the set_cookie header. + */ + set_cookie?: string; + /** + * The value of the x-powered-by header. + */ + x_powered_by?: string; + /** + * The value of the vary header. + */ + vary?: string; + /** + * The value of the retry_after header. + */ + retry_after?: string; + /** + * The value of the www-authenticate header. + */ + www_authenticate?: string; + /** + * The value of the warning header. + */ + warning?: string; + /** + * The value of the content_language header. + */ + content_language?: string; + /** + * The value of the content_location header. + */ + content_location?: string; + /** + * The value of the p3p header. + */ + p3p?: string; + /** + * The value of the server header. + */ + server?: string; + /** + * The value of the proxy-authenticate header. + */ + proxy_authenticate?: string; + /** + * The value of the proxy-agent header. + */ + proxy_agent?: string; + /** + * The value of the upgrade header. + */ + upgrade?: string; + /** + * Other headers are included as a list of key, value pairs. + */ + unknown?: { + value?: string; + key?: string; + [k: string]: unknown; + }; + /** + * The value of the x-content-type-options header. + */ + x_content_type_options?: string; + /** + * The value of the x-content-security-policy header. + */ + x_content_security_policy?: string; + /** + * The value of the etag header. + */ + etag?: string; + /** + * The value of the content_range header. + */ + content_range?: string; + /** + * The value of the content_encoding header. + */ + content_encoding?: string; + /** + * The value of the access-control-allow-origin header. + */ + access_control_allow_origin?: string; + /** + * The value of the content_md5 header. + */ + content_md5?: string; + /** + * The value of the content_disposition header. + */ + content_disposition?: string; + /** + * The value of the cache_control header. + */ + cache_control?: string; + /** + * The value of the location header. + */ + location?: string; + /** + * The value of the status header. + */ + status?: string; + /** + * The value of the strict-transport-security header. + */ + strict_transport_security?: string; + /** + * The value of the expires header. + */ + expires?: string; + /** + * The value of the accept-patch header. + */ + accept_patch?: string; + /** + * The value of the last_modified header. + */ + last_modified?: string; + /** + * The value of the link header. + */ + link?: string; + /** + * The value of the content_type header. + */ + content_type?: string; + /** + * The value of the date header. + */ + date?: string; + /** + * The value of the x-frame-options header. + */ + x_frame_options?: string; + /** + * The value of the x-webkit-csp header. + */ + x_webkit_csp?: string; + /** + * The value of the x-real-ip header. + */ + x_real_ip?: string; + /** + * The value of the alternate_protocol header. + */ + alternate_protocol?: string; + /** + * The value of the accept-ranges header. + */ + accept_ranges?: string; + /** + * The value of the age header. + */ + age?: string; + /** + * The value of the x-xss-protection header. + */ + x_xss_protection?: string; + /** + * The value of the x-forwarded-for header. + */ + x_forwarded_for?: string; + /** + * The value of the refresh header. + */ + refresh?: string; + /** + * The value of the public-key-pins header. + */ + public_key_pins?: string; + /** + * The value of the connection header. + */ + connection?: string; + /** + * The value of the x-content-duration header. + */ + x_content_duration?: string; + /** + * The value of the alt-svc header. + */ + alt_svc?: string; + /** + * The value of the allow header. + */ + allow?: string; + /** + * The value of the referer header. + */ + referer?: string; + /** + * The value of the content-security-policy header. + */ + content_security_policy?: string; + /** + * The value of the transfer_encoding header. + */ + transfer_encoding?: string; + /** + * The value of the trailer header. + */ + trailer?: string; + [k: string]: unknown; + }; + /** + * The HTTP status code (e.g. 200, 404, 503). + */ + status_code?: string; + /** + * The contents of the first TITLE tag in the body (stripped of any surrounding whitespace and truncated to 1024 characters). + */ + title?: string; + /** + * The full status line returned by the server (e.g. "200 OK" or "401 UNAUTHORIZED") + */ + status_line?: string; + /** + * The SHA2-256 digest of the body. NOTE: This digest is calculated using the same data returned in the body field, so if that was truncated, this will be calculated over the truncated body, rather than full data stored on the server. + */ + body_sha256?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + updated_at?: string; + p1900?: { + upnp?: { + discovery?: { + x_user_agent?: string; + usn?: string; + agent?: string; + server?: string; + ext?: string; + location?: string; + st?: string; + cache_control?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p25?: { + smtp?: { + starttls?: { + /** + * The response to the EHLO command. + */ + ehlo?: string; + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Additional certificates provided by the server. + */ + chain?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The response to the STARTTLS command. + */ + starttls?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * The initial SMTP command sent by the server (e.g. "220 localhost.localdomain ESMTP Postfix (Ubuntu)\r\n" + */ + banner?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p2323?: { + telnet?: { + banner?: { + /** + * The server refuses to perform the listed options, see https://tools.ietf.org/html/rfc854. + */ + wont?: { + /** + * The friendly name of the telnet option. + */ + name?: string; + /** + * The integer value of the telnet option. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server requests the client to perform the listed options, see https://tools.ietf.org/html/rfc854. + */ + do?: { + /** + * The friendly name of the telnet option. + */ + name?: string; + /** + * The integer value of the telnet option. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server requests the client not perform the listed options, see https://tools.ietf.org/html/rfc854. + */ + dont?: { + /** + * The friendly name of the telnet option. + */ + name?: string; + /** + * The integer value of the telnet option. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * Indicates whether the server supports telnet. + */ + support?: boolean; + /** + * The server will perform (or is performing) the listed options, see https://tools.ietf.org/html/rfc854. + */ + will?: { + /** + * The friendly name of the telnet option. + */ + name?: string; + /** + * The integer value of the telnet option. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The banner sent by the server after negotiating the connection options. Truncated at 8kb. + */ + banner?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + zdb_version?: string; + /** + * Integer value of IP address in host order + */ + ipint?: string; + p21?: { + ftp?: { + banner?: { + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * The banner returned by the FTP server (zero or more lines, followed by three decimal digits and optionally a human readable command followed by a final LF, see https://tools.ietf.org/html/rfc354 + */ + banner?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p8888?: { + http?: { + get?: { + /** + * The HTTP body, truncated according to configured MaxSize (default 256kb). + */ + body?: string; + /** + * HTTP response headers. Names are normalized by converting them to lowercase and replacing hyphens with underscores. When a header is returned multiple times, only the first is included. Values are truncated to 256 bytes. + */ + headers?: { + /** + * The value of the content_length header. + */ + content_length?: string; + /** + * The value of the x-ua-compatible header. + */ + x_ua_compatible?: string; + /** + * The value of the via header. + */ + via?: string; + /** + * The value of the pragma header. + */ + pragma?: string; + /** + * The value of the set_cookie header. + */ + set_cookie?: string; + /** + * The value of the x-powered-by header. + */ + x_powered_by?: string; + /** + * The value of the vary header. + */ + vary?: string; + /** + * The value of the retry_after header. + */ + retry_after?: string; + /** + * The value of the www-authenticate header. + */ + www_authenticate?: string; + /** + * The value of the warning header. + */ + warning?: string; + /** + * The value of the content_language header. + */ + content_language?: string; + /** + * The value of the content_location header. + */ + content_location?: string; + /** + * The value of the p3p header. + */ + p3p?: string; + /** + * The value of the server header. + */ + server?: string; + /** + * The value of the proxy-authenticate header. + */ + proxy_authenticate?: string; + /** + * The value of the proxy-agent header. + */ + proxy_agent?: string; + /** + * The value of the upgrade header. + */ + upgrade?: string; + /** + * Other headers are included as a list of key, value pairs. + */ + unknown?: { + value?: string; + key?: string; + [k: string]: unknown; + }; + /** + * The value of the x-content-type-options header. + */ + x_content_type_options?: string; + /** + * The value of the x-content-security-policy header. + */ + x_content_security_policy?: string; + /** + * The value of the etag header. + */ + etag?: string; + /** + * The value of the content_range header. + */ + content_range?: string; + /** + * The value of the content_encoding header. + */ + content_encoding?: string; + /** + * The value of the access-control-allow-origin header. + */ + access_control_allow_origin?: string; + /** + * The value of the content_md5 header. + */ + content_md5?: string; + /** + * The value of the content_disposition header. + */ + content_disposition?: string; + /** + * The value of the cache_control header. + */ + cache_control?: string; + /** + * The value of the location header. + */ + location?: string; + /** + * The value of the status header. + */ + status?: string; + /** + * The value of the strict-transport-security header. + */ + strict_transport_security?: string; + /** + * The value of the expires header. + */ + expires?: string; + /** + * The value of the accept-patch header. + */ + accept_patch?: string; + /** + * The value of the last_modified header. + */ + last_modified?: string; + /** + * The value of the link header. + */ + link?: string; + /** + * The value of the content_type header. + */ + content_type?: string; + /** + * The value of the date header. + */ + date?: string; + /** + * The value of the x-frame-options header. + */ + x_frame_options?: string; + /** + * The value of the x-webkit-csp header. + */ + x_webkit_csp?: string; + /** + * The value of the x-real-ip header. + */ + x_real_ip?: string; + /** + * The value of the alternate_protocol header. + */ + alternate_protocol?: string; + /** + * The value of the accept-ranges header. + */ + accept_ranges?: string; + /** + * The value of the age header. + */ + age?: string; + /** + * The value of the x-xss-protection header. + */ + x_xss_protection?: string; + /** + * The value of the x-forwarded-for header. + */ + x_forwarded_for?: string; + /** + * The value of the refresh header. + */ + refresh?: string; + /** + * The value of the public-key-pins header. + */ + public_key_pins?: string; + /** + * The value of the connection header. + */ + connection?: string; + /** + * The value of the x-content-duration header. + */ + x_content_duration?: string; + /** + * The value of the alt-svc header. + */ + alt_svc?: string; + /** + * The value of the allow header. + */ + allow?: string; + /** + * The value of the referer header. + */ + referer?: string; + /** + * The value of the content-security-policy header. + */ + content_security_policy?: string; + /** + * The value of the transfer_encoding header. + */ + transfer_encoding?: string; + /** + * The value of the trailer header. + */ + trailer?: string; + [k: string]: unknown; + }; + /** + * The HTTP status code (e.g. 200, 404, 503). + */ + status_code?: string; + /** + * The contents of the first TITLE tag in the body (stripped of any surrounding whitespace and truncated to 1024 characters). + */ + title?: string; + /** + * The full status line returned by the server (e.g. "200 OK" or "401 UNAUTHORIZED") + */ + status_line?: string; + /** + * The SHA2-256 digest of the body. NOTE: This digest is calculated using the same data returned in the body field, so if that was truncated, this will be calculated over the truncated body, rather than full data stored on the server. + */ + body_sha256?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p23?: { + telnet?: { + banner?: { + /** + * The server refuses to perform the listed options, see https://tools.ietf.org/html/rfc854. + */ + wont?: { + /** + * The friendly name of the telnet option. + */ + name?: string; + /** + * The integer value of the telnet option. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server requests the client to perform the listed options, see https://tools.ietf.org/html/rfc854. + */ + do?: { + /** + * The friendly name of the telnet option. + */ + name?: string; + /** + * The integer value of the telnet option. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server requests the client not perform the listed options, see https://tools.ietf.org/html/rfc854. + */ + dont?: { + /** + * The friendly name of the telnet option. + */ + name?: string; + /** + * The integer value of the telnet option. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * Indicates whether the server supports telnet. + */ + support?: boolean; + /** + * The server will perform (or is performing) the listed options, see https://tools.ietf.org/html/rfc854. + */ + will?: { + /** + * The friendly name of the telnet option. + */ + name?: string; + /** + * The integer value of the telnet option. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The banner sent by the server after negotiating the connection options. Truncated at 8kb. + */ + banner?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p22?: { + ssh?: { + v2?: { + /** + * See https://tools.ietf.org/html/rfc4253#section-7 + */ + key_exchange?: { + curve25519_sha256_params?: { + server_public?: string; + client_public?: string; + client_private?: string; + [k: string]: unknown; + }; + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * Supported options advertised by the server during key exchange algorithm negotiation. See https://tools.ietf.org/html/rfc4253#section-7 + */ + support?: { + /** + * An ssh public key algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-19 for standard values. + */ + host_key_algorithms?: string; + /** + * Indicates whether a guessed key exchange packet follows, see https://tools.ietf.org/html/rfc4253#section-7.1. + */ + first_kex_follows?: boolean; + /** + * An ssh key exchange algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-15 for standard values. + */ + kex_algorithms?: string; + /** + * Server's supported settings for communications flowing from the server to the client. See https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml + */ + server_to_client?: { + /** + * A name-list of language tags in order of preference. + */ + languages?: string; + /** + * An ssh cipher algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-16 for standard values. + */ + ciphers?: string; + /** + * An ssh MAC algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-18 for standard values. + */ + macs?: string; + /** + * An ssh compression algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-20 for standard values. + */ + compressions?: string; + [k: string]: unknown; + }; + /** + * Server's supported settings for communications flowing from the client to the server. See https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml + */ + client_to_server?: { + /** + * A name-list of language tags in order of preference. + */ + languages?: string; + /** + * An ssh cipher algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-16 for standard values. + */ + ciphers?: string; + /** + * An ssh MAC algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-18 for standard values. + */ + macs?: string; + /** + * An ssh compression algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-20 for standard values. + */ + compressions?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + selected?: { + /** + * The selected host key algorithm + */ + host_key_algorithm?: string; + /** + * The selected key exchange algorithm + */ + kex_algorithm?: string; + server_to_client?: { + /** + * An ssh MAC algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-18 for standard values. + */ + mac?: string; + /** + * An ssh cipher algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-16 for standard values. + */ + cipher?: string; + /** + * An ssh compression algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-20 for standard values. + */ + compression?: string; + [k: string]: unknown; + }; + client_to_server?: { + /** + * An ssh MAC algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-18 for standard values. + */ + mac?: string; + /** + * An ssh cipher algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-16 for standard values. + */ + cipher?: string; + /** + * An ssh compression algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-20 for standard values. + */ + compression?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + server_host_key?: { + /** + * The server host key algorithm. + */ + key_algorithm?: string; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_public_key?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + /** + * The SHA2-256 digest calculated over the encoded key (algorithm + key data) + */ + fingerprint_sha256?: string; + ed25519_public_key?: { + public_bytes?: string; + [k: string]: unknown; + }; + /** + * OpenSSH certificate for host key, see https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?rev=1.8 + */ + certkey_public_key?: { + nonce?: string; + /** + * The hostnames for which this key is valid (empty string=any). + */ + valid_principals?: string; + reserved?: string; + /** + * The OpenSSH certificate signature generated using the signature_key. + */ + signature?: { + value?: string; + signature_algorithm?: { + /** + * An ssh public key algorithm identifier, named according to section 6 of https://www.ietf.org/rfc/rfc4251.txt; see https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-19 for standard values. + */ + name?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Critical OpenSSL certificate options. + */ + critical_options?: { + /** + * A list of any unrecognized critical options in the form "replaced_option_name: option_value", where replaced_option_name is the option name with any hyphens replaced by underscores. + */ + unknown?: string; + /** + * True if and only if the force-command extension is present. + */ + force_command?: boolean; + /** + * True if and only if the source-address extension is present. + */ + source_address?: boolean; + [k: string]: unknown; + }; + validity?: { + /** + * The length of time, in seconds, that the certificate is valid. + */ + length?: string; + /** + * Timestamp of when certificate expires. Timezone is UTC. + */ + valid_before?: string; + /** + * Timestamp of when certificate is first valid. Timezone is UTC. + */ + valid_after?: string; + [k: string]: unknown; + }; + /** + * The CA key used to sign this certificate. + */ + signature_key?: { + /** + * CA key algorithm. + */ + key_algorithm?: string; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_public_key?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + /** + * SHA2-256 digest calculated over the CA key algorithm identifier + raw CA key data. + */ + fingerprint_sha256?: string; + ed25519_public_key?: { + public_bytes?: string; + [k: string]: unknown; + }; + /** + * The public portion of an ECDSA asymmetric key. + */ + ecdsa_public_key?: { + b?: string; + curve?: string; + gy?: string; + n?: string; + p?: string; + length?: string; + pub?: string; + y?: string; + x?: string; + gx?: string; + [k: string]: unknown; + }; + /** + * The public portion of a DSA asymmetric key. + */ + dsa_public_key?: { + q?: string; + p?: string; + y?: string; + g?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Non-critical OpenSSH certificate extensions. + */ + extensions?: { + /** + * True if and only if the permit-X11-forwarding extension is present. + */ + permit_X11_forwarding?: boolean; + /** + * True if and only if the permit-port-forwarding extension is present. + */ + permit_port_forwarding?: boolean; + /** + * A list of any unrecognized extensions in the form "replaced_extension_name: extension_value", where replaced_extension_name is the extension name with any hyphens replaced by underscores. + */ + unknown?: string; + /** + * True if and only if the permit-pty extension is present. + */ + permit_pty?: boolean; + /** + * True if and only if the permit-user-rc extension is present. + */ + permit_user_rc?: boolean; + /** + * True if and only if the permit-agent-forwarding extension is present. + */ + permit_agent_forwarding?: boolean; + [k: string]: unknown; + }; + key?: { + key_algorithm?: string; + algorithm?: string; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_public_key?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + fingerprint_sha256?: string; + raw?: string; + ed25519_public_key?: { + public_bytes?: string; + [k: string]: unknown; + }; + /** + * The public portion of an ECDSA asymmetric key. + */ + ecdsa_public_key?: { + b?: string; + curve?: string; + gy?: string; + n?: string; + p?: string; + length?: string; + pub?: string; + y?: string; + x?: string; + gx?: string; + [k: string]: unknown; + }; + /** + * The public portion of a DSA asymmetric key. + */ + dsa_public_key?: { + q?: string; + p?: string; + y?: string; + g?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Free-form text field set by the CA during issuance; used to identify the principal in log messages. + */ + key_id?: string; + /** + * If present, a description of the error parsing the certificate. + */ + parse_error?: string; + /** + * Certificate serial number (decimal encoded 64-bit integer). + */ + serial?: string; + [k: string]: unknown; + }; + /** + * The public portion of an ECDSA asymmetric key. + */ + ecdsa_public_key?: { + b?: string; + curve?: string; + gy?: string; + n?: string; + p?: string; + length?: string; + pub?: string; + y?: string; + x?: string; + gx?: string; + [k: string]: unknown; + }; + /** + * The public portion of a DSA asymmetric key. + */ + dsa_public_key?: { + q?: string; + p?: string; + y?: string; + g?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The server endpoint ID. + */ + banner?: { + comment?: string; + raw?: string; + version?: string; + software?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p27017?: { + mongodb?: { + banner?: { + /** + * Result of issuing the isMaster command see https://docs.mongodb.com/manual/reference/command/isMaster + */ + is_master?: { + /** + * Indicates whether the server is running in read-only mode. + */ + read_only?: boolean; + /** + * The earliest version of the wire protocol that this server can use. + */ + min_wire_version?: string; + /** + * The latest version of the wire protocol that this server can use. + */ + max_wire_version?: string; + /** + * The time in minutes that a session remains active after its most recent use + */ + logical_session_timeout_minutes?: string; + /** + * Indicates if this node is writable. + */ + is_master?: boolean; + /** + * The maximum number of writes in a single write batch. + */ + max_write_batch_size?: string; + /** + * The maximum size (in bytes) of a BSON wire protocol message. + */ + max_message_size_bytes?: string; + /** + * The maximum size (in bytes) of a BSON object. + */ + max_bson_object_size?: string; + [k: string]: unknown; + }; + /** + * If true, MongoDB was detected on this machine. + */ + supported?: boolean; + /** + * Result of issuing the buildInfo command see https://docs.mongodb.com/manual/reference/command/buildInfo + */ + build_info?: { + /** + * DEPRECATED. + */ + max_wire_version?: string; + /** + * Version of mongodb server + */ + version?: string; + /** + * Git Version of mongodb server + */ + git_version?: string; + /** + * Various debugging information about the build environment. + */ + build_environment?: { + /** + * The buildEnvironment.linkflags field. + */ + link_flags?: string; + /** + * The buildEnvironment.ccflags field. + */ + cc_flags?: string; + /** + * The buildEnvironment.distmod field. + */ + dist_mod?: string; + /** + * The buildEnvironment.cc field. + */ + cc?: string; + /** + * The buildEnvironment.cxxflags field. + */ + cxx_flags?: string; + /** + * The buildEnvironment.cxx field. + */ + cxx?: string; + /** + * The buildEnvironment.distarch field. + */ + dist_arch?: string; + /** + * The buildEnvironment.target_arch field. + */ + target_arch?: string; + /** + * The buildEnvironment.target_os field. + */ + target_os?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + autonomous_system?: { + /** + * The friendly name of the autonomous system. + */ + name?: string; + /** + * DEPRECATED. + */ + rir?: string; + /** + * The autonomous system's CIDR. + */ + routed_prefix?: string; + /** + * The autonomous system's two-letter ISO 3166-1 alpha-2 country code (US, CN, GB, RU, ...). + */ + country_code?: string; + /** + * The name of the organization managning the autonomous system. + */ + organization?: string; + /** + * The ASNs of the autonomous systems between a fixed starting point and the host. + */ + path?: string; + /** + * The ASN (autonomous system number) of the host's autonomous system. + */ + asn?: string; + /** + * Brief description of the autonomous system. + */ + description?: string; + [k: string]: unknown; + }; + p8883?: { + mqtt?: { + banner?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + chain?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * If true, MQTT was detected on this machine. + */ + supported?: boolean; + /** + * Raw CONNACK response packet + */ + raw_conn_ack?: string; + connack?: { + /** + * Raw connect status value + */ + raw?: string; + /** + * Connection status + */ + connect_return?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p5903?: { + vnc?: { + banner?: { + /** + * If server terminates handshake, the reason offered (if any) + */ + connection_fail_reason?: string; + screen?: { + framebuffer_width?: string; + server_pixel_format?: { + /** + * If false, color maps are used + */ + true_color_flag?: string; + /** + * Max value of red pixel + */ + red_max?: string; + /** + * Max value of blue pixel + */ + blue_max?: string; + /** + * how many bits to right shift a pixel datum to get red bits in lsb + */ + blue_shift?: string; + padding_byte_3?: string; + padding_byte_2?: string; + padding_byte_1?: string; + /** + * how many bits to right shift a pixel datum to get red bits in lsb + */ + red_shift?: string; + /** + * Color depth + */ + depth?: string; + /** + * How many bits in a single full pixel datum. Valid values are: 8, 16, 32 + */ + bits_per_pixel?: string; + /** + * If pixel RGB data are in big-endian + */ + big_endian_flag?: string; + /** + * how many bits to right shift a pixel datum to get red bits in lsb + */ + green_shift?: string; + /** + * Max value of green pixel + */ + green_max?: string; + [k: string]: unknown; + }; + /** + * Server advertised desktop name length + */ + desktop_name_len?: string; + framebuffer_height?: string; + [k: string]: unknown; + }; + /** + * If true, VNC was detected on this machine. + */ + supported?: boolean; + pixel_encoding?: { + /** + * server-preferred pixel encoding + */ + name?: string; + /** + * binary value of server-preferred pixel encoding + */ + value?: string; + [k: string]: unknown; + }; + framebuffer_grab_stats?: { + /** + * Number of pixel bytes received + */ + bytes_received?: string; + /** + * True if a framebuffer grab was saved + */ + framebuffer_saved?: boolean; + /** + * Full frames received. Currently capped at 1 + */ + full_frames_received?: string; + /** + * Number of rects sent to re-assemble for one full frame + */ + rects_received?: string; + [k: string]: unknown; + }; + security_types?: { + /** + * server-specified security option + */ + name?: string; + /** + * binary value of server-specified security option + */ + value?: string; + [k: string]: unknown; + }; + server_protocol_version?: { + /** + * Full VNC Protocol Version String + */ + version_string?: string; + /** + * Version minor + */ + version_minor?: string; + /** + * Version major + */ + version_major?: string; + [k: string]: unknown; + }; + /** + * Desktop name provided by the server, capped at 255 bytes + */ + desktop_name?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p5902?: { + vnc?: { + banner?: { + /** + * If server terminates handshake, the reason offered (if any) + */ + connection_fail_reason?: string; + screen?: { + framebuffer_width?: string; + server_pixel_format?: { + /** + * If false, color maps are used + */ + true_color_flag?: string; + /** + * Max value of red pixel + */ + red_max?: string; + /** + * Max value of blue pixel + */ + blue_max?: string; + /** + * how many bits to right shift a pixel datum to get red bits in lsb + */ + blue_shift?: string; + padding_byte_3?: string; + padding_byte_2?: string; + padding_byte_1?: string; + /** + * how many bits to right shift a pixel datum to get red bits in lsb + */ + red_shift?: string; + /** + * Color depth + */ + depth?: string; + /** + * How many bits in a single full pixel datum. Valid values are: 8, 16, 32 + */ + bits_per_pixel?: string; + /** + * If pixel RGB data are in big-endian + */ + big_endian_flag?: string; + /** + * how many bits to right shift a pixel datum to get red bits in lsb + */ + green_shift?: string; + /** + * Max value of green pixel + */ + green_max?: string; + [k: string]: unknown; + }; + /** + * Server advertised desktop name length + */ + desktop_name_len?: string; + framebuffer_height?: string; + [k: string]: unknown; + }; + /** + * If true, VNC was detected on this machine. + */ + supported?: boolean; + pixel_encoding?: { + /** + * server-preferred pixel encoding + */ + name?: string; + /** + * binary value of server-preferred pixel encoding + */ + value?: string; + [k: string]: unknown; + }; + framebuffer_grab_stats?: { + /** + * Number of pixel bytes received + */ + bytes_received?: string; + /** + * True if a framebuffer grab was saved + */ + framebuffer_saved?: boolean; + /** + * Full frames received. Currently capped at 1 + */ + full_frames_received?: string; + /** + * Number of rects sent to re-assemble for one full frame + */ + rects_received?: string; + [k: string]: unknown; + }; + security_types?: { + /** + * server-specified security option + */ + name?: string; + /** + * binary value of server-specified security option + */ + value?: string; + [k: string]: unknown; + }; + server_protocol_version?: { + /** + * Full VNC Protocol Version String + */ + version_string?: string; + /** + * Version minor + */ + version_minor?: string; + /** + * Version major + */ + version_major?: string; + [k: string]: unknown; + }; + /** + * Desktop name provided by the server, capped at 255 bytes + */ + desktop_name?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p5901?: { + vnc?: { + banner?: { + /** + * If server terminates handshake, the reason offered (if any) + */ + connection_fail_reason?: string; + screen?: { + framebuffer_width?: string; + server_pixel_format?: { + /** + * If false, color maps are used + */ + true_color_flag?: string; + /** + * Max value of red pixel + */ + red_max?: string; + /** + * Max value of blue pixel + */ + blue_max?: string; + /** + * how many bits to right shift a pixel datum to get red bits in lsb + */ + blue_shift?: string; + padding_byte_3?: string; + padding_byte_2?: string; + padding_byte_1?: string; + /** + * how many bits to right shift a pixel datum to get red bits in lsb + */ + red_shift?: string; + /** + * Color depth + */ + depth?: string; + /** + * How many bits in a single full pixel datum. Valid values are: 8, 16, 32 + */ + bits_per_pixel?: string; + /** + * If pixel RGB data are in big-endian + */ + big_endian_flag?: string; + /** + * how many bits to right shift a pixel datum to get red bits in lsb + */ + green_shift?: string; + /** + * Max value of green pixel + */ + green_max?: string; + [k: string]: unknown; + }; + /** + * Server advertised desktop name length + */ + desktop_name_len?: string; + framebuffer_height?: string; + [k: string]: unknown; + }; + /** + * If true, VNC was detected on this machine. + */ + supported?: boolean; + pixel_encoding?: { + /** + * server-preferred pixel encoding + */ + name?: string; + /** + * binary value of server-preferred pixel encoding + */ + value?: string; + [k: string]: unknown; + }; + framebuffer_grab_stats?: { + /** + * Number of pixel bytes received + */ + bytes_received?: string; + /** + * True if a framebuffer grab was saved + */ + framebuffer_saved?: boolean; + /** + * Full frames received. Currently capped at 1 + */ + full_frames_received?: string; + /** + * Number of rects sent to re-assemble for one full frame + */ + rects_received?: string; + [k: string]: unknown; + }; + security_types?: { + /** + * server-specified security option + */ + name?: string; + /** + * binary value of server-specified security option + */ + value?: string; + [k: string]: unknown; + }; + server_protocol_version?: { + /** + * Full VNC Protocol Version String + */ + version_string?: string; + /** + * Version minor + */ + version_minor?: string; + /** + * Version major + */ + version_major?: string; + [k: string]: unknown; + }; + /** + * Desktop name provided by the server, capped at 255 bytes + */ + desktop_name?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p5900?: { + vnc?: { + banner?: { + /** + * If server terminates handshake, the reason offered (if any) + */ + connection_fail_reason?: string; + screen?: { + framebuffer_width?: string; + server_pixel_format?: { + /** + * If false, color maps are used + */ + true_color_flag?: string; + /** + * Max value of red pixel + */ + red_max?: string; + /** + * Max value of blue pixel + */ + blue_max?: string; + /** + * how many bits to right shift a pixel datum to get red bits in lsb + */ + blue_shift?: string; + padding_byte_3?: string; + padding_byte_2?: string; + padding_byte_1?: string; + /** + * how many bits to right shift a pixel datum to get red bits in lsb + */ + red_shift?: string; + /** + * Color depth + */ + depth?: string; + /** + * How many bits in a single full pixel datum. Valid values are: 8, 16, 32 + */ + bits_per_pixel?: string; + /** + * If pixel RGB data are in big-endian + */ + big_endian_flag?: string; + /** + * how many bits to right shift a pixel datum to get red bits in lsb + */ + green_shift?: string; + /** + * Max value of green pixel + */ + green_max?: string; + [k: string]: unknown; + }; + /** + * Server advertised desktop name length + */ + desktop_name_len?: string; + framebuffer_height?: string; + [k: string]: unknown; + }; + /** + * If true, VNC was detected on this machine. + */ + supported?: boolean; + pixel_encoding?: { + /** + * server-preferred pixel encoding + */ + name?: string; + /** + * binary value of server-preferred pixel encoding + */ + value?: string; + [k: string]: unknown; + }; + framebuffer_grab_stats?: { + /** + * Number of pixel bytes received + */ + bytes_received?: string; + /** + * True if a framebuffer grab was saved + */ + framebuffer_saved?: boolean; + /** + * Full frames received. Currently capped at 1 + */ + full_frames_received?: string; + /** + * Number of rects sent to re-assemble for one full frame + */ + rects_received?: string; + [k: string]: unknown; + }; + security_types?: { + /** + * server-specified security option + */ + name?: string; + /** + * binary value of server-specified security option + */ + value?: string; + [k: string]: unknown; + }; + server_protocol_version?: { + /** + * Full VNC Protocol Version String + */ + version_string?: string; + /** + * Version minor + */ + version_minor?: string; + /** + * Version major + */ + version_major?: string; + [k: string]: unknown; + }; + /** + * Desktop name provided by the server, capped at 255 bytes + */ + desktop_name?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p1521?: { + oracle?: { + /** + * The log of the Oracle / TDS handshake process. + */ + banner?: { + /** + * The TLS handshake with the server (if applicable). + */ + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Additional certificates provided by the server. + */ + chain?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The data from the Refuse packet returned by the server; it is empty if the server does not return a Refuse packet. + */ + refuse_error_raw?: string; + /** + * The protocol version number from the Accept packet. + */ + accept_version?: string; + /** + * The parsed connect descriptor returned by the server in the redirect packet, if one is sent. Otherwise, omitted. The parsed descriptor is a list of objects with key and value, where the keys strings like 'DESCRIPTION.CONNECT_DATA.SERVICE_NAME'. + */ + redirect_target?: { + /** + * The descriptor value. + */ + value?: string; + /** + * The dot-separated path to the descriptor + */ + key?: string; + [k: string]: unknown; + }; + /** + * The 'SysReason' returned by the server in the RefusePacket, as an 8-bit unsigned hex string. Omitted if the server did not send a Refuse packet. + */ + refuse_reason_sys?: string; + /** + * The parsed DESCRIPTION.VSNNUM field from the RefuseError descriptor returned by the server in the Refuse packet, in dotted-decimal format. + */ + refuse_version?: string; + /** + * If true, Oracle was detected on this machine. + */ + supported?: boolean; + /** + * A map from the native Service Negotation service names to the ReleaseVersion (in dotted-decimal format) in that service packet. + */ + nsn_service_versions?: { + DataIntegrity?: string; + Encryption?: string; + Authentication?: string; + Supervisor?: string; + [k: string]: unknown; + }; + /** + * Set of flags that the server returns in the Accept packet. + */ + global_service_options?: { + HEADER_CHECKSUM?: boolean; + HALF_DUPLEX?: boolean; + UNKNOWN_0001?: boolean; + PACKET_CHECKSUM?: boolean; + CAN_SEND_ATTENTION?: boolean; + FULL_DUPLEX?: boolean; + ATTENTION_PROCESSING?: boolean; + UNKNOWN_0040?: boolean; + UNKNOWN_0100?: boolean; + UNKNOWN_0080?: boolean; + UNKNOWN_0020?: boolean; + BROKEN_CONNECT_NOTIFY?: boolean; + CAN_RECEIVE_ATTENTION?: boolean; + DIRECT_IO?: boolean; + [k: string]: unknown; + }; + /** + * True if the server sent a Resend packet request in response to the client's first Connect packet. + */ + did_resend?: boolean; + /** + * The parsed descriptor returned by the server in the Refuse packet; it is empty if the server does not return a Refuse packet. The keys are strings like 'DESCRIPTION.ERROR_STACK.ERROR.CODE'. + */ + refuse_error?: { + /** + * The descriptor value. + */ + value?: string; + /** + * The dot-separated path to the descriptor + */ + key?: string; + [k: string]: unknown; + }; + /** + * The 'AppReason' returned by the server in the RefusePacket, as an 8-bit unsigned hex string. Omitted if the server did not send a Refuse packet. + */ + refuse_reason_app?: string; + /** + * The connect descriptor returned by the server in the Redirect packet, if one is sent. Otherwise, omitted. + */ + redirect_target_raw?: string; + /** + * The ReleaseVersion string (in dotted-decimal format) in the root of the Native Service Negotiation packet. + */ + nsn_version?: string; + /** + * The first set of ConnectFlags returned in the Accept packet. + */ + connect_flags0?: { + INTERCHANGE_INVOLVED?: boolean; + SERVICES_WANTED?: boolean; + SERVICES_ENABLED?: boolean; + SERVICES_LINKED_IN?: boolean; + SERVICES_REQUIRED?: boolean; + UNKNOWN_40?: boolean; + UNKNOWN_20?: boolean; + UNKNOWN_80?: boolean; + [k: string]: unknown; + }; + /** + * The second set of ConnectFlags returned in the Accept packet. + */ + connect_flags1?: { + INTERCHANGE_INVOLVED?: boolean; + SERVICES_WANTED?: boolean; + SERVICES_ENABLED?: boolean; + SERVICES_LINKED_IN?: boolean; + SERVICES_REQUIRED?: boolean; + UNKNOWN_40?: boolean; + UNKNOWN_20?: boolean; + UNKNOWN_80?: boolean; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p3389?: { + rdp?: { + banner?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + chain?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + selected_security_protocol?: { + tls?: boolean; + /** + * Set for both error and success. 0 = PROTOCOL_RDP. + */ + raw_value?: string; + rdstls?: boolean; + standard_rdp?: boolean; + error_hybrid_required?: boolean; + credssp_early_auth?: boolean; + error_bad_flags?: boolean; + error_ssl_forbidden?: boolean; + error_ssl_cert_missing?: boolean; + credssp?: boolean; + error_ssl_user_auth_required?: boolean; + error?: boolean; + error_ssl_required?: boolean; + error_unknown?: boolean; + [k: string]: unknown; + }; + connect_response?: { + connect_id?: string; + domain_parameters?: { + max_mcspdu_size?: string; + max_user_id_channels?: string; + min_octets_per_second?: string; + domain_protocol_ver?: string; + tcs_per_mcs?: string; + max_token_ids?: string; + max_provider_height?: string; + max_channel_ids?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * If true, RDP was detected on this machine. + */ + supported?: boolean; + version?: { + raw_value?: string; + major?: string; + minor?: string; + [k: string]: unknown; + }; + protocol_supported_flags?: { + dynvc_graphics_pipeline?: boolean; + neg_resp_reserved?: boolean; + redirected_auth_mode?: boolean; + restricted_admin_mode?: boolean; + extended_client_data_supported?: boolean; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p623?: { + ipmi?: { + /** + * The IPMI scan response. All section numbers refer to https://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/ipmi-second-gen-interface-spec-v2-rev1-1.pdf. + */ + banner?: { + /** + * The RMCP header of the response, (section 13.1.3) + */ + rmcp_header?: { + /** + * The version. This scanner supports version 6. + */ + version?: string; + /** + * Reserved for future use. 0 for version 6. + */ + reserved?: string; + /** + * The class of the message + */ + message_class?: { + /** + * True if the message is an acknowledgment to a previous message, omitted otherwise + */ + is_ack?: boolean; + /** + * The raw message class byte. + */ + raw?: string; + /** + * Reserved. Omitted if 0. + */ + reserved?: string; + /** + * Just the class part of the byte (lower 5 bits of raw) + */ + class?: string; + /** + * The human-readable name of the message class + */ + name?: string; + [k: string]: unknown; + }; + /** + * Sequence number of this packet in the session. + */ + sequence_number?: string; + [k: string]: unknown; + }; + /** + * If true, IPMI was detected on this machine. + */ + supported?: boolean; + /** + * The Get Channel Authentication Capabilities response (section 22.13) + */ + capabilities?: { + /** + * The status code of the response + */ + completion_code?: { + /** + * The raw completion code + */ + raw?: string; + /** + * The human-readable name of the code + */ + name?: string; + [k: string]: unknown; + }; + /** + * The auth types supported by the server + */ + supported_auth_types?: { + /** + * True if the OEM Proprietary AuthType is supported. Omitted otherwise. + */ + oem_proprietary?: boolean; + /** + * True if the None AuthType is supported. Omitted otherwise. + */ + none?: boolean; + /** + * True if the Extended authentication is supported. Omitted otherwise. + */ + extended?: boolean; + /** + * The reserved bits. Omitted if zero. + */ + reserved?: string; + /** + * The raw byte, with the bit mask etc + */ + raw?: string; + /** + * True if the MD2 AuthType is supported. Omitted otherwise. + */ + md2?: boolean; + /** + * True if the Password AuthType is supported. Omitted otherwise. + */ + password?: boolean; + /** + * True if the MD5 AuthType is supported. Omitted otherwise. + */ + md5?: boolean; + [k: string]: unknown; + }; + /** + * The OEM-specific data + */ + oem_data?: string; + /** + * The response channel number + */ + channel_number?: string; + /** + * The 3-byte OEM identifier + */ + oem_id?: string; + /** + * Extended auth capabilities (if present) + */ + extended_capabilities?: { + /** + * True if IPMI v1.5 is supported + */ + supports_ipmi_v1_5?: boolean; + /** + * Reserved. Omitted if 0. + */ + reserved?: string; + /** + * True if IPMI v2.0 is supported + */ + supports_ipmi_v2_0?: boolean; + [k: string]: unknown; + }; + /** + * The authentication status + */ + auth_status?: { + /** + * If true, the server allows anonymous login. Otherwise omitted. + */ + anonymous_login_enabled?: boolean; + /** + * If true, the server has anonymous users. Otherwise omitted. + */ + has_anonymous_users?: boolean; + /** + * If true, each message must be authenticated. Otherwise omitted. + */ + auth_each_message?: boolean; + /** + * Reserved. Omitted if zero. + */ + reserved?: string; + /** + * The KG field. true if present, otherwise omitted. + */ + two_key_login_required?: boolean; + /** + * If true, user authentication is disabled. Otherwise omitted. + */ + user_auth_disabled?: boolean; + /** + * If true, the server supports named users. Otherwise omitted. + */ + has_named_users?: boolean; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The raw data returned by the server + */ + raw?: string; + /** + * The IPMI sesssion header of the response + */ + ipmi_header?: { + /** + * The authentication type for this request (see section 13.6) + */ + auth_type?: { + /** + * The raw value of the auth_type + */ + raw?: string; + /** + * Reserved. Omitted if zero. + */ + reserved?: string; + /** + * The human-readable name of the auth type. + */ + name?: string; + /** + * Just the auth type (reserved bits omitted) + */ + type?: string; + [k: string]: unknown; + }; + /** + * The expected length of the IPMI payload. Omitted if zero. + */ + length?: string; + /** + * The ID of this session; omitted if zero. + */ + session_id?: string; + /** + * The session sequence number of this packet in the session + */ + sequence_number?: string; + /** + * The 16-byte authentication code; not present if auth_type is None + */ + auth_code?: string; + [k: string]: unknown; + }; + /** + * The IPMI command payload + */ + ipmi_payload?: { + /** + * The NetFn and LUN + */ + net_fn?: { + /** + * The raw value of the (NetFn << 2) | LUN + */ + raw?: string; + /** + * The parsed NetFn value (the upper 6 bits of raw) + */ + net_fn?: { + /** + * True if the least-significant bit is one, omitted otherwise. + */ + is_response?: boolean; + /** + * True if the least-significant bit is zero, omitted otherwise. + */ + is_request?: boolean; + /** + * The human-readable name of the NetFn + */ + name?: string; + /** + * The normalized value of the NetFn (i.e. raw & 0xfe, so it is always even) + */ + value?: string; + /** + * The raw value of the NetFn (6 bits, least significant indicates request/response) + */ + raw?: string; + [k: string]: unknown; + }; + /** + * The parsed LUN (logical unit number -- the lower 2 bits of raw) + */ + lun?: { + /** + * The value of the LUN (3 bits) + */ + raw?: string; + /** + * The human-readable name of the LUN + */ + name?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is set to true if the values of chk1 / chk2 do not match the command data; otherwise it is omitted. + */ + checksum_error?: boolean; + /** + * The parsed IPMI command number + */ + cmd?: { + /** + * The raw value of the cmd value + */ + raw?: string; + /** + * The human-readable name of the cmd + NetFn + */ + name?: string; + [k: string]: unknown; + }; + /** + * The chk1 field (chk1 = -((RsAddr + NetFn) & 0xff) + */ + chk1?: string; + /** + * The chk2 field (chk2 = -((rq_addr + rq_seq + cmd + data[:]) & 0xff) + */ + chk2?: string; + /** + * The request sequence number. + */ + rq_seq?: string; + /** + * The response address + */ + rs_addr?: { + /** + * The raw address byte (including the slave/software_id bit) + */ + raw?: string; + /** + * Indicates that the address refers to a software identifier. Set to true if the least significant bit of raw is one, otherwise absent. + */ + software_id?: boolean; + /** + * Indicates that the address refers to a slave device. Set to true if the least significant bit of raw is zero, otherwise absent. + */ + slave?: boolean; + /** + * The address, with the slave/software_id bit removed. + */ + address?: string; + [k: string]: unknown; + }; + /** + * The request address + */ + rq_addr?: { + /** + * The raw address byte (including the slave/software_id bit) + */ + raw?: string; + /** + * Indicates that the address refers to a software identifier. Set to true if the least significant bit of raw is one, otherwise absent. + */ + software_id?: boolean; + /** + * Indicates that the address refers to a slave device. Set to true if the least significant bit of raw is zero, otherwise absent. + */ + slave?: boolean; + /** + * The address, with the slave/software_id bit removed. + */ + address?: string; + [k: string]: unknown; + }; + /** + * The raw data. On success, this should be the value of the GetAuthenticationCapabilities resopnse. + */ + data?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p16993?: { + https?: { + get?: { + /** + * The HTTP body, truncated according to configured MaxSize (default 256kb). + */ + body?: string; + /** + * HTTP response headers. Names are normalized by converting them to lowercase and replacing hyphens with underscores. When a header is returned multiple times, only the first is included. Values are truncated to 256 bytes. + */ + headers?: { + /** + * The value of the content_length header. + */ + content_length?: string; + /** + * The value of the x-ua-compatible header. + */ + x_ua_compatible?: string; + /** + * The value of the via header. + */ + via?: string; + /** + * The value of the pragma header. + */ + pragma?: string; + /** + * The value of the set_cookie header. + */ + set_cookie?: string; + /** + * The value of the x-powered-by header. + */ + x_powered_by?: string; + /** + * The value of the vary header. + */ + vary?: string; + /** + * The value of the retry_after header. + */ + retry_after?: string; + /** + * The value of the www-authenticate header. + */ + www_authenticate?: string; + /** + * The value of the warning header. + */ + warning?: string; + /** + * The value of the content_language header. + */ + content_language?: string; + /** + * The value of the content_location header. + */ + content_location?: string; + /** + * The value of the p3p header. + */ + p3p?: string; + /** + * The value of the server header. + */ + server?: string; + /** + * The value of the proxy-authenticate header. + */ + proxy_authenticate?: string; + /** + * The value of the proxy-agent header. + */ + proxy_agent?: string; + /** + * The value of the upgrade header. + */ + upgrade?: string; + /** + * Other headers are included as a list of key, value pairs. + */ + unknown?: { + value?: string; + key?: string; + [k: string]: unknown; + }; + /** + * The value of the x-content-type-options header. + */ + x_content_type_options?: string; + /** + * The value of the x-content-security-policy header. + */ + x_content_security_policy?: string; + /** + * The value of the etag header. + */ + etag?: string; + /** + * The value of the content_range header. + */ + content_range?: string; + /** + * The value of the content_encoding header. + */ + content_encoding?: string; + /** + * The value of the access-control-allow-origin header. + */ + access_control_allow_origin?: string; + /** + * The value of the content_md5 header. + */ + content_md5?: string; + /** + * The value of the content_disposition header. + */ + content_disposition?: string; + /** + * The value of the cache_control header. + */ + cache_control?: string; + /** + * The value of the location header. + */ + location?: string; + /** + * The value of the status header. + */ + status?: string; + /** + * The value of the strict-transport-security header. + */ + strict_transport_security?: string; + /** + * The value of the expires header. + */ + expires?: string; + /** + * The value of the accept-patch header. + */ + accept_patch?: string; + /** + * The value of the last_modified header. + */ + last_modified?: string; + /** + * The value of the link header. + */ + link?: string; + /** + * The value of the content_type header. + */ + content_type?: string; + /** + * The value of the date header. + */ + date?: string; + /** + * The value of the x-frame-options header. + */ + x_frame_options?: string; + /** + * The value of the x-webkit-csp header. + */ + x_webkit_csp?: string; + /** + * The value of the x-real-ip header. + */ + x_real_ip?: string; + /** + * The value of the alternate_protocol header. + */ + alternate_protocol?: string; + /** + * The value of the accept-ranges header. + */ + accept_ranges?: string; + /** + * The value of the age header. + */ + age?: string; + /** + * The value of the x-xss-protection header. + */ + x_xss_protection?: string; + /** + * The value of the x-forwarded-for header. + */ + x_forwarded_for?: string; + /** + * The value of the refresh header. + */ + refresh?: string; + /** + * The value of the public-key-pins header. + */ + public_key_pins?: string; + /** + * The value of the connection header. + */ + connection?: string; + /** + * The value of the x-content-duration header. + */ + x_content_duration?: string; + /** + * The value of the alt-svc header. + */ + alt_svc?: string; + /** + * The value of the allow header. + */ + allow?: string; + /** + * The value of the referer header. + */ + referer?: string; + /** + * The value of the content-security-policy header. + */ + content_security_policy?: string; + /** + * The value of the transfer_encoding header. + */ + transfer_encoding?: string; + /** + * The value of the trailer header. + */ + trailer?: string; + [k: string]: unknown; + }; + /** + * The HTTP status code (e.g. 200, 404, 503). + */ + status_code?: string; + /** + * The contents of the first TITLE tag in the body (stripped of any surrounding whitespace and truncated to 1024 characters). + */ + title?: string; + /** + * The full status line returned by the server (e.g. "200 OK" or "401 UNAUTHORIZED") + */ + status_line?: string; + /** + * The SHA2-256 digest of the body. NOTE: This digest is calculated using the same data returned in the body field, so if that was truncated, this will be calculated over the truncated body, rather than full data stored on the server. + */ + body_sha256?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p53?: { + dns?: { + lookup?: { + errors?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + support?: boolean; + open_resolver?: boolean; + answers?: { + type?: string; + name?: string; + response?: string; + [k: string]: unknown; + }; + resolves_correctly?: boolean; + additionals?: { + type?: string; + name?: string; + response?: string; + [k: string]: unknown; + }; + questions?: { + type?: string; + name?: string; + [k: string]: unknown; + }; + authorities?: { + type?: string; + name?: string; + response?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + location?: { + /** + * The state or province name of the detected location. + */ + province?: string; + /** + * The English name of the detected city. + */ + city?: string; + /** + * The English name of the detected country. + */ + country?: string; + /** + * The estimated longitude of the detected location. + */ + longitude?: number; + /** + * The English name of the registered country. + */ + registered_country?: string; + /** + * The registered country's two-letter ISO 3166-1 alpha-2 country code (US, CN, GB, RU, ...). + */ + registered_country_code?: string; + /** + * The postal code (if applicable) of the detected location. + */ + postal_code?: string; + /** + * The detected two-letter ISO 3166-1 alpha-2 country code (US, CN, GB, RU, ...). + */ + country_code?: string; + /** + * The estimated latitude of the detected location. + */ + latitude?: number; + /** + * The IANA time zone database name of the detected location. + */ + timezone?: string; + /** + * The English name of the detected continent (North America, Europe, Asia, South America, Africa, Oceania, Antarctica) + */ + continent?: string; + [k: string]: unknown; + }; + ip?: string; + p110?: { + pop3?: { + starttls?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Additional certificates provided by the server. + */ + chain?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * The response to the starttls command. + */ + starttls?: string; + /** + * The IMAP/POP3 command sent by the server immediately upon connection. + */ + banner?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p5672?: { + amqp?: { + banner?: { + /** + * If true, AMQP was detected on this machine. + */ + supported?: boolean; + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + chain?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + protocol_id?: { + /** + * Protocol ID + */ + id?: string; + /** + * Decoded protocol ID + */ + name?: string; + [k: string]: unknown; + }; + version?: { + /** + * version major + */ + major?: string; + /** + * version minor + */ + minor?: string; + /** + * version revision + */ + revision?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p6443?: { + kubernetes?: { + banner?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + certificate?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + chain?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + roles?: { + roles?: { + /** + * individual rules set for a specific role + */ + rules?: { + /** + * Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds + */ + verbs?: string; + /** + * APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed + */ + api_groups?: string; + /** + * Resources is a list of resources this rule applies to. ResourceAll represents all resources + */ + resources?: string; + [k: string]: unknown; + }; + /** + * Name of a role + */ + name?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Information about this version of kubernetes + */ + version_info?: { + /** + * Date version was built + */ + build_date?: string; + /** + * Kubernetes major version + */ + major?: string; + /** + * Version of GO used for kubernetes + */ + go_version?: string; + git_version?: string; + /** + * Platform it was compiled for + */ + platform?: string; + /** + * Hash of git commit version is built from + */ + git_commit?: string; + /** + * State of the tree when build + */ + git_tree_state?: string; + /** + * Kubernetes minor version + */ + minor?: string; + /** + * Go Compiler user + */ + compiler?: string; + [k: string]: unknown; + }; + /** + * If true, Kubernetes was detected on this machine. + */ + supported?: boolean; + /** + * True if the dashboard is running and accessible + */ + dashboard_running?: boolean; + nodes?: { + items?: { + /** + * Status of the Node + */ + status?: { + /** + * AttachedVolume describes a volume attached to a node + */ + volumes_attached?: { + /** + * DevicePath represents the device path where the volume should be available + */ + device_path?: string; + /** + * Name of the attached volume + */ + name?: string; + [k: string]: unknown; + }; + /** + * NodeDaemonEndpoints lists ports opened by daemons running on the Node. + */ + daemon_endpoints?: { + /** + * Endpoint on which Kubelet is listening + */ + kubelet_endpoint?: { + /** + * port on which Kubelet is listening + */ + port?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * address reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses + */ + addresses?: { + /** + * Node address type, one of Hostname, ExternalIP or InternalIP. + */ + type?: string; + /** + * the node address, IP/URL + */ + address?: string; + [k: string]: unknown; + }; + /** + * General information about the node, such as kernel version, Kubernetes version (kubelet and kube-proxy version), Docker version (if used), OS name. The information is gathered by Kubelet from the node + */ + node_info?: { + /** + * kube Proxy Version + */ + kube_proxy_version?: string; + /** + * OS family running on the container + */ + operating_system?: string; + /** + * Container Software version + */ + container_runtime_version?: string; + /** + * Kernel running on the node + */ + kernel_version?: string; + /** + * Docker OS image running on the node + */ + os_image?: string; + /** + * node's architecture + */ + architecture?: string; + /** + * kubelet version + */ + kubelet_version?: string; + [k: string]: unknown; + }; + /** + * List of attachable volumes in use (mounted) by the node + */ + volumes_in_use?: string; + /** + * List of container images on this node + */ + images?: { + /** + * Names by which this image is known. e.g. ['k8s.gcr.io/hyperkube:v1.0.7', 'dockerhub.io/google_containers/hyperkube:v1.0.7'] + */ + names?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + */ + metadata?: { + /** + * Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names + */ + name?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + endpoints?: { + items?: { + subsets?: { + addresses?: { + ip?: string; + hostname?: string; + node_name?: string; + [k: string]: unknown; + }; + ports?: { + protocol?: string; + name?: string; + port?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + metadata?: { + self_link?: string; + name?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + pods?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p587?: { + smtp?: { + starttls?: { + /** + * The response to the EHLO command. + */ + ehlo?: string; + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Additional certificates provided by the server. + */ + chain?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The response to the STARTTLS command. + */ + starttls?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * The initial SMTP command sent by the server (e.g. "220 localhost.localdomain ESMTP Postfix (Ubuntu)\r\n" + */ + banner?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + tags?: string; + p1911?: { + fox?: { + device_id?: { + vm_name?: string; + version?: string; + host_address?: string; + vm_version?: string; + app_name?: string; + language?: string; + os_version?: string; + auth_agent_type?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + support?: boolean; + hostname?: string; + time_zone?: string; + brand_id?: string; + os_name?: string; + vm_uuid?: string; + sys_info?: string; + host_id?: string; + station_name?: string; + app_version?: string; + id?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p1883?: { + mqtt?: { + banner?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + chain?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * If true, MQTT was detected on this machine. + */ + supported?: boolean; + /** + * Raw CONNACK response packet + */ + raw_conn_ack?: string; + connack?: { + /** + * Raw connect status value + */ + raw?: string; + /** + * Connection status + */ + connect_return?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p5632?: { + pca?: { + banner?: { + status?: { + /** + * Full 'ST' query response + */ + st_raw?: string; + /** + * Workstation is In Use if true, Available if false + */ + in_use?: boolean; + [k: string]: unknown; + }; + /** + * Workstation Name, with padding bytes removed + */ + workstation_name?: string; + /** + * If true, PCA was detected on this machine. + */ + supported?: boolean; + /** + * Full 'NR' query response + */ + nr_raw?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p1433?: { + mssql?: { + banner?: { + /** + * The TLS handshake with the server (for non-encrypted connections, this used only for the authentication phase). + */ + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Additional certificates provided by the server. + */ + chain?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * If true, MSSQL was detected on this machine. + */ + supported?: boolean; + /** + * The negotiated encryption mode for the session. See https://msdn.microsoft.com/en-us/library/dd357559.aspx for details. + */ + encrypt_mode?: string; + /** + * The value of the INSTANCE field returned by the server in the PRELOGIN response. + */ + instance_name?: string; + /** + * The MSSQL version returned by the server in the PRELOGIN response. Its format is 'MAJOR.MINOR.BUILD_NUMBER'. + */ + version?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p8080?: { + http?: { + get?: { + /** + * The HTTP body, truncated according to configured MaxSize (default 256kb). + */ + body?: string; + /** + * HTTP response headers. Names are normalized by converting them to lowercase and replacing hyphens with underscores. When a header is returned multiple times, only the first is included. Values are truncated to 256 bytes. + */ + headers?: { + /** + * The value of the content_length header. + */ + content_length?: string; + /** + * The value of the x-ua-compatible header. + */ + x_ua_compatible?: string; + /** + * The value of the via header. + */ + via?: string; + /** + * The value of the pragma header. + */ + pragma?: string; + /** + * The value of the set_cookie header. + */ + set_cookie?: string; + /** + * The value of the x-powered-by header. + */ + x_powered_by?: string; + /** + * The value of the vary header. + */ + vary?: string; + /** + * The value of the retry_after header. + */ + retry_after?: string; + /** + * The value of the www-authenticate header. + */ + www_authenticate?: string; + /** + * The value of the warning header. + */ + warning?: string; + /** + * The value of the content_language header. + */ + content_language?: string; + /** + * The value of the content_location header. + */ + content_location?: string; + /** + * The value of the p3p header. + */ + p3p?: string; + /** + * The value of the server header. + */ + server?: string; + /** + * The value of the proxy-authenticate header. + */ + proxy_authenticate?: string; + /** + * The value of the proxy-agent header. + */ + proxy_agent?: string; + /** + * The value of the upgrade header. + */ + upgrade?: string; + /** + * Other headers are included as a list of key, value pairs. + */ + unknown?: { + value?: string; + key?: string; + [k: string]: unknown; + }; + /** + * The value of the x-content-type-options header. + */ + x_content_type_options?: string; + /** + * The value of the x-content-security-policy header. + */ + x_content_security_policy?: string; + /** + * The value of the etag header. + */ + etag?: string; + /** + * The value of the content_range header. + */ + content_range?: string; + /** + * The value of the content_encoding header. + */ + content_encoding?: string; + /** + * The value of the access-control-allow-origin header. + */ + access_control_allow_origin?: string; + /** + * The value of the content_md5 header. + */ + content_md5?: string; + /** + * The value of the content_disposition header. + */ + content_disposition?: string; + /** + * The value of the cache_control header. + */ + cache_control?: string; + /** + * The value of the location header. + */ + location?: string; + /** + * The value of the status header. + */ + status?: string; + /** + * The value of the strict-transport-security header. + */ + strict_transport_security?: string; + /** + * The value of the expires header. + */ + expires?: string; + /** + * The value of the accept-patch header. + */ + accept_patch?: string; + /** + * The value of the last_modified header. + */ + last_modified?: string; + /** + * The value of the link header. + */ + link?: string; + /** + * The value of the content_type header. + */ + content_type?: string; + /** + * The value of the date header. + */ + date?: string; + /** + * The value of the x-frame-options header. + */ + x_frame_options?: string; + /** + * The value of the x-webkit-csp header. + */ + x_webkit_csp?: string; + /** + * The value of the x-real-ip header. + */ + x_real_ip?: string; + /** + * The value of the alternate_protocol header. + */ + alternate_protocol?: string; + /** + * The value of the accept-ranges header. + */ + accept_ranges?: string; + /** + * The value of the age header. + */ + age?: string; + /** + * The value of the x-xss-protection header. + */ + x_xss_protection?: string; + /** + * The value of the x-forwarded-for header. + */ + x_forwarded_for?: string; + /** + * The value of the refresh header. + */ + refresh?: string; + /** + * The value of the public-key-pins header. + */ + public_key_pins?: string; + /** + * The value of the connection header. + */ + connection?: string; + /** + * The value of the x-content-duration header. + */ + x_content_duration?: string; + /** + * The value of the alt-svc header. + */ + alt_svc?: string; + /** + * The value of the allow header. + */ + allow?: string; + /** + * The value of the referer header. + */ + referer?: string; + /** + * The value of the content-security-policy header. + */ + content_security_policy?: string; + /** + * The value of the transfer_encoding header. + */ + transfer_encoding?: string; + /** + * The value of the trailer header. + */ + trailer?: string; + [k: string]: unknown; + }; + /** + * The HTTP status code (e.g. 200, 404, 503). + */ + status_code?: string; + /** + * The contents of the first TITLE tag in the body (stripped of any surrounding whitespace and truncated to 1024 characters). + */ + title?: string; + /** + * The full status line returned by the server (e.g. "200 OK" or "401 UNAUTHORIZED") + */ + status_line?: string; + /** + * The SHA2-256 digest of the body. NOTE: This digest is calculated using the same data returned in the body field, so if that was truncated, this will be calculated over the truncated body, rather than full data stored on the server. + */ + body_sha256?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p102?: { + s7?: { + /** + * Parsed response data from the Siemens S7 scan. + */ + szl?: { + /** + * The seventh string in the response to the S7_SZL_MODULE_IDENTIFICATION request. + */ + firmware?: string; + /** + * The eighth string in the response to the S7_SZL_COMPONENT_IDENTIFICATION request. + */ + memory_serial_number?: string; + /** + * The seventh string in the response to the S7_SZL_COMPONENT_IDENTIFICATION request. + */ + reserved_for_os?: string; + /** + * The fourth string in the response to the S7_SZL_COMPONENT_IDENTIFICATION request. + */ + copyright?: string; + /** + * The third string in the response to the S7_SZL_COMPONENT_IDENTIFICATION request. + */ + plant_id?: string; + /** + * Indicates that the scanner was able to successfully negotiate a Siemens S7 session with the server. + */ + support?: boolean; + /** + * The ninth string in the response to the S7_SZL_COMPONENT_IDENTIFICATION request. + */ + cpu_profile?: string; + /** + * The fifth string in the response to the S7_SZL_COMPONENT_IDENTIFICATION request. + */ + serial_number?: string; + /** + * The second string in the response to the S7_SZL_COMPONENT_IDENTIFICATION request. + */ + module?: string; + /** + * The first string in the response to the S7_SZL_COMPONENT_IDENTIFICATION request. + */ + system?: string; + /** + * The sixth string in the response to the S7_SZL_MODULE_IDENTIFICATION request. + */ + hardware?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * The sixth string in the response to the S7_SZL_COMPONENT_IDENTIFICATION request. + */ + module_type?: string; + /** + * The eleventh string in the response to the S7_SZL_COMPONENT_IDENTIFICATION request. + */ + location?: string; + /** + * The tenth string in the response to the S7_SZL_COMPONENT_IDENTIFICATION request. + */ + oem_id?: string; + /** + * The first string in the response to the S7_SZL_MODULE_IDENTIFICATION request. + */ + module_id?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + protocols?: string; + p47808?: { + bacnet?: { + device_id?: { + vendor?: { + reported_name?: string; + id?: string; + official_name?: string; + [k: string]: unknown; + }; + description?: string; + firmware_revision?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + support?: boolean; + instance_number?: string; + object_name?: string; + location?: string; + application_software_revision?: string; + model_name?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p6379?: { + redis?: { + banner?: { + /** + * Major is the version's major number. + */ + major?: string; + /** + * If true, Redis was detected on this machine. + */ + supported?: boolean; + /** + * The Sha-1 Git commit hash the Redis server used. + */ + git_sha1?: string; + /** + * The Build ID of the Redis server. + */ + build_id?: string; + /** + * The version of the GCC compiler used to compile the Redis server. + */ + gcc_version?: string; + /** + * The total number of bytes allocated by Redis using its allocator. + */ + used_memory?: string; + /** + * The response from the NONEXISTENT command. + */ + nonexistent_response?: string; + /** + * The version string, read from the the info_response (if available). + */ + version?: string; + /** + * The total number of commands processed by the server. + */ + total_commands_processed?: string; + /** + * The response from the INFO command. Should be a series of key:value pairs separated by CRLFs. + */ + info_response?: string; + /** + * Minor is the version's minor number. + */ + minor?: string; + /** + * The mode the Redis server is running (standalone or cluster), read from the the info_response (if available). + */ + mode?: string; + /** + * The total number of connections accepted by the server. + */ + total_connections_received?: string; + /** + * The response to the QUIT command. + */ + quit_response?: string; + /** + * The architecture bits (32 or 64) the Redis server used to build. + */ + arch_bits?: string; + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + certificate?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + chain?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The memory allocator. + */ + mem_allocator?: string; + /** + * The number of seconds since Redis server start. + */ + uptime_in_seconds?: string; + /** + * The response from the PING command; should either be "PONG" or an authentication error. + */ + ping_response?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + /** + * The OS the Redis server is running, read from the the info_response (if available). + */ + os?: string; + /** + * Patchlevel is the version's patchlevel number. + */ + patchlevel?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p5432?: { + postgres?: { + banner?: { + /** + * If the server allows upgrading the session to use TLS, this is the log of the handshake. + */ + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Additional certificates provided by the server. + */ + chain?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + backend_key_data?: { + secret_key?: string; + process_id?: string; + [k: string]: unknown; + }; + /** + * The error string returned by the server in response to a StartupMessage with ProtocolVersion = 0.0 + */ + supported_versions?: string; + protocol_error?: { + code?: string; + severity?: string; + internal_position?: string; + constraint?: string; + routine?: string; + table?: string; + hint?: string; + internal_query?: string; + detail?: string; + where?: string; + severity_v?: string; + file?: string; + _unknown_error_tag?: string; + position?: string; + line?: string; + data?: string; + message?: string; + schema?: string; + [k: string]: unknown; + }; + /** + * If the server supports TLS and the session was updated to use TLS, this is true. + */ + is_ssl?: boolean; + /** + * If true, PostgreSQL was detected on this machine. + */ + supported?: boolean; + startup_error?: { + code?: string; + severity?: string; + internal_position?: string; + constraint?: string; + routine?: string; + table?: string; + hint?: string; + internal_query?: string; + detail?: string; + where?: string; + severity_v?: string; + file?: string; + _unknown_error_tag?: string; + position?: string; + line?: string; + data?: string; + message?: string; + schema?: string; + [k: string]: unknown; + }; + authentication_mode?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + notes?: string; + p502?: { + modbus?: { + device_id?: { + /** + * Requested function type; see http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf + */ + function_code?: string; + /** + * Indicates whether the server supports modbus. + */ + support?: boolean; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * See http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf + */ + mei_response?: { + objects?: { + user_application_name?: string; + /** + * Mandatory ASCII string on all objects. Names the vendor. + */ + vendor?: string; + product_name?: string; + product_code?: string; + model_name?: string; + vendor_url?: string; + revision?: string; + [k: string]: unknown; + }; + /** + * Identification conformity level of the device and type of supported access + */ + conformity_level?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + metadata?: { + product?: string; + description?: string; + revision?: string; + os_version?: string; + version?: string; + device_type?: string; + manufacturer?: string; + os?: string; + os_description?: string; + [k: string]: unknown; + }; + p7547?: { + cwmp?: { + get?: { + /** + * The HTTP body, truncated according to configured MaxSize (default 256kb). + */ + body?: string; + /** + * HTTP response headers. Names are normalized by converting them to lowercase and replacing hyphens with underscores. When a header is returned multiple times, only the first is included. Values are truncated to 256 bytes. + */ + headers?: { + /** + * The value of the content_length header. + */ + content_length?: string; + /** + * The value of the x-ua-compatible header. + */ + x_ua_compatible?: string; + /** + * The value of the via header. + */ + via?: string; + /** + * The value of the pragma header. + */ + pragma?: string; + /** + * The value of the set_cookie header. + */ + set_cookie?: string; + /** + * The value of the x-powered-by header. + */ + x_powered_by?: string; + /** + * The value of the vary header. + */ + vary?: string; + /** + * The value of the retry_after header. + */ + retry_after?: string; + /** + * The value of the www-authenticate header. + */ + www_authenticate?: string; + /** + * The value of the warning header. + */ + warning?: string; + /** + * The value of the content_language header. + */ + content_language?: string; + /** + * The value of the content_location header. + */ + content_location?: string; + /** + * The value of the p3p header. + */ + p3p?: string; + /** + * The value of the server header. + */ + server?: string; + /** + * The value of the proxy-authenticate header. + */ + proxy_authenticate?: string; + /** + * The value of the proxy-agent header. + */ + proxy_agent?: string; + /** + * The value of the upgrade header. + */ + upgrade?: string; + /** + * Other headers are included as a list of key, value pairs. + */ + unknown?: { + value?: string; + key?: string; + [k: string]: unknown; + }; + /** + * The value of the x-content-type-options header. + */ + x_content_type_options?: string; + /** + * The value of the x-content-security-policy header. + */ + x_content_security_policy?: string; + /** + * The value of the etag header. + */ + etag?: string; + /** + * The value of the content_range header. + */ + content_range?: string; + /** + * The value of the content_encoding header. + */ + content_encoding?: string; + /** + * The value of the access-control-allow-origin header. + */ + access_control_allow_origin?: string; + /** + * The value of the content_md5 header. + */ + content_md5?: string; + /** + * The value of the content_disposition header. + */ + content_disposition?: string; + /** + * The value of the cache_control header. + */ + cache_control?: string; + /** + * The value of the location header. + */ + location?: string; + /** + * The value of the status header. + */ + status?: string; + /** + * The value of the strict-transport-security header. + */ + strict_transport_security?: string; + /** + * The value of the expires header. + */ + expires?: string; + /** + * The value of the accept-patch header. + */ + accept_patch?: string; + /** + * The value of the last_modified header. + */ + last_modified?: string; + /** + * The value of the link header. + */ + link?: string; + /** + * The value of the content_type header. + */ + content_type?: string; + /** + * The value of the date header. + */ + date?: string; + /** + * The value of the x-frame-options header. + */ + x_frame_options?: string; + /** + * The value of the x-webkit-csp header. + */ + x_webkit_csp?: string; + /** + * The value of the x-real-ip header. + */ + x_real_ip?: string; + /** + * The value of the alternate_protocol header. + */ + alternate_protocol?: string; + /** + * The value of the accept-ranges header. + */ + accept_ranges?: string; + /** + * The value of the age header. + */ + age?: string; + /** + * The value of the x-xss-protection header. + */ + x_xss_protection?: string; + /** + * The value of the x-forwarded-for header. + */ + x_forwarded_for?: string; + /** + * The value of the refresh header. + */ + refresh?: string; + /** + * The value of the public-key-pins header. + */ + public_key_pins?: string; + /** + * The value of the connection header. + */ + connection?: string; + /** + * The value of the x-content-duration header. + */ + x_content_duration?: string; + /** + * The value of the alt-svc header. + */ + alt_svc?: string; + /** + * The value of the allow header. + */ + allow?: string; + /** + * The value of the referer header. + */ + referer?: string; + /** + * The value of the content-security-policy header. + */ + content_security_policy?: string; + /** + * The value of the transfer_encoding header. + */ + transfer_encoding?: string; + /** + * The value of the trailer header. + */ + trailer?: string; + [k: string]: unknown; + }; + /** + * The HTTP status code (e.g. 200, 404, 503). + */ + status_code?: string; + /** + * The contents of the first TITLE tag in the body (stripped of any surrounding whitespace and truncated to 1024 characters). + */ + title?: string; + /** + * The full status line returned by the server (e.g. "200 OK" or "401 UNAUTHORIZED") + */ + status_line?: string; + /** + * The SHA2-256 digest of the body. NOTE: This digest is calculated using the same data returned in the body field, so if that was truncated, this will be calculated over the truncated body, rather than full data stored on the server. + */ + body_sha256?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + ports?: string; + p993?: { + imaps?: { + tls?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Additional certificates provided by the server. + */ + chain?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * The IMAP/POP3 command sent by the server as soon as the TLS handshake completes. + */ + banner?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p143?: { + imap?: { + starttls?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Additional certificates provided by the server. + */ + chain?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * The response to the starttls command. + */ + starttls?: string; + /** + * The IMAP/POP3 command sent by the server immediately upon connection. + */ + banner?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p9200?: { + elasticsearch?: { + banner?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + chain?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + nodes_info?: { + cluster?: { + status?: string; + timestamp?: string; + uuid?: string; + name?: string; + filesystem?: { + /** + * Human-friendly available size + */ + available?: string; + /** + * Total size in bytes + */ + total_in_bytes?: string; + /** + * Free size in bytes + */ + free_in_bytes?: string; + /** + * Human-friendly free size + */ + free?: string; + /** + * Human-friendly total size + */ + total?: string; + /** + * Available size in bytes + */ + available_in_bytes?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + nodes?: { + node_info?: { + name?: string; + roles?: string; + settings?: { + node?: { + attr?: { + ml?: { + enabled?: string; + machine_memory?: string; + max_open_jobs?: string; + [k: string]: unknown; + }; + xpack?: { + installed?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + name?: string; + [k: string]: unknown; + }; + cluster?: { + name?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + thread_pool_list?: { + thread_name?: string; + min?: string; + max?: string; + keep_alive?: string; + queue_size?: string; + type?: string; + [k: string]: unknown; + }; + ip?: string; + build_flavor?: string; + modules?: { + has_native_controller?: boolean; + description?: string; + java_version?: string; + classname?: string; + version?: string; + elasticsearch_version?: string; + extended_plugins?: string; + name?: string; + [k: string]: unknown; + }; + ingest?: { + processors?: { + type?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + total_indexing_buffer?: string; + host?: string; + version?: string; + jvm?: { + vm_name?: string; + vm_version?: string; + start_time?: string; + gc_collectors?: string; + input_arguments?: string; + vm_vendor?: string; + version?: string; + memory_pools?: string; + start_time_in_millis?: string; + [k: string]: unknown; + }; + build_hash?: string; + os?: { + name?: string; + pretty_name?: string; + allocated_processors?: string; + version?: string; + arch?: string; + refresh_interval_in_millis?: string; + available_processors?: string; + [k: string]: unknown; + }; + build_type?: string; + [k: string]: unknown; + }; + node_name?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * If true, Elasticsearch was detected on this machine. + */ + supported?: boolean; + system_info?: { + /** + * Cluster UUID + */ + cluster_uuid?: string; + /** + * Elasticsearch identifying tagline + */ + tagline?: string; + version?: { + build_date?: string; + minimum_wire_compatibility_version?: string; + build_hash?: string; + /** + * ES Cluster version + */ + number?: string; + build_type?: string; + minimum_index_compatibility_version?: string; + build_flavor?: string; + build_snapshot?: boolean; + lucene_version?: string; + [k: string]: unknown; + }; + /** + * Cluster Name + */ + name?: string; + [k: string]: unknown; + }; + http_info?: { + headers?: { + content_length?: string; + x_ua_compatible?: string; + via?: string; + pragma?: string; + set_cookie?: string; + x_powered_by?: string; + vary?: string; + retry_after?: string; + warning?: string; + content_language?: string; + content_location?: string; + p3p?: string; + server?: string; + proxy_authenticate?: string; + proxy_agent?: string; + upgrade?: string; + unknown?: { + value?: string; + key?: string; + [k: string]: unknown; + }; + x_content_type_options?: string; + x_content_security_policy?: string; + www_authenticate?: string; + content_range?: string; + content_encoding?: string; + access_control_allow_origin?: string; + content_md5?: string; + content_disposition?: string; + cache_control?: string; + location?: string; + status?: string; + strict_transport_security?: string; + expires?: string; + accept_patch?: string; + last_modified?: string; + link?: string; + content_type?: string; + date?: string; + x_frame_options?: string; + x_webkit_csp?: string; + x_real_ip?: string; + alternate_protocol?: string; + accept_ranges?: string; + age?: string; + x_xss_protection?: string; + x_forwarded_for?: string; + refresh?: string; + public_key_pins?: string; + connection?: string; + x_content_duration?: string; + alt_svc?: string; + allow?: string; + referer?: string; + content_security_policy?: string; + transfer_encoding?: string; + trailer?: string; + [k: string]: unknown; + }; + status_line?: string; + status_code?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p16992?: { + http?: { + get?: { + /** + * The HTTP body, truncated according to configured MaxSize (default 256kb). + */ + body?: string; + /** + * HTTP response headers. Names are normalized by converting them to lowercase and replacing hyphens with underscores. When a header is returned multiple times, only the first is included. Values are truncated to 256 bytes. + */ + headers?: { + /** + * The value of the content_length header. + */ + content_length?: string; + /** + * The value of the x-ua-compatible header. + */ + x_ua_compatible?: string; + /** + * The value of the via header. + */ + via?: string; + /** + * The value of the pragma header. + */ + pragma?: string; + /** + * The value of the set_cookie header. + */ + set_cookie?: string; + /** + * The value of the x-powered-by header. + */ + x_powered_by?: string; + /** + * The value of the vary header. + */ + vary?: string; + /** + * The value of the retry_after header. + */ + retry_after?: string; + /** + * The value of the www-authenticate header. + */ + www_authenticate?: string; + /** + * The value of the warning header. + */ + warning?: string; + /** + * The value of the content_language header. + */ + content_language?: string; + /** + * The value of the content_location header. + */ + content_location?: string; + /** + * The value of the p3p header. + */ + p3p?: string; + /** + * The value of the server header. + */ + server?: string; + /** + * The value of the proxy-authenticate header. + */ + proxy_authenticate?: string; + /** + * The value of the proxy-agent header. + */ + proxy_agent?: string; + /** + * The value of the upgrade header. + */ + upgrade?: string; + /** + * Other headers are included as a list of key, value pairs. + */ + unknown?: { + value?: string; + key?: string; + [k: string]: unknown; + }; + /** + * The value of the x-content-type-options header. + */ + x_content_type_options?: string; + /** + * The value of the x-content-security-policy header. + */ + x_content_security_policy?: string; + /** + * The value of the etag header. + */ + etag?: string; + /** + * The value of the content_range header. + */ + content_range?: string; + /** + * The value of the content_encoding header. + */ + content_encoding?: string; + /** + * The value of the access-control-allow-origin header. + */ + access_control_allow_origin?: string; + /** + * The value of the content_md5 header. + */ + content_md5?: string; + /** + * The value of the content_disposition header. + */ + content_disposition?: string; + /** + * The value of the cache_control header. + */ + cache_control?: string; + /** + * The value of the location header. + */ + location?: string; + /** + * The value of the status header. + */ + status?: string; + /** + * The value of the strict-transport-security header. + */ + strict_transport_security?: string; + /** + * The value of the expires header. + */ + expires?: string; + /** + * The value of the accept-patch header. + */ + accept_patch?: string; + /** + * The value of the last_modified header. + */ + last_modified?: string; + /** + * The value of the link header. + */ + link?: string; + /** + * The value of the content_type header. + */ + content_type?: string; + /** + * The value of the date header. + */ + date?: string; + /** + * The value of the x-frame-options header. + */ + x_frame_options?: string; + /** + * The value of the x-webkit-csp header. + */ + x_webkit_csp?: string; + /** + * The value of the x-real-ip header. + */ + x_real_ip?: string; + /** + * The value of the alternate_protocol header. + */ + alternate_protocol?: string; + /** + * The value of the accept-ranges header. + */ + accept_ranges?: string; + /** + * The value of the age header. + */ + age?: string; + /** + * The value of the x-xss-protection header. + */ + x_xss_protection?: string; + /** + * The value of the x-forwarded-for header. + */ + x_forwarded_for?: string; + /** + * The value of the refresh header. + */ + refresh?: string; + /** + * The value of the public-key-pins header. + */ + public_key_pins?: string; + /** + * The value of the connection header. + */ + connection?: string; + /** + * The value of the x-content-duration header. + */ + x_content_duration?: string; + /** + * The value of the alt-svc header. + */ + alt_svc?: string; + /** + * The value of the allow header. + */ + allow?: string; + /** + * The value of the referer header. + */ + referer?: string; + /** + * The value of the content-security-policy header. + */ + content_security_policy?: string; + /** + * The value of the transfer_encoding header. + */ + transfer_encoding?: string; + /** + * The value of the trailer header. + */ + trailer?: string; + [k: string]: unknown; + }; + /** + * The HTTP status code (e.g. 200, 404, 503). + */ + status_code?: string; + /** + * The contents of the first TITLE tag in the body (stripped of any surrounding whitespace and truncated to 1024 characters). + */ + title?: string; + /** + * The full status line returned by the server (e.g. "200 OK" or "401 UNAUTHORIZED") + */ + status_line?: string; + /** + * The SHA2-256 digest of the body. NOTE: This digest is calculated using the same data returned in the body field, so if that was truncated, this will be calculated over the truncated body, rather than full data stored on the server. + */ + body_sha256?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p631?: { + ipp?: { + banner?: { + /** + * If the server allows upgrading the session to use TLS, this is the log of the handshake. + */ + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Additional certificates provided by the server. + */ + chain?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The specific IPP version returned in response to an IPP get-printer-attributes request. Always in the form 'IPP/x.y' + */ + version_string?: string; + /** + * If true, IPP was detected on this machine. + */ + supported?: boolean; + /** + * Major component of IPP version listed in the Server header of a response to an IPP get-printer-attributes request. + */ + version_major?: string; + /** + * The CUPS version, if any, specified in the list of attributes returned in a get-printer-attributes response or CUPS-get-printers response. Generally in the form 'x.y.z'. + */ + attr_cups_version?: string; + /** + * Each IPP version, if any, specified in the list of attributes returned in a get-printer-attributes response or CUPS-get-printers response. Always in the form 'x.y'. + */ + attr_ipp_versions?: string; + /** + * The CUPS version, if any, specified in the Server header of an IPP get-attributes response. + */ + cups_version?: string; + /** + * Each printer URI, if any, specified in the list of attributes returned in a get-printer-attributes response or CUPS-get-printers response. Uses ipp(s) or http(s) scheme, followed by a hostname or IP, and then the path to a particular printer. + */ + attr_printer_uris?: string; + /** + * All IPP attributes included in any contentful responses obtained. Each has a name, list of values (potentially only one), and a tag denoting how the value should be interpreted. + */ + attributes?: { + tag?: string; + values?: { + memberAttrName?: string; + octetString?: string; + charset?: string; + keyword?: string; + bagCollection?: string; + rangeOfInteger?: string; + enum?: string; + uri?: string; + dateTime?: string; + raw?: string; + nameWithoutLanguage?: string; + boolean?: boolean; + endCollection?: string; + mimeMediaType?: string; + integer?: string; + naturalLanguage?: string; + textWithLanguage?: string; + resolution?: string; + uriScheme?: string; + textWithoutLanguage?: string; + nameWithLanguage?: string; + [k: string]: unknown; + }; + name?: string; + [k: string]: unknown; + }; + /** + * Minor component of IPP version listed in the Server header of a response to an IPP get-printer-attributes request. + */ + version_minor?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p995?: { + pop3s?: { + tls?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Additional certificates provided by the server. + */ + chain?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * The IMAP/POP3 command sent by the server as soon as the TLS handshake completes. + */ + banner?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p445?: { + smb?: { + banner?: { + smbv1_support?: boolean; + /** + * If true, SMB was detected on this machine. + */ + supported?: boolean; + negotiation_log?: { + status?: string; + security_mode?: string; + system_time?: string; + server_start_time?: string; + protocol_id?: string; + capabilities?: string; + server_guid?: string; + credits?: string; + dialect_revision?: string; + command?: string; + authentication_types?: string; + flags?: string; + [k: string]: unknown; + }; + smb_version?: { + /** + * Major version + */ + major?: string; + /** + * Full SMB Version String + */ + version_string?: string; + /** + * Minor version + */ + minor?: string; + /** + * Protocol Revision + */ + revision?: string; + [k: string]: unknown; + }; + session_setup_log?: { + status?: string; + protocol_id?: string; + target_name?: string; + negotiate_flags?: string; + setup_flags?: string; + credits?: string; + command?: string; + flags?: string; + [k: string]: unknown; + }; + /** + * Capabilities flags for the connection. See [MS-SMB2] Sect. 2.2.4. + */ + smb_capabilities?: { + /** + * Server supports multi-credit operations + */ + smb_multicredit_support?: boolean; + /** + * Server supports multiple channels per session + */ + smb_multchan_support?: boolean; + /** + * Server supports persistent handles + */ + smb_persistent_handle_support?: boolean; + /** + * Server supports Distributed File System + */ + smb_dfs_support?: boolean; + /** + * Server supports Leasing + */ + smb_leasing_support?: boolean; + /** + * Server supports encryption + */ + smb_encryption_support?: boolean; + /** + * Server supports directory leasing + */ + smb_directory_leasing_support?: boolean; + [k: string]: unknown; + }; + has_ntlm?: boolean; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p443?: { + https?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Additional certificates provided by the server. + */ + chain?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + dhe_export?: { + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * True if the host supports export-grade Diffie-Hellman in TLS handshakes. + */ + support?: boolean; + /** + * The parameters for the key. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + get?: { + /** + * The HTTP body, truncated according to configured MaxSize (default 256kb). + */ + body?: string; + /** + * HTTP response headers. Names are normalized by converting them to lowercase and replacing hyphens with underscores. When a header is returned multiple times, only the first is included. Values are truncated to 256 bytes. + */ + headers?: { + /** + * The value of the content_length header. + */ + content_length?: string; + /** + * The value of the x-ua-compatible header. + */ + x_ua_compatible?: string; + /** + * The value of the via header. + */ + via?: string; + /** + * The value of the pragma header. + */ + pragma?: string; + /** + * The value of the set_cookie header. + */ + set_cookie?: string; + /** + * The value of the x-powered-by header. + */ + x_powered_by?: string; + /** + * The value of the vary header. + */ + vary?: string; + /** + * The value of the retry_after header. + */ + retry_after?: string; + /** + * The value of the www-authenticate header. + */ + www_authenticate?: string; + /** + * The value of the warning header. + */ + warning?: string; + /** + * The value of the content_language header. + */ + content_language?: string; + /** + * The value of the content_location header. + */ + content_location?: string; + /** + * The value of the p3p header. + */ + p3p?: string; + /** + * The value of the server header. + */ + server?: string; + /** + * The value of the proxy-authenticate header. + */ + proxy_authenticate?: string; + /** + * The value of the proxy-agent header. + */ + proxy_agent?: string; + /** + * The value of the upgrade header. + */ + upgrade?: string; + /** + * Other headers are included as a list of key, value pairs. + */ + unknown?: { + value?: string; + key?: string; + [k: string]: unknown; + }; + /** + * The value of the x-content-type-options header. + */ + x_content_type_options?: string; + /** + * The value of the x-content-security-policy header. + */ + x_content_security_policy?: string; + /** + * The value of the etag header. + */ + etag?: string; + /** + * The value of the content_range header. + */ + content_range?: string; + /** + * The value of the content_encoding header. + */ + content_encoding?: string; + /** + * The value of the access-control-allow-origin header. + */ + access_control_allow_origin?: string; + /** + * The value of the content_md5 header. + */ + content_md5?: string; + /** + * The value of the content_disposition header. + */ + content_disposition?: string; + /** + * The value of the cache_control header. + */ + cache_control?: string; + /** + * The value of the location header. + */ + location?: string; + /** + * The value of the status header. + */ + status?: string; + /** + * The value of the strict-transport-security header. + */ + strict_transport_security?: string; + /** + * The value of the expires header. + */ + expires?: string; + /** + * The value of the accept-patch header. + */ + accept_patch?: string; + /** + * The value of the last_modified header. + */ + last_modified?: string; + /** + * The value of the link header. + */ + link?: string; + /** + * The value of the content_type header. + */ + content_type?: string; + /** + * The value of the date header. + */ + date?: string; + /** + * The value of the x-frame-options header. + */ + x_frame_options?: string; + /** + * The value of the x-webkit-csp header. + */ + x_webkit_csp?: string; + /** + * The value of the x-real-ip header. + */ + x_real_ip?: string; + /** + * The value of the alternate_protocol header. + */ + alternate_protocol?: string; + /** + * The value of the accept-ranges header. + */ + accept_ranges?: string; + /** + * The value of the age header. + */ + age?: string; + /** + * The value of the x-xss-protection header. + */ + x_xss_protection?: string; + /** + * The value of the x-forwarded-for header. + */ + x_forwarded_for?: string; + /** + * The value of the refresh header. + */ + refresh?: string; + /** + * The value of the public-key-pins header. + */ + public_key_pins?: string; + /** + * The value of the connection header. + */ + connection?: string; + /** + * The value of the x-content-duration header. + */ + x_content_duration?: string; + /** + * The value of the alt-svc header. + */ + alt_svc?: string; + /** + * The value of the allow header. + */ + allow?: string; + /** + * The value of the referer header. + */ + referer?: string; + /** + * The value of the content-security-policy header. + */ + content_security_policy?: string; + /** + * The value of the transfer_encoding header. + */ + transfer_encoding?: string; + /** + * The value of the trailer header. + */ + trailer?: string; + [k: string]: unknown; + }; + /** + * The HTTP status code (e.g. 200, 404, 503). + */ + status_code?: string; + /** + * The contents of the first TITLE tag in the body (stripped of any surrounding whitespace and truncated to 1024 characters). + */ + title?: string; + /** + * The full status line returned by the server (e.g. "200 OK" or "401 UNAUTHORIZED") + */ + status_line?: string; + /** + * The SHA2-256 digest of the body. NOTE: This digest is calculated using the same data returned in the body field, so if that was truncated, this will be calculated over the truncated body, rather than full data stored on the server. + */ + body_sha256?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + dhe?: { + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * True if the host supports Diffie-Hellman in TLS handshakes. + */ + support?: boolean; + /** + * The parameters for the key. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + tls_1_2?: { + /** + * Time the scan was run. + */ + timestamp?: string; + support?: boolean; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + ssl_3?: { + /** + * Time the scan was run. + */ + timestamp?: string; + support?: boolean; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + heartbleed?: { + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * The server response to the Heartbeat extension + */ + heartbeat_enabled?: boolean; + /** + * Indicates if the server is vulnerable to the Heartbleed attack. + */ + heartbleed_vulnerable?: boolean; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + rsa_export?: { + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * True if the host supports export-grade RSA in TLS handshakes. + */ + support?: boolean; + /** + * The parameters for the key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + ecdhe?: { + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * The parameters for the key. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * True if the host supports ECDH in TLS handshakes. + */ + support?: boolean; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + tls_1_1?: { + /** + * Time the scan was run. + */ + timestamp?: string; + support?: boolean; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p9090?: { + prometheus?: { + banner?: { + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + certificate?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + chain?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * List of all errors encountered during scan. + */ + errors?: string; + /** + * If true, Prometheus was detected on this machine. + */ + supported?: boolean; + http_info?: { + headers?: { + content_length?: string; + x_ua_compatible?: string; + via?: string; + pragma?: string; + set_cookie?: string; + x_powered_by?: string; + vary?: string; + retry_after?: string; + warning?: string; + content_language?: string; + content_location?: string; + p3p?: string; + server?: string; + proxy_authenticate?: string; + proxy_agent?: string; + upgrade?: string; + unknown?: { + value?: string; + key?: string; + [k: string]: unknown; + }; + x_content_type_options?: string; + x_content_security_policy?: string; + www_authenticate?: string; + content_range?: string; + content_encoding?: string; + access_control_allow_origin?: string; + content_md5?: string; + content_disposition?: string; + cache_control?: string; + location?: string; + status?: string; + strict_transport_security?: string; + expires?: string; + accept_patch?: string; + last_modified?: string; + link?: string; + content_type?: string; + date?: string; + x_frame_options?: string; + x_webkit_csp?: string; + x_real_ip?: string; + alternate_protocol?: string; + accept_ranges?: string; + age?: string; + x_xss_protection?: string; + x_forwarded_for?: string; + refresh?: string; + public_key_pins?: string; + connection?: string; + x_content_duration?: string; + alt_svc?: string; + allow?: string; + referer?: string; + content_security_policy?: string; + transfer_encoding?: string; + trailer?: string; + [k: string]: unknown; + }; + /** + * Status message received from hitting /api/v1/targets + */ + status_line?: string; + /** + * Status code received from hitting /api/v1/targets + */ + status_code?: string; + [k: string]: unknown; + }; + /** + * Information Prometheus captured as well as build information. + */ + response?: { + /** + * List of the versions and revisions of Prometheus. + */ + prometheus_build_info?: { + /** + * Version of Prometheus. + */ + version?: string; + /** + * Version of Go used to build Prometheus. + */ + go_version?: string; + /** + * Revision of Prometheus. + */ + revision?: string; + [k: string]: unknown; + }; + /** + * List of dropped targets. + */ + dropped_targets?: { + discovered_labels?: { + /** + * URL scheme. + */ + scheme?: string; + /** + * Job of target. + */ + job?: string; + /** + * Path to metrics of target. + */ + metrics_path?: string; + /** + * Address of target. + */ + address?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * List of the versions of everything that Prometheus finds (i.e., version of Prometheus, Go, Node, cAdvisor, etc.) + */ + all_versions?: string; + /** + * List of the versions of Go. + */ + go_versions?: string; + /** + * List of active targets. + */ + active_targets?: { + discovered_labels?: { + /** + * URL scheme. + */ + scheme?: string; + /** + * Job of target. + */ + job?: string; + /** + * Path to metrics of target. + */ + metrics_path?: string; + /** + * Address of target. + */ + address?: string; + [k: string]: unknown; + }; + labels?: { + /** + * Instance after relabelling has occurred + */ + instance?: string; + /** + * Job of target after relabelling has occurred + */ + job?: string; + [k: string]: unknown; + }; + /** + * URL that Prometheus scraped. + */ + scrape_url?: string; + /** + * Whether target is up or down. + */ + health?: string; + /** + * Last error that occurred within target. + */ + last_error?: string; + /** + * Last time Prometheus scraped target. + */ + last_scrape?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + p465?: { + smtp?: { + tls?: { + /** + * The response to the EHLO command. + */ + ehlo?: string; + tls?: { + /** + * The key data sent by the server in the TLS key exchange message. + */ + server_key_exchange?: { + /** + * Parameters for the Diffie-Hellman key exchange. + */ + dh_params?: { + /** + * The shared prime number. + */ + prime?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's public key. + */ + server_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The generator of the DH group. + */ + generator?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's private key. Usually does not coexist with server_private. + */ + client_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The server's private key. Usually does not coexist with client_private. + */ + server_private?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The client's public key. + */ + client_public?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * The session key. + */ + session_key?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Container for the public portion (modulus and exponent) of an RSA asymmetric key. + */ + rsa_params?: { + /** + * Bit-length of modulus. + */ + length?: string; + /** + * The RSA key's modulus (n) in big-endian encoding. + */ + modulus?: string; + /** + * The RSA key's public exponent (e). + */ + exponent?: string; + [k: string]: unknown; + }; + signature?: { + raw?: string; + tls_version?: { + /** + * A human-readable version of the TLS version. + */ + name?: string; + /** + * The TLS version identifier. + */ + value?: string; + [k: string]: unknown; + }; + valid?: boolean; + type?: string; + /** + * mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See RFC 5246, section A.4.1. + */ + signature_and_hash_type?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * Parameters for ECDH key exchange. + */ + ecdh_params?: { + /** + * An elliptic curve point. + */ + server_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * An elliptic curve algorithm identifier. + */ + curve_id?: { + /** + * The numeric value of the curve identifier. See http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8 + */ + id?: string; + /** + * The name of the curve algorithm (e.g. sect163kr1, secp192r1). Unrecognized curves are 'unknown'. + */ + name?: string; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + server_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + /** + * An elliptic curve point. + */ + client_public?: { + /** + * Generic parameter for a cryptographic algorithm. + */ + y?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + /** + * Generic parameter for a cryptographic algorithm. + */ + x?: { + /** + * The length of the parameter. + */ + length?: string; + /** + * The value of the parameter. + */ + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * TLS key exchange parameters for ECDH keys. + */ + client_private?: { + length?: string; + value?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + /** + * The digest that is signed. + */ + digest?: string; + [k: string]: unknown; + }; + /** + * The server's TLS certificate. + */ + certificate?: { + parsed?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + fingerprint_sha256?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + chain?: { + fingerprints?: { + /** + * The SHA2-256 digest over the DER encoding of the certificate's SubjectPublicKeyInfo, as a hexadecimal string. + */ + spki_subject?: string; + /** + * The SHA1 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha1?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, as a hexadecimal string. + */ + tbs?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate's TBSCertificate, *with any CT extensions omitted*, as a hexadecimal string. + */ + tbs_noct?: string; + /** + * The SHA2-256 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + sha256?: string; + /** + * The MD5 digest over the DER encoding of the certificate, as a hexadecimal string. + */ + md5?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * This is true if the client has the Secure Renegotiation extension (see https://tools.ietf.org/html/rfc5746). + */ + secure_renegotiation?: boolean; + /** + * Time the scan was run. + */ + timestamp?: string; + session_ticket?: { + /** + * The length of the session ticket, in bytes. + */ + length?: string; + /** + * A hint from the server as to how long the ticket should be stored (in seconds relative to when the ticket is received). + */ + lifetime_hint?: string; + /** + * The session ticket (an opaque binary blob). + */ + value?: string; + [k: string]: unknown; + }; + cipher_suite?: { + /** + * The hexadecimal string representation of the numeric cipher algorithm identifier. + */ + id?: string; + /** + * The algorithm identifier for the cipher algorithm identifier, see e.g. https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. + */ + name?: string; + [k: string]: unknown; + }; + /** + * A human-readable version of the TLS version. + */ + version?: string; + /** + * This is true if the OCSP Stapling extension is set (see https://www.ietf.org/rfc/rfc6961.txt for details). + */ + ocsp_stapling?: boolean; + signature?: { + /** + * The name of the hash algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + hash_algorithm?: string; + /** + * The signature error, if one occurred. + */ + signature_error?: string; + valid?: boolean; + /** + * The name of the signature algorithm, as defined in RFC5246 section 7.4.1.4.1. Unrecognized values are of the form 'unknown.255'. + */ + signature_algorithm?: string; + [k: string]: unknown; + }; + /** + * The values in the SignedCertificateTimestampList of the Signed Certificate Timestamp, if present. + */ + scts?: { + /** + * The SHA-256 hash of the log's public key, calculated over the DER encoding of the key's SubjectPublicKeyInfo. + */ + log_id?: string; + /** + * Time at which the SCT was issued (in seconds since the Unix epoch). + */ + timestamp?: string; + /** + * Version of the protocol to which the SCT conforms. + */ + version?: string; + /** + * For future extensions to the protocol. + */ + extensions?: string; + /** + * The log's signature for this SCT. + */ + signature?: string; + [k: string]: unknown; + }; + validation?: { + /** + * Indicates whether the server's domain name matches that in the certificate. + */ + matches_domain?: boolean; + /** + * Indicates whether the certificate is trusted by the standard browser certificate stores. + */ + browser_trusted?: boolean; + /** + * Description of the reason browser_trusted == false. + */ + browser_error?: string; + [k: string]: unknown; + }; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + /** + * The response to the STARTTLS command. + */ + starttls?: string; + /** + * Time the scan was run. + */ + timestamp?: string; + /** + * The initial SMTP command sent by the server (e.g. "220 localhost.localdomain ESMTP Postfix (Ubuntu)\r\n" + */ + banner?: string; + metadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; + }; + [k: string]: unknown; +} diff --git a/backend/src/models/generated/kev.ts b/backend/src/models/generated/kev.ts new file mode 100644 index 00000000..455dcc10 --- /dev/null +++ b/backend/src/models/generated/kev.ts @@ -0,0 +1,62 @@ +/* tslint:disable */ +/** + * This file was automatically generated by json-schema-to-typescript. + * DO NOT MODIFY IT BY HAND. Instead, run "npm run codegen" to regenerate this file. + */ + +/** + * A catalog of known exploited vulnerabilities that carry significant risk to the federal enterprise + */ +export interface CISACatalogOfKnownExploitedVulnerabilities { + /** + * Version of the known exploited vulnerabilities catalog + */ + catalogVersion: string; + /** + * Date-time of Catalog Release in the format YYYY-MM-DDTHH:mm:ss.sssZ + */ + dateReleased: string; + /** + * Total number of Known Exploited Vulnerabilities in the catalog + */ + count: number; + /** + * The exploited vulnerabilities included in this catalog + */ + vulnerabilities: { + /** + * The CVE ID of the vulnerability in the format CVE-YYYY-NNNN, note that the number portion can have more than 4 digits + */ + cveID: string; + /** + * The vendor or project name for the vulnerability + */ + vendorProject: string; + /** + * The vulnerability product + */ + product: string; + /** + * The name of the vulnerability + */ + vulnerabilityName: string; + /** + * The date the vulnerability was added to the catalog in the format YYYY-MM-DD + */ + dateAdded: string; + /** + * A short description of the vulnerability + */ + shortDescription: string; + /** + * The required action to address the vulnerability + */ + requiredAction: string; + /** + * The date the required action is due in the format YYYY-MM-DD + */ + dueDate: string; + [k: string]: unknown; + }[]; + [k: string]: unknown; +} diff --git a/backend/src/models/index.ts b/backend/src/models/index.ts new file mode 100644 index 00000000..310cfb76 --- /dev/null +++ b/backend/src/models/index.ts @@ -0,0 +1,15 @@ +export * from './domain'; +export * from './cve'; +export * from './cpe'; +export * from './service'; +export * from './connection'; +export * from './vulnerability'; +export * from './scan'; +export * from './organization'; +export * from './user'; +export * from './role'; +export * from './scan-task'; +export * from './webpage'; +export * from './api-key'; +export * from './saved-search'; +export * from './organization-tag'; diff --git a/backend/src/models/organization-tag.ts b/backend/src/models/organization-tag.ts new file mode 100644 index 00000000..19ce0721 --- /dev/null +++ b/backend/src/models/organization-tag.ts @@ -0,0 +1,47 @@ +import { + Entity, + Index, + PrimaryGeneratedColumn, + UpdateDateColumn, + CreateDateColumn, + BaseEntity, + ManyToMany, + JoinTable, + Column +} from 'typeorm'; +import { Organization, Scan } from '.'; + +@Entity() +@Index(['name'], { unique: true }) +export class OrganizationTag extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @Column() + name: string; + + /** + * Organizations that are labeled with this tag + */ + @ManyToMany((type) => Organization, (organization) => organization.tags, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + @JoinTable() + organizations: Organization[]; + + /** + * Scans that have this tag enabled, and will run against all tagged organizations + */ + @ManyToMany((type) => Scan, (scan) => scan.tags, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + scans: Scan[]; +} diff --git a/backend/src/models/organization.ts b/backend/src/models/organization.ts new file mode 100644 index 00000000..3c359313 --- /dev/null +++ b/backend/src/models/organization.ts @@ -0,0 +1,160 @@ +import { + Entity, + Index, + Column, + PrimaryGeneratedColumn, + UpdateDateColumn, + CreateDateColumn, + BaseEntity, + OneToMany, + ManyToMany, + ManyToOne +} from 'typeorm'; +import { Domain, Role, Scan, ScanTask, OrganizationTag } from '.'; +import { User } from './user'; + +export interface PendingDomain { + name: string; + token: string; +} + +@Entity() +export class Organization extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @Index({ unique: true }) + @Column({ + nullable: true, + unique: true + }) + acronym: string; + + @Column() + name: string; + + @Column('varchar', { array: true }) + rootDomains: string[]; + + @Column('varchar', { array: true }) + ipBlocks: string[]; + + @Column() + isPassive: boolean; + + @OneToMany((type) => Domain, (domain) => domain.organization, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + domains: Domain[]; + + @Column('json', { default: '[]' }) + pendingDomains: PendingDomain[]; + + @OneToMany((type) => Role, (role) => role.organization, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + userRoles: Role[]; + + /** + * Corresponds to "organization" property of ScanTask. + * Deprecated, replaced by "allScanTasks" property. + */ + @OneToMany((type) => ScanTask, (scanTask) => scanTask.organization, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + scanTasks: ScanTask[]; + + /** + * Corresponds to "organizations" property of ScanTask. + */ + @ManyToMany((type) => ScanTask, (scanTask) => scanTask.organizations, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + allScanTasks: ScanTask[]; + + @ManyToMany((type) => Scan, (scan) => scan.organizations, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + granularScans: Scan[]; + + @ManyToMany((type) => OrganizationTag, (tag) => tag.organizations, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + tags: OrganizationTag[]; + + /** + * The organization's parent organization, if any. + * Organizations without a parent organization are + * shown to users as 'Organizations', while organizations + * with a parent organization are shown to users as 'Teams' + */ + @ManyToOne((type) => Organization, (org) => org.children, { + onDelete: 'CASCADE', + nullable: true + }) + parent: Organization; + + @OneToMany((type) => Organization, (org) => org.parent, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + children: Organization[]; + + @ManyToOne((type) => User, { + onDelete: 'SET NULL', + onUpdate: 'CASCADE' + }) + createdBy: User; + + @Column({ + nullable: true + }) + country: string; + + @Column({ + nullable: true + }) + state: string; + + @Column({ + nullable: true + }) + regionId: string; + + @Column({ + nullable: true + }) + stateFips: number; + + @Column({ + nullable: true + }) + stateName: string; + + @Column({ + nullable: true + }) + county: string; + + @Column({ + nullable: true + }) + countyFips: number; + + @Column({ + nullable: true + }) + type: string; +} diff --git a/backend/src/models/role.ts b/backend/src/models/role.ts new file mode 100644 index 00000000..666eb09d --- /dev/null +++ b/backend/src/models/role.ts @@ -0,0 +1,64 @@ +import { + Entity, + Index, + Column, + PrimaryGeneratedColumn, + UpdateDateColumn, + CreateDateColumn, + BaseEntity, + ManyToOne +} from 'typeorm'; +import { Organization, User } from './'; + +@Entity() +@Index(['user', 'organization'], { unique: true }) +export class Role extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @CreateDateColumn() + createdAt: Date; + + @ManyToOne((type) => User, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + createdBy: User; + + @UpdateDateColumn() + updatedAt: Date; + + @Column({ + default: 'user' + }) + role: 'user' | 'admin'; + + @Column({ + default: false + }) + approved: boolean; + + @ManyToOne((type) => User, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + approvedBy: User; + + @ManyToOne((type) => User, (user) => user.roles, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + user: User; + + // @ManyToOne((type) => User, (user) => user.organizations, { + // onDelete: 'CASCADE', + // onUpdate: 'CASCADE' + // }) + // userOrgs: User; + + @ManyToOne((type) => Organization, (organization) => organization.userRoles, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + organization: Organization; +} diff --git a/backend/src/models/saved-search.ts b/backend/src/models/saved-search.ts new file mode 100644 index 00000000..91a9f63f --- /dev/null +++ b/backend/src/models/saved-search.ts @@ -0,0 +1,61 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + UpdateDateColumn, + CreateDateColumn, + BaseEntity, + ManyToOne +} from 'typeorm'; +import { Vulnerability } from './vulnerability'; +import { User } from './user'; + +@Entity() +export class SavedSearch extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @Column() + name: string; + + @Column() + searchTerm: string; + + @Column() + sortDirection: string; + + @Column() + sortField: string; + + @Column() + count: number; + + @Column({ type: 'jsonb', default: '[]' }) + filters: { field: string; values: any[]; type: string }[]; + + @Column() + searchPath: string; + + @Column({ + default: false + }) + createVulnerabilities: boolean; + + // Content of vulnerability when search is configured to create vulnerabilities from results + @Column({ type: 'jsonb', default: '{}' }) + vulnerabilityTemplate: Partial & { + title: string; + }; + + @ManyToOne((type) => User, { + onDelete: 'SET NULL', + onUpdate: 'CASCADE' + }) + createdBy: User; +} diff --git a/backend/src/models/scan-task.ts b/backend/src/models/scan-task.ts new file mode 100644 index 00000000..82b7896d --- /dev/null +++ b/backend/src/models/scan-task.ts @@ -0,0 +1,121 @@ +import { + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, + CreateDateColumn, + BaseEntity, + ManyToOne, + JoinColumn, + Column, + ManyToMany, + JoinTable +} from 'typeorm'; +import { Scan, Organization } from '.'; + +@Entity() +export class ScanTask extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + /** + * Organization that this specific ScanTask runs on. + * Deprecated, replaced by "organizations" property. + */ + @ManyToOne((type) => Organization, (organization) => organization.scanTasks, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + organization: Organization; + + /** + * Organizations that this specific ScanTask runs on. + */ + @ManyToMany( + (type) => Organization, + (organization) => organization.allScanTasks, + { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + } + ) + @JoinTable() + organizations: Organization[]; + + @ManyToOne((type) => Scan, (scan) => scan.scanTasks, { + onDelete: 'SET NULL', + onUpdate: 'CASCADE' + }) + @JoinColumn() + scan: Scan; + + /** + * created: model is created + * queued: Fargate capacity has been reached, so the task will run whenever there is available capacity. + * requested: a request to Fargate has been sent to start the task + * started: the Fargate container has started running the task + * finished: the Fargate container has finished running the task + * failed: any of the steps above have failed + */ + @Column('text') + status: + | 'created' + | 'queued' + | 'requested' + | 'started' + | 'finished' + | 'failed'; + + @Column('text') + type: 'fargate' | 'lambda'; + + /** + * ARN of the associated fargate task. + */ + @Column({ + type: 'text', + nullable: true + }) + fargateTaskArn: string | null; + + @Column({ + type: 'text', + nullable: true + }) + input: string | null; + + @Column({ + type: 'text', + nullable: true + }) + output: string | null; + + @Column({ + type: 'timestamp', + nullable: true + }) + requestedAt: Date | null; + + @Column({ + type: 'timestamp', + nullable: true + }) + startedAt: Date | null; + + @Column({ + type: 'timestamp', + nullable: true + }) + finishedAt: Date | null; + + @Column({ + type: 'timestamp', + nullable: true + }) + queuedAt: Date | null; +} diff --git a/backend/src/models/scan.ts b/backend/src/models/scan.ts new file mode 100644 index 00000000..4a098acf --- /dev/null +++ b/backend/src/models/scan.ts @@ -0,0 +1,113 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + UpdateDateColumn, + CreateDateColumn, + BaseEntity, + OneToMany, + ManyToMany, + JoinTable, + ManyToOne +} from 'typeorm'; +import { ScanTask, Organization, OrganizationTag } from '.'; +import { User } from './user'; + +@Entity() +export class Scan extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @Column() + name: string; + + @Column('json') + arguments: Object; + + /** How often the scan is run, in seconds */ + @Column() + frequency: number; + + @Column({ + type: 'timestamp', + nullable: true + }) + lastRun: Date | null; + + @OneToMany((type) => ScanTask, (scanTask) => scanTask.scan, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + scanTasks: ScanTask[]; + + /** Whether the scan is granular. Granular scans + * are only run on specified organizations. + * Global scans cannot be granular scans. + */ + @Column({ + type: 'boolean', + default: false + }) + isGranular: boolean; + + /** Whether the scan is user-modifiable. User-modifiable + * scans are granular scans that can be viewed and toggled on/off by + * organization admins themselves. + */ + @Column({ + type: 'boolean', + default: false, + nullable: true + }) + isUserModifiable: boolean; + + /** + * If the scan is granular, specifies organizations that the + * scan will run on. + */ + @ManyToMany( + (type) => Organization, + (organization) => organization.granularScans, + { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + } + ) + @JoinTable() + organizations: Organization[]; + + /** + * If the scan is granular, specifies organization tags that the + * scan will run on. + */ + @ManyToMany((type) => OrganizationTag, (tag) => tag.scans, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + @JoinTable() + tags: OrganizationTag[]; + + @ManyToOne((type) => User, { + onDelete: 'SET NULL', + onUpdate: 'CASCADE' + }) + createdBy: User; + + @Column({ + type: 'boolean', + default: false + }) + isSingleScan: boolean; + + @Column({ + type: 'boolean', + default: false + }) + manualRunPending: boolean; +} diff --git a/backend/src/models/service.ts b/backend/src/models/service.ts new file mode 100644 index 00000000..d27703fc --- /dev/null +++ b/backend/src/models/service.ts @@ -0,0 +1,336 @@ +import { + Entity, + Column, + Index, + PrimaryGeneratedColumn, + ManyToOne, + BaseEntity, + CreateDateColumn, + BeforeInsert, + BeforeUpdate, + UpdateDateColumn +} from 'typeorm'; +import { Domain } from './domain'; +import { Scan } from './scan'; +import { CpeParser } from '@thefaultvault/tfv-cpe-parser'; +import { EXCHANGE_BUILD_NUMBER_TO_CPE } from '../ref/exchange'; + +const filterProducts = (product: Product) => { + // Filter out false positives. + const { cpe, version } = product; + if (cpe?.includes('apache:tomcat') && version === '1.1') { + // Wappalyzer incorrectly detects "Apache Tomcat 1.1" + // https://github.com/AliasIO/wappalyzer/issues/3305 + return false; + } + if (cpe?.includes('apache:coyote') && version === '1.1') { + // Intrigue Ident incorrectly detects "Apache Coyote 1.1" + // https://github.com/intrigueio/intrigue-ident/issues/51 + return false; + } + if (cpe?.includes('generic:unauthorized')) { + // Intrigue Ident sometimes detects "Unauthorized" CPEs + return false; + } + if ( + cpe?.includes('f5:big-ip_application_security_manager:14.0.0_and_later') + ) { + // Intrigue Ident returns an invalid CPE version. TODO: ignore all invalid versions in CPEs. + return false; + } + return true; +}; + +const mapProducts = (product: Product) => { + if (!product.name) { + // Some products don't have names, so use a sensible default. + product.name = product.cpe || 'Unknown'; + } + return product; +}; + +export interface Product { + // Common name + name: string; + // Product name + product?: string; + // Product vendor + vendor?: string; + // Product version + version: string; + // Product version revision + revision?: string; + // CPE without version (unique identifier) + cpe?: string; + // Optional icon + icon?: string; + // Optional description + description?: string; + // Tags + tags: string[]; +} + +@Entity() +@Index(['port', 'domain'], { unique: true }) +export class Service extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @Index() + @ManyToOne((type) => Domain, (domain) => domain.services, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + domain: Domain; + + @ManyToOne((type) => Scan, { + onDelete: 'SET NULL', + onUpdate: 'CASCADE' + }) + discoveredBy: Scan; + + /** Name of scan that discovered this port/service (censysIpv4, shodan). */ + @Column({ + nullable: true, + type: 'text' + }) + serviceSource: string | null; + + @Column() + port: number; + + @Column({ + nullable: true, + type: 'varchar' + }) + service: string | null; + + @Column({ + nullable: true, + type: 'timestamp' + }) + lastSeen: Date | null; + + @Column({ + nullable: true, + type: 'text' + }) + banner: string | null; + + @Column({ + type: 'jsonb', + default: [] + }) + products: Product[]; + + /** Censys Metadata */ + @Column({ + type: 'jsonb', + default: {} + }) + censysMetadata: { + product: string; + revision: string; + description: string; + version: string; + manufacturer: string; + } | null; + + /** Censys Ipv4 results */ + @Column({ + type: 'jsonb', + default: {} + }) + censysIpv4Results: { + [x: string]: any; + }; + + @Column({ + type: 'jsonb', + default: {} + }) + intrigueIdentResults: { + fingerprint: { + type: string; + vendor: string; + product: string; + version: string; + update: string; + tags: string[]; + match_type: string; + match_details: string; + hide: boolean; + cpe: string; + issue?: string; + task?: string; + inference: boolean; + }[]; + content: { + type: string; + name: string; + hide?: boolean; + issue?: boolean; + task?: boolean; + result?: boolean; + }[]; + }; + + /** Shodan results */ + @Column({ + type: 'jsonb', + default: {} + }) + shodanResults: { + product: string; + version: string; + cpe?: string[]; + } | null; + + /** Wappalyzer output */ + @Column({ + type: 'jsonb', + default: [] + }) + wappalyzerResults: { + technology?: { + name?: string; + categories?: number[]; + slug?: string; + url?: string[]; + headers?: any[]; + dns?: any[]; + cookies?: any[]; + dom?: any[]; + html?: any[]; + css?: any[]; + certIssuer?: any[]; + robots?: any[]; + meta?: any[]; + scripts?: any[]; + js?: any; + implies?: any[]; + excludes?: any[]; + icon?: string; + website?: string; + cpe?: string; + }; + pattern?: { + value?: string; + regex?: string; + confidence?: number; + version?: string; + }; + // Actual detected version + version?: string; + }[]; + + @BeforeInsert() + @BeforeUpdate() + setProducts() { + const products: Product[] = []; + if (this.wappalyzerResults) { + for (const wappalyzerResult of this.wappalyzerResults) { + const { technology = {}, version = '' } = wappalyzerResult; + const product = { + name: technology.name!, + version, + cpe: technology.cpe, + icon: technology.icon, + tags: [] + // TODO: Lookup category names from Wappalyzer. + // tags: (technology.categories || []).map((cat) => cat.name) + }; + if (product.cpe === 'cpe:/a:microsoft:exchange_server') { + // Translate detected Exchange build numbers to actual CPEs. + for (const possibleVersion in EXCHANGE_BUILD_NUMBER_TO_CPE) { + if (possibleVersion.startsWith(version)) { + product.cpe = EXCHANGE_BUILD_NUMBER_TO_CPE[possibleVersion]; + break; + } + } + } + products.push(product); + } + } + + if (this.intrigueIdentResults?.fingerprint) { + for (const result of this.intrigueIdentResults.fingerprint) { + const product = { + name: result.product, + version: result.version, + // Convert "cpe:2.3:" to "cpe:/" + cpe: result.cpe?.replace(/^cpe:2\.3:/, 'cpe:/'), + tags: result.tags, + vendor: result.vendor, + revision: result.update + }; + products.push(product); + } + } + + // Shodan stores all CPEs in the cpe array, + // but stores product name / version in the product and version + // keys for only one of those CPEs, so those two keys + // are not useful for our purposes. + if (this.shodanResults?.cpe && this.shodanResults.cpe.length > 0) { + for (const cpe of this.shodanResults.cpe) { + const parser = new CpeParser(); + const parsed = parser.parse(cpe); + const product: Product = { + name: parsed.product, + version: parsed.version, + vendor: parsed.vendor, + cpe, + tags: [] + }; + products.push(product); + } + } + + if (this.censysMetadata && Object.values(this.censysMetadata).length > 0) { + let cpe; + + if (this.censysMetadata.manufacturer && this.censysMetadata.product) { + // TODO: Improve methods for getting CPEs from Censys + // See https://www.napier.ac.uk/~/media/worktribe/output-1500093/identifying-vulnerabilities-using-internet-wide-scanning-data.pdf + // and https://github.com/TheHairyJ/Scout + cpe = + `cpe:/a:${this.censysMetadata.manufacturer}:${this.censysMetadata.product}`.toLowerCase(); + } + const product = { + name: this.censysMetadata.product, + version: this.censysMetadata.version, + description: this.censysMetadata.description, + product: this.censysMetadata.product, + revision: this.censysMetadata.revision, + cpe, + tags: [] + }; + products.push(product); + } + + const productDict: { [cpe: string]: Product } = {}; + const misc: Product[] = []; + + for (const product of products) { + for (const prop in product) { + if (!product[prop]) delete product[prop]; + } + if (product.cpe && productDict[product.cpe]) + productDict[product.cpe] = { ...productDict[product.cpe], ...product }; + else if (product.cpe) productDict[product.cpe] = product; + else misc.push(product); + } + + this.products = Object.values(productDict) + .concat(misc) + .filter(filterProducts) + .map(mapProducts); + } +} diff --git a/backend/src/models/test/__snapshots__/service.test.ts.snap b/backend/src/models/test/__snapshots__/service.test.ts.snap new file mode 100644 index 00000000..db43cfec --- /dev/null +++ b/backend/src/models/test/__snapshots__/service.test.ts.snap @@ -0,0 +1,13 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`service set products 1`] = ` +Array [ + Object { + "cpe": "cpe1", + "icon": "icon", + "name": "name", + "tags": Array [], + "version": "version", + }, +] +`; diff --git a/backend/src/models/test/service.test.ts b/backend/src/models/test/service.test.ts new file mode 100644 index 00000000..861b993a --- /dev/null +++ b/backend/src/models/test/service.test.ts @@ -0,0 +1,148 @@ +import { connectToDatabase } from '../connection'; +import { Service } from '../service'; + +describe('service', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + test('set products', async () => { + const service = await Service.create({ + port: 443 + }).save(); + service.wappalyzerResults = [ + { + technology: { + cpe: 'cpe1', + name: 'name', + slug: 'slug', + icon: 'icon', + website: 'website', + categories: [] + }, + version: 'version' + } + ]; + await service.save(); + expect(service.products).toMatchSnapshot(); + }); + test('set products should not include a blacklisted product', async () => { + const service = await Service.create({ + port: 443 + }).save(); + service.wappalyzerResults = [ + { + technology: { + cpe: 'cpe:/a:apache:tomcat', + name: 'name', + slug: 'slug', + icon: 'icon', + website: 'website', + categories: [] + }, + version: '1.1' + } + ]; + await service.save(); + expect(service.products.length).toEqual(0); + }); + test('set products should combine data from multiple scans (intrigue over wappalyzer)', async () => { + const service = await Service.create({ + port: 443 + }).save(); + service.wappalyzerResults = [ + { + technology: { + cpe: 'cpe:/a:software', + name: 'name', + slug: 'slug', + icon: 'icon', + website: 'website', + categories: [] + }, + version: '' + } + ]; + service.intrigueIdentResults = { + fingerprint: [ + { + cpe: 'cpe:/a:software', + version: '1.1', + type: '', + vendor: 'vendor', + update: '1', + tags: ['test'], + match_type: '', + match_details: '', + hide: false, + product: '', + inference: false + } + ], + content: [] + }; + await service.save(); + expect(service.products).toMatchObject([ + { + cpe: 'cpe:/a:software', + icon: 'icon', + name: 'name', + revision: '1', + tags: ['test'], + vendor: 'vendor', + version: '1.1' + } + ]); + }); + test('set products should combine data from multiple scans (wappalyzer over intrigue)', async () => { + const service = await Service.create({ + port: 443 + }).save(); + service.wappalyzerResults = [ + { + technology: { + cpe: 'cpe:/a:software', + name: 'name', + slug: 'slug', + icon: 'icon', + website: 'website', + categories: [] + }, + version: '1.1' + } + ]; + service.intrigueIdentResults = { + fingerprint: [ + { + cpe: 'cpe:/a:software', + version: '', + type: '', + vendor: 'vendor', + update: '1', + tags: ['test'], + match_type: '', + match_details: '', + hide: false, + product: '', + inference: false + } + ], + content: [] + }; + await service.save(); + expect(service.products).toMatchObject([ + { + cpe: 'cpe:/a:software', + icon: 'icon', + name: 'name', + revision: '1', + tags: ['test'], + vendor: 'vendor', + version: '1.1' + } + ]); + }); +}); diff --git a/backend/src/models/user.ts b/backend/src/models/user.ts new file mode 100644 index 00000000..8a9cdc5f --- /dev/null +++ b/backend/src/models/user.ts @@ -0,0 +1,130 @@ +import { + Entity, + Index, + Column, + UpdateDateColumn, + CreateDateColumn, + BaseEntity, + OneToMany, + BeforeInsert, + PrimaryGeneratedColumn, + BeforeUpdate +} from 'typeorm'; +import { Organization, Role } from './'; +import { ApiKey } from './api-key'; + +export enum UserType { + STANDARD = 'standard', + GLOBAL_VIEW = 'globalView', + GLOBAL_ADMIN = 'globalAdmin', + REGIONAL_ADMIN = 'regionalAdmin' +} +@Entity() +export class User extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Index({ unique: true }) + @Column({ + nullable: true + }) + cognitoId: string; + + @Index({ unique: true }) + @Column({ + nullable: true + }) + loginGovId: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @Column() + firstName: string; + + @Column() + lastName: string; + + @Column() + fullName: string; + + @Index({ unique: true }) + @Column() + email: string; + + /** Whether the user's invite is pending */ + @Column({ default: false }) + invitePending: boolean; + + /** + * When the user accepted the terms of use, + * if the user did so + */ + @Column({ + type: 'timestamp', + nullable: true + }) + dateAcceptedTerms: Date | null; + + @Column({ + type: 'text', + nullable: true + }) + acceptedTermsVersion: string | null; + + @Column({ + nullable: true, + type: 'timestamp' + }) + lastLoggedIn: Date | null; + + /** The user's type. globalView allows access to all organizations + * while globalAdmin allows universally administering Crossfeed */ + @Column('text', { default: UserType.STANDARD }) + userType: UserType; + + /** List of the user's API keys */ + @OneToMany((type) => ApiKey, (key) => key.user, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + apiKeys: ApiKey[]; + + /** The roles for organizations which the user belongs to */ + @OneToMany((type) => Role, (role) => role.user, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + roles: Role[]; + + @BeforeInsert() + @BeforeUpdate() + setFullName() { + this.fullName = this.firstName + ' ' + this.lastName; + } + + @Column({ + nullable: true + }) + regionId: string; + + @Column({ + nullable: true + }) + state: string; + + // @Column({ + // nullable: true, + // default: 0 + // }) + // numberOfOrganizations: number; + + // @Column({ + // nullable: true, + // default: [] + // }) + // organizationIds: Array; +} diff --git a/backend/src/models/vulnerability.ts b/backend/src/models/vulnerability.ts new file mode 100644 index 00000000..c621a61f --- /dev/null +++ b/backend/src/models/vulnerability.ts @@ -0,0 +1,207 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + BaseEntity, + CreateDateColumn, + ManyToOne, + Index, + UpdateDateColumn, + BeforeInsert, + BeforeUpdate +} from 'typeorm'; +import { User } from './user'; +import { Domain } from './domain'; +import { Service } from './service'; +import { IsBoolean, IsOptional } from 'class-validator'; + +export type VulnerabilitySubstate = + | 'unconfirmed' + | 'exploitable' + | 'false-positive' + | 'accepted-risk' + | 'remediated'; + +@Entity() +@Index(['domain', 'title'], { unique: true }) +@Index(['createdAt']) +@Index(['updatedAt']) +export class Vulnerability extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @ManyToOne((type) => Domain, (domain) => domain.vulnerabilities, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + domain: Domain; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @Column({ nullable: true, type: 'timestamp' }) + lastSeen: Date | null; + + @Column() + title: string; + + @Column({ + nullable: true, + type: 'text' + }) + cve: string | null; + + @Column({ + nullable: true, + type: 'text' + }) + cwe: string | null; + + @Column({ + nullable: true, + type: 'text' + }) + cpe: string | null; + + @Column({ + default: '' + }) + description: string; + + @Column({ + type: 'jsonb', + default: [] + }) + references: { + url: string; + name: string; + source: string; + tags: string[]; + }[]; + + @Column({ + nullable: true, + type: 'decimal' + }) + cvss: number | null; + + @Column({ + nullable: true, + type: 'text' + }) + severity: 'None' | 'Low' | 'Medium' | 'High' | 'Critical' | null; + + @Column({ + default: false + }) + needsPopulation: boolean; + + @Column({ default: 'open' }) + state: 'open' | 'closed'; + + @Column({ default: 'unconfirmed' }) + substate: VulnerabilitySubstate; + + /** Determines the source of the vulnerability, i.e., which + * logic caused it to be created. + */ + @Column({ default: 'cpe2cve' }) + source: + | 'cpe2cve' + | 'webpage_status_code' + | 'certs' + | 'shodan' + | 'hibp' + | 'lookingGlass' + | 'dnstwist' + | 'rootDomainSync'; + + @Column({ + default: '' + }) + notes: string; + + @ManyToOne((type) => Service, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + service: Service; + + @Column({ + type: 'jsonb', + default: [] + }) + actions: { + type: 'state-change' | 'comment'; + state?: string; + substate?: string; + value?: string; + automatic: boolean; + userId: string | null; + userName: string | null; + date: Date; + }[]; + + /** Stores structured vulnerability data related to a specific + * scan type, e.g., a list of emails found in breaches for a domain. + */ + @Column({ + type: 'jsonb', + default: {} + }) + structuredData: object; + + setState( + substate: VulnerabilitySubstate, + automatic: boolean, + user: User | null + ) { + this.substate = substate; + if (substate === 'unconfirmed' || substate === 'exploitable') + this.state = 'open'; + else this.state = 'closed'; + this.actions.unshift({ + type: 'state-change', + state: this.state, + substate: this.substate, + automatic, + userId: user ? user.id : null, + userName: user ? user.fullName : null, + date: new Date() + }); + } + + /** Set to true if the vulnerability has been on the CISA Known Exploited Vulnerability (KEV) list. **/ + @IsBoolean() + @IsOptional() + @Column({ + default: false, + nullable: true + }) + isKev?: boolean; + + /* KEV results */ + @IsOptional() + @Column({ + type: 'jsonb', + default: {}, + nullable: true + }) + kevResults?: { + [x: string]: any; + }; + + @BeforeInsert() + @BeforeUpdate() + setSeverity() { + if (!this.cvss) return; + if (this.cvss === 0) this.severity = 'None'; + else if (this.cvss < 4) this.severity = 'Low'; + else if (this.cvss < 7) this.severity = 'Medium'; + else if (this.cvss < 9) this.severity = 'High'; + else this.severity = 'Critical'; + } +} diff --git a/backend/src/models/webpage.ts b/backend/src/models/webpage.ts new file mode 100644 index 00000000..98f39a71 --- /dev/null +++ b/backend/src/models/webpage.ts @@ -0,0 +1,79 @@ +import { + Entity, + Column, + Index, + PrimaryGeneratedColumn, + ManyToOne, + BaseEntity, + CreateDateColumn, + UpdateDateColumn +} from 'typeorm'; +import { Domain } from './domain'; +import { Scan } from './scan'; + +@Entity() +@Index(['url', 'domain'], { unique: true }) +export class Webpage extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + /** When this model was last synced with Elasticsearch. */ + @Column({ + type: 'timestamp', + nullable: true + }) + syncedAt: Date | null; + + @ManyToOne((type) => Domain, (domain) => domain.webpages, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + }) + domain: Domain; + + @ManyToOne((type) => Scan, { + onDelete: 'SET NULL', + onUpdate: 'CASCADE' + }) + discoveredBy: Scan; + + @Column({ + nullable: true, + type: 'timestamp' + }) + lastSeen: Date | null; + + /** S3 key that corresponds to this webpage's contents. */ + @Column({ + nullable: true, + type: 'varchar' + }) + s3Key: string | null; + + @Column({ + type: 'varchar' + }) + url: string; + + @Column({ + type: 'numeric' + }) + status: number; + + @Column({ + type: 'numeric', + nullable: true + }) + responseSize: number | null; + + @Column({ + type: 'jsonb', + default: [] + }) + headers: { name: string; value: string }[]; +} diff --git a/backend/src/ref/exchange.ts b/backend/src/ref/exchange.ts new file mode 100644 index 00000000..b32aa700 --- /dev/null +++ b/backend/src/ref/exchange.ts @@ -0,0 +1,199 @@ +export const EXCHANGE_BUILD_NUMBER_TO_CPE = { + // Converts Microsoft Exchange short build numbers (which are detected by wappalyzer) to their corresponding CPEs. + // Taken from: https://docs.microsoft.com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019 + '15.2.792.3': 'cpe:/a:microsoft:exchange_server:2019:cumulative_update_8', + '15.2.721.2': 'cpe:/a:microsoft:exchange_server:2019:cumulative_update_7', + '15.2.659.4': 'cpe:/a:microsoft:exchange_server:2019:cumulative_update_6', + '15.2.595.3': 'cpe:/a:microsoft:exchange_server:2019:cumulative_update_5', + '15.2.529.5': 'cpe:/a:microsoft:exchange_server:2019:cumulative_update_4', + '15.2.464.5': 'cpe:/a:microsoft:exchange_server:2019:cumulative_update_3', + '15.2.397.3': 'cpe:/a:microsoft:exchange_server:2019:cumulative_update_2', + '15.2.330.5': 'cpe:/a:microsoft:exchange_server:2019:cumulative_update_1', + '15.2.221.12': 'cpe:/a:microsoft:exchange_server:2019:-', + '15.2.196.0': 'cpe:/a:microsoft:exchange_server:2019:-', + '15.1.2176.2': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_19', + '15.1.2106.2': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_18', + '15.1.2044.4': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_17', + '15.1.1979.3': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_16', + '15.1.1913.5': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_15', + '15.1.1847.3': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_14', + '15.1.1779.2': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_13', + '15.1.1713.5': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_12', + '15.1.1591.10': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_11', + '15.1.1531.3': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_10', + '15.1.1466.3': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_9', + '15.1.1415.2': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_8', + '15.1.1261.35': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_7', + '15.1.1034.26': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_6', + '15.1.845.34': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_5', + '15.1.669.32': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_4', + '15.1.544.27': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_3', + '15.1.466.34': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_2', + '15.1.396.30': 'cpe:/a:microsoft:exchange_server:2016:cumulative_update_1', + '15.1.225.42': 'cpe:/a:microsoft:exchange_server:2016:-', + '15.1.225.16': 'cpe:/a:microsoft:exchange_server:2016:-', + '15.0.1497.2': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_23', + '15.0.1473.3': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_22', + '15.0.1395.4': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_21', + '15.0.1367.3': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_20', + '15.0.1365.1': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_19', + '15.0.1347.2': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_18', + '15.0.1320.4': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_17', + '15.0.1293.2': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_16', + '15.0.1263.5': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_15', + '15.0.1236.3': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_14', + '15.0.1210.3': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_13', + '15.0.1178.4': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_12', + '15.0.1156.6': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_11', + '15.0.1130.7': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_10', + '15.0.1104.5': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_9', + '15.0.1076.9': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_8', + '15.0.1044.25': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_7', + '15.0.995.29': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_6', + '15.0.913.22': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_5', + '15.0.847.32': 'cpe:/a:microsoft:exchange_server:2013:sp1', + '15.0.775.38': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_3', + '15.0.712.24': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_2', + '15.0.620.29': 'cpe:/a:microsoft:exchange_server:2013:cumulative_update_1', + '15.0.516.32': 'cpe:/a:microsoft:exchange_server:2013:rtm', + '14.3.509.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_31', + '14.3.496.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_30', + '14.3.468.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_29', + '14.3.461.1': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_28', + '14.3.452.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_27', + '14.3.442.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_26', + '14.3.435.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_25', + '14.3.419.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_24', + '14.3.417.1': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_23', + '14.3.411.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_22', + '14.3.399.2': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_21', + '14.3.389.1': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_20', + '14.3.382.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_19', + '14.3.361.1': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_18', + '14.3.352.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_17', + '14.3.336.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_16', + '14.3.319.2': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_15', + '14.3.301.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_14', + '14.3.294.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_13', + '14.3.279.2': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_12', + '14.3.266.2': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_11', + '14.3.248.2': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_10', + '14.3.235.1': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_9', + '14.3.224.2': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_8', + '14.3.224.1': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_8', + '14.3.210.2': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_7', + '14.3.195.1': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_6', + '14.3.181.6': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_5', + '14.3.174.1': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_4', + '14.3.169.1': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_3', + '14.3.158.1': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_2', + '14.3.146.0': 'cpe:/a:microsoft:exchange_server:2010:sp3_rollup_1', + '14.3.123.4': 'cpe:/a:microsoft:exchange_server:2010:sp3', + '14.2.390.3': 'cpe:/a:microsoft:exchange_server:2010:sp2', + '14.2.375.0': 'cpe:/a:microsoft:exchange_server:2010:sp2', + '14.2.342.3': 'cpe:/a:microsoft:exchange_server:2010:sp2', + '14.2.328.10': 'cpe:/a:microsoft:exchange_server:2010:sp2', + '14.3.328.5': 'cpe:/a:microsoft:exchange_server:2010:sp2', + '14.2.318.4': 'cpe:/a:microsoft:exchange_server:2010:sp2', + '14.2.318.2': 'cpe:/a:microsoft:exchange_server:2010:sp2', + '14.2.309.2': 'cpe:/a:microsoft:exchange_server:2010:sp2', + '14.2.298.4': 'cpe:/a:microsoft:exchange_server:2010:sp2', + '14.2.283.3': 'cpe:/a:microsoft:exchange_server:2010:sp2', + '14.2.247.5': 'cpe:/a:microsoft:exchange_server:2010:sp2', + '14.1.438.0': 'cpe:/a:microsoft:exchange_server:2010:sp1', + '14.1.421.3': 'cpe:/a:microsoft:exchange_server:2010:sp1', + '14.1.421.2': 'cpe:/a:microsoft:exchange_server:2010:sp1', + '14.1.421.0': 'cpe:/a:microsoft:exchange_server:2010:sp1', + '14.1.355.2': 'cpe:/a:microsoft:exchange_server:2010:sp1', + '14.1.339.1': 'cpe:/a:microsoft:exchange_server:2010:sp1', + '14.1.323.6': 'cpe:/a:microsoft:exchange_server:2010:sp1', + '14.1.289.7': 'cpe:/a:microsoft:exchange_server:2010:sp1', + '14.1.270.1': 'cpe:/a:microsoft:exchange_server:2010:sp1', + '14.1.255.2': 'cpe:/a:microsoft:exchange_server:2010:sp1', + '14.1.218.15': 'cpe:/a:microsoft:exchange_server:2010:sp1', + '14.0.726.0': 'cpe:/a:microsoft:exchange_server:2010:-', + '14.0.702.1': 'cpe:/a:microsoft:exchange_server:2010:-', + '14.0.694.0': 'cpe:/a:microsoft:exchange_server:2010:-', + '14.0.689.0': 'cpe:/a:microsoft:exchange_server:2010:-', + '14.0.682.1': 'cpe:/a:microsoft:exchange_server:2010:-', + '14.0.639.21': 'cpe:/a:microsoft:exchange_server:2010:-', + '8.3.517.0': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.502.0': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.485.1': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.468.0': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.459.0': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.445.0': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.417.1': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.406.0': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.389.2': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.379.2': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.348.2': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.342.4': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.327.1': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.298.3': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.297.2': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.279.6': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.279.5': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.279.3': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.264.0': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.245.2': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.213.1': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.192.1': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.159.2': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.137.3': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.106.2': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.3.83.6': 'cpe:/a:microsoft:exchange_server:2007:sp3', + '8.2.305.3': 'cpe:/a:microsoft:exchange_server:2007:sp2', + '8.2.254.0': 'cpe:/a:microsoft:exchange_server:2007:sp2', + '8.2.247.2': 'cpe:/a:microsoft:exchange_server:2007:sp2', + '8.2.234.1': 'cpe:/a:microsoft:exchange_server:2007:sp2', + '8.2.217.3': 'cpe:/a:microsoft:exchange_server:2007:sp2', + '8.2.176.2': 'cpe:/a:microsoft:exchange_server:2007:sp2', + '8.1.436.0': 'cpe:/a:microsoft:exchange_server:2007:sp1', + '8.1.393.1': 'cpe:/a:microsoft:exchange_server:2007:sp1', + '8.1.375.2': 'cpe:/a:microsoft:exchange_server:2007:sp1', + '8.1.359.2': 'cpe:/a:microsoft:exchange_server:2007:sp1', + '8.1.340.1': 'cpe:/a:microsoft:exchange_server:2007:sp1', + '8.1.336.1': 'cpe:/a:microsoft:exchange_server:2007:sp1', + '8.1.311.3': 'cpe:/a:microsoft:exchange_server:2007:sp1', + '8.1.291.2': 'cpe:/a:microsoft:exchange_server:2007:sp1', + '8.1.278.2': 'cpe:/a:microsoft:exchange_server:2007:sp1', + '8.1.263.1': 'cpe:/a:microsoft:exchange_server:2007:sp1', + '8.1.240.6': 'cpe:/a:microsoft:exchange_server:2007:sp1', + '8.0.813.0': 'cpe:/a:microsoft:exchange_server:2007:-', + '8.0.783.2': 'cpe:/a:microsoft:exchange_server:2007:-', + '8.0.754.0': 'cpe:/a:microsoft:exchange_server:2007:-', + '8.0.744.0': 'cpe:/a:microsoft:exchange_server:2007:-', + '8.0.730.1': 'cpe:/a:microsoft:exchange_server:2007:-', + '8.0.711.2': 'cpe:/a:microsoft:exchange_server:2007:-', + '8.0.708.3': 'cpe:/a:microsoft:exchange_server:2007:-', + '8.0.685.25': 'cpe:/a:microsoft:exchange_server:2007:-', + '6.5.7654.4': 'cpe:/a:microsoft:exchange_server:2003:sp2', + '6.5.7653.33': 'cpe:/a:microsoft:exchange_server:2003:sp2', + '6.5.7683': 'cpe:/a:microsoft:exchange_server:2003:sp2', + '6.5.7226': 'cpe:/a:microsoft:exchange_server:2003:sp1', + '6.5.6944': 'cpe:/a:microsoft:exchange_server:2003', + '6.0.6620.7': 'cpe:/a:microsoft:exchange_server:2000:sp3', + '6.0.6620.5': 'cpe:/a:microsoft:exchange_server:2000:sp3', + '6.0.6603': 'cpe:/a:microsoft:exchange_server:2000:sp3', + '6.0.6556': 'cpe:/a:microsoft:exchange_server:2000:sp3', + '6.0.6487': 'cpe:/a:microsoft:exchange_server:2000:sp3', + '6.0.6249': 'cpe:/a:microsoft:exchange_server:2000:sp3', + '6.0.5762': 'cpe:/a:microsoft:exchange_server:2000:sp2', + '6.0.4712': 'cpe:/a:microsoft:exchange_server:2000:sp1', + '6.0.4417': 'cpe:/a:microsoft:exchange_server:2000:-', + '5.5.2653': 'cpe:/a:microsoft:exchange_server:5.5:sp4', + '5.5.2650': 'cpe:/a:microsoft:exchange_server:5.5:sp3', + '5.5.2448': 'cpe:/a:microsoft:exchange_server:5.5:sp2', + '5.5.2232': 'cpe:/a:microsoft:exchange_server:5.5:sp1', + '5.5.1960': 'cpe:/a:microsoft:exchange_server:5.5:-', + '5.0.1460': 'cpe:/a:microsoft:exchange_server:5.0:sp2', + '5.0.1458': 'cpe:/a:microsoft:exchange_server:5.0:sp1', + '5.0.1457': 'cpe:/a:microsoft:exchange_server:5.0:-', + '4.0.996': 'cpe:/a:microsoft:exchange_server:4.0:sp5', + '4.0.995': 'cpe:/a:microsoft:exchange_server:4.0:sp4', + '4.0.994': 'cpe:/a:microsoft:exchange_server:4.0:sp3', + '4.0.993': 'cpe:/a:microsoft:exchange_server:4.0:sp2', + '4.0.838': 'cpe:/a:microsoft:exchange_server:4.0:sp1', + '4.0.837': 'cpe:/a:microsoft:exchange_server:4.0:-' +}; diff --git a/backend/src/tasks/__mocks__/ecs-client.ts b/backend/src/tasks/__mocks__/ecs-client.ts new file mode 100644 index 00000000..ba6f144f --- /dev/null +++ b/backend/src/tasks/__mocks__/ecs-client.ts @@ -0,0 +1,21 @@ +import { CommandOptions } from '../ecs-client'; + +export const runCommand = jest.fn(async (commandOptions: CommandOptions) => { + return { + tasks: [ + { + taskArn: 'mock_task_arn' + } + ] + }; +}); + +export const getNumTasks = jest.fn(() => 0); + +export const getLogs = jest.fn(() => 'logs'); + +export default jest.fn(() => ({ + runCommand, + getNumTasks, + getLogs +})); diff --git a/backend/src/tasks/__mocks__/es-client.ts b/backend/src/tasks/__mocks__/es-client.ts new file mode 100644 index 00000000..3bf61d3b --- /dev/null +++ b/backend/src/tasks/__mocks__/es-client.ts @@ -0,0 +1,14 @@ +export const syncDomainsIndex = jest.fn(() => ({})); + +export const updateDomains = jest.fn(() => ({})); + +export const updateWebpages = jest.fn(() => ({})); + +export const searchDomains = jest.fn(() => ({})); + +export default jest.fn(() => ({ + syncDomainsIndex, + updateDomains, + updateWebpages, + searchDomains +})); diff --git a/backend/src/tasks/__mocks__/s3-client.ts b/backend/src/tasks/__mocks__/s3-client.ts new file mode 100644 index 00000000..9afb9a92 --- /dev/null +++ b/backend/src/tasks/__mocks__/s3-client.ts @@ -0,0 +1,9 @@ +export const saveCSV = jest.fn(() => 'http://mock_url'); +export const listReports = jest.fn(() => ({ Contents: 'report content' })); +export const exportReport = jest.fn(() => 'report_url'); + +export default jest.fn(() => ({ + saveCSV, + listReports, + exportReport +})); diff --git a/backend/src/tasks/amass.ts b/backend/src/tasks/amass.ts new file mode 100644 index 00000000..34017d22 --- /dev/null +++ b/backend/src/tasks/amass.ts @@ -0,0 +1,57 @@ +import { Domain } from '../models'; +import { spawnSync } from 'child_process'; +import { readFileSync } from 'fs'; +import { plainToClass } from 'class-transformer'; +import { CommandOptions } from './ecs-client'; +import getRootDomains from './helpers/getRootDomains'; +import saveDomainsToDb from './helpers/saveDomainsToDb'; +import * as path from 'path'; + +const OUT_PATH = path.join(__dirname, 'out-' + Math.random() + '.txt'); + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName, scanId } = commandOptions; + + console.log('Running amass on organization', organizationName); + + const rootDomains = await getRootDomains(organizationId!); + + for (const rootDomain of rootDomains) { + try { + const args = [ + 'enum', + '-ip', + '-active', + '-d', + rootDomain, + '-json', + OUT_PATH + ]; + console.log('Running amass with args', args); + spawnSync('amass', args, { stdio: 'pipe' }); + const output = String(readFileSync(OUT_PATH)); + const lines = output.split('\n'); + const domains: Domain[] = []; + for (const line of lines) { + if (line == '') continue; + const parsed = JSON.parse(line); + domains.push( + plainToClass(Domain, { + ip: parsed.addresses[0].ip, + name: parsed.name, + asn: parsed.addresses[0].asn, + organization: { id: organizationId }, + fromRootDomain: rootDomain, + subdomainSource: 'amass', + discoveredBy: { id: scanId } + }) + ); + } + await saveDomainsToDb(domains); + console.log(`amass created/updated ${domains.length} new domains`); + } catch (e) { + console.error(e); + continue; + } + } +}; diff --git a/backend/src/tasks/bastion.ts b/backend/src/tasks/bastion.ts new file mode 100644 index 00000000..ab6c0556 --- /dev/null +++ b/backend/src/tasks/bastion.ts @@ -0,0 +1,21 @@ +import { Handler } from 'aws-lambda'; +import { connectToDatabase, User } from '../models'; +import ESClient from '../tasks/es-client'; + +export const handler: Handler = async (event) => { + if (event.mode === 'db') { + const connection = await connectToDatabase(true); + const res = await connection.query(event.query); + console.log(res); + } else if (event.mode === 'es') { + if (event.query === 'delete') { + const client = new ESClient(); + await client.deleteAll(); + console.log('Index successfully deleted'); + } else { + console.log('Query not found: ' + event.query); + } + } else { + console.log('Mode not found: ' + event.mode); + } +}; diff --git a/backend/src/tasks/censys.ts b/backend/src/tasks/censys.ts new file mode 100644 index 00000000..83e92a92 --- /dev/null +++ b/backend/src/tasks/censys.ts @@ -0,0 +1,135 @@ +import axios from 'axios'; +import { Domain } from '../models'; +import { plainToClass } from 'class-transformer'; +import * as dns from 'dns'; +import saveDomainsToDb from './helpers/saveDomainsToDb'; +import { CommandOptions } from './ecs-client'; +import getRootDomains from './helpers/getRootDomains'; + +interface CensysAPIResponse { + result: { + total: number; + hits: [ + { + names?: string[]; + } + ]; + }; +} + +const resultLimit = 1000; +const resultsPerPage = 100; + +const sleep = (milliseconds: number) => { + return new Promise((resolve) => setTimeout(resolve, milliseconds)); +}; + +const fetchCensysData = async (rootDomain: string) => { + console.log(`Fetching certificates for ${rootDomain}`); + const data = await fetchPage(rootDomain); + console.log( + `Censys found ${data.result.total} certificates for ${rootDomain} + Fetching ${Math.min(data.result.total, resultLimit)} of them...` + ); + let resultCount = 0; + let nextToken = data.result.links.next; + while (nextToken && resultCount < resultLimit) { + const nextPage = await fetchPage(rootDomain, nextToken); + data.result.hits = data.result.hits.concat(nextPage.result.hits); + nextToken = nextPage.result.links.next; + resultCount += resultsPerPage; + } + return data as CensysAPIResponse; +}; + +const fetchPage = async (rootDomain: string, nextToken?: string) => { + const { data } = await axios({ + url: 'https://search.censys.io/api/v2/certificates/search', + method: 'POST', + auth: { + username: String(process.env.CENSYS_API_ID), + password: String(process.env.CENSYS_API_SECRET) + }, + headers: { + 'Content-Type': 'application/json' + }, + data: { + q: rootDomain, + per_page: resultsPerPage, + cursor: nextToken, + fields: ['names'] + } + }); + return data; +}; + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName, scanId } = commandOptions; + + console.log(`Running Censys on: ${organizationName}`); + + const rootDomains = await getRootDomains(organizationId!); + const uniqueNames = new Set(); //used to dedupe domain names + const foundDomains = new Set<{ + name: string; + organization: { id: string }; + fromRootDomain: string; + discoveredBy: { id: string }; + }>(); + + for (const rootDomain of rootDomains) { + const data = await fetchCensysData(rootDomain); + for (const hit of data.result.hits) { + if (!hit.names) continue; + for (const name of hit.names) { + const normalizedName = name.replace(/\*\.|^(www\.)/g, ''); // Remove www from beginning of name and wildcards from entire name + if ( + normalizedName.endsWith(rootDomain) && + !uniqueNames.has(normalizedName) + ) { + uniqueNames.add(normalizedName); + foundDomains.add({ + name: normalizedName, + organization: { id: organizationId! }, + fromRootDomain: rootDomain, + discoveredBy: { id: scanId } + }); + } + } + } + + await sleep(1000); // Wait for rate limit + } + + // LATER: Can we just grab the cert the site is presenting, and store that? + // Censys (probably doesn't know who's presenting it) + // SSLyze (fetches the cert), Project Sonar (has SSL certs, but not sure how pulls domains -- from IPs) + // Project Sonar has both forward & reverse DNS for finding subdomains + + // Save domains to database + console.log(`Saving ${organizationName} subdomains to database...`); + const domains: Domain[] = []; + for (const domain of foundDomains) { + let ip: string | null; + try { + ip = (await dns.promises.lookup(domain.name)).address; + } catch { + // IP not found + ip = null; + } + domains.push( + plainToClass(Domain, { + ip: ip, + name: domain.name, + organization: domain.organization, + fromRootDomain: domain.fromRootDomain, + subdomainSource: 'censys', + discoveredBy: domain.discoveredBy + }) + ); + } + await saveDomainsToDb(domains); + console.log( + `Censys saved or updated ${domains.length} subdomains for ${organizationName}` + ); +}; diff --git a/backend/src/tasks/censys/mapping.ts b/backend/src/tasks/censys/mapping.ts new file mode 100644 index 00000000..c55529e0 --- /dev/null +++ b/backend/src/tasks/censys/mapping.ts @@ -0,0 +1,194 @@ +import { CensysIpv4Data } from '../../models/generated/censysIpv4'; + +type Mapping = { + [x in keyof CensysIpv4Data]: (service: CensysIpv4Data[x]) => { + banner?: string | null; + censysMetadata?: { + product?: string; + revision?: string; + description?: string; + version?: string; + manufacturer?: string; + }; + }; +}; + +const httpMap = (e: CensysIpv4Data['p80']) => ({ + banner: e?.http?.get?.body, + censysMetadata: e?.http?.get?.metadata +}); + +const httpsMap = (e: CensysIpv4Data['p443']) => ({ + banner: e?.https?.get?.body, + censysMetadata: e?.https?.get?.metadata +}); + +const vncMap = (e: CensysIpv4Data['p5900']) => ({ + banner: null, + censysMetadata: e?.vnc?.banner?.metadata +}); + +export const mapping: Mapping = { + p80: httpMap, + p8888: httpMap, + p8080: httpMap, + p16992: httpMap, + p443: httpsMap, + p16993: httpsMap, + p21: (e) => ({ + banner: e?.ftp?.banner?.banner, + censysMetadata: e?.ftp?.banner?.metadata + }), + p22: (e) => ({ + banner: e?.ssh?.v2?.banner?.raw, + censysMetadata: e?.ssh?.v2?.metadata + }), + p23: (e) => ({ + banner: e?.telnet?.banner?.banner, + censysMetadata: e?.telnet?.banner?.metadata + }), + p25: (e) => ({ + banner: e?.smtp?.starttls?.banner, + censysMetadata: e?.smtp?.starttls?.metadata + }), + p53: (e) => ({ + banner: null, + censysMetadata: e?.dns?.lookup?.metadata + }), + p465: (e) => ({ + banner: e?.smtp?.tls?.banner, + censysMetadata: e?.smtp?.tls?.metadata + }), + p587: (e) => ({ + banner: e?.smtp?.starttls?.banner, + censysMetadata: e?.smtp?.starttls?.metadata + }), + p102: (e) => ({ + banner: null, + censysMetadata: e?.s7?.szl?.metadata + }), + p110: (e) => ({ + banner: e?.pop3?.starttls?.banner, + censysMetadata: e?.pop3?.starttls?.metadata + }), + p161: (e) => ({ + banner: null, + censysMetadata: e?.snmp?.banner?.metadata + }), + p143: (e) => ({ + banner: e?.imap?.starttls?.banner, + censysMetadata: e?.imap?.starttls?.metadata + }), + p445: (e) => ({ + banner: null, + censysMetadata: e?.smb?.banner?.metadata + }), + p502: (e) => ({ + banner: null, + censysMetadata: e?.modbus?.device_id?.metadata + }), + p623: (e) => ({ + banner: e?.ipmi?.banner?.raw, + censysMetadata: e?.ipmi?.banner?.metadata + }), + p631: (e) => ({ + banner: null, + censysMetadata: e?.ipp?.banner?.metadata + }), + p993: (e) => ({ + banner: e?.imaps?.tls?.banner, + censysMetadata: e?.imaps?.tls?.metadata + }), + p995: (e) => ({ + banner: e?.pop3s?.tls?.banner, + censysMetadata: e?.pop3s?.tls?.metadata + }), + p1433: (e) => ({ + banner: null, + censysMetadata: e?.mssql?.banner?.metadata + }), + p1521: (e) => ({ + banner: null, + censysMetadata: e?.oracle?.banner?.metadata + }), + p1883: (e) => ({ + banner: null, + censysMetadata: e?.mqtt?.banner?.metadata + }), + p8883: (e) => ({ + banner: null, + censysMetadata: e?.mqtt?.banner?.metadata + }), + p1900: (e) => ({ + banner: null, + censysMetadata: e?.upnp?.discovery?.metadata + }), + p1911: (e) => ({ + banner: null, + censysMetadata: e?.fox?.device_id?.metadata + }), + p2323: (e) => ({ + banner: e?.telnet?.banner?.banner, + censysMetadata: e?.telnet?.banner?.metadata + }), + p3306: (e) => ({ + banner: null, + censysMetadata: e?.mysql?.banner?.metadata + }), + p3389: (e) => ({ + banner: null, + censysMetadata: e?.rdp?.banner?.metadata + }), + p5432: (e) => ({ + banner: null, + censysMetadata: e?.postgres?.banner?.metadata + }), + p5632: (e) => ({ + banner: null, + censysMetadata: e?.pca?.banner?.metadata + }), + p5672: (e) => ({ + banner: null, + censysMetadata: e?.amqp?.banner?.metadata + }), + p5900: vncMap, + p5901: vncMap, + p5902: vncMap, + p5903: vncMap, + p6379: (e) => ({ + banner: null, + censysMetadata: e?.redis?.banner?.metadata + }), + p6443: (e) => ({ + banner: null, + censysMetadata: e?.kubernetes?.banner?.metadata + }), + p7547: (e) => ({ + banner: e?.cwmp?.get?.body, + censysMetadata: e?.cwmp?.get?.metadata + }), + p9090: (e) => ({ + banner: null, + censysMetadata: e?.prometheus?.banner?.metadata + }), + p9200: (e) => ({ + banner: null, + censysMetadata: e?.elasticsearch?.banner?.metadata + }), + p11211: (e) => ({ + banner: null, + censysMetadata: e?.memcached?.banner?.metadata + }), + p20000: (e) => ({ + banner: null, + censysMetadata: e?.dnp3?.status?.metadata + }), + p27017: (e) => ({ + banner: null, + censysMetadata: e?.mongodb?.banner?.metadata + }), + p47808: (e) => ({ + banner: null, + censysMetadata: e?.bacnet?.device_id?.metadata + }) +}; diff --git a/backend/src/tasks/censysCertificates.ts b/backend/src/tasks/censysCertificates.ts new file mode 100644 index 00000000..f2bd369e --- /dev/null +++ b/backend/src/tasks/censysCertificates.ts @@ -0,0 +1,211 @@ +import { connectToDatabase, Domain, Scan } from '../models'; +import { plainToClass } from 'class-transformer'; +import saveDomainsToDb from './helpers/saveDomainsToDb'; +import { CommandOptions } from './ecs-client'; +import { CensysCertificatesData } from '../models/generated/censysCertificates'; +import getAllDomains from './helpers/getAllDomains'; +import sanitizeChunkValues from './helpers/sanitizeChunkValues'; +import * as zlib from 'zlib'; +import * as readline from 'readline'; +import got from 'got'; +import PQueue from 'p-queue'; +import pRetry from 'p-retry'; +import axios from 'axios'; +import getScanOrganizations from './helpers/getScanOrganizations'; + +interface CommonNameToDomainsMap { + [commonName: string]: Domain[]; +} + +const auth = { + username: process.env.CENSYS_API_ID!, + password: process.env.CENSYS_API_SECRET! +}; + +const CENSYS_CERTIFICATES_ENDPOINT = + 'https://censys.io/api/v1/data/certificates_2018/'; + +// Sometimes, a field might contain null characters, but we can't store null +// characters in a string field in PostgreSQL. For example, a site might have +// a banner ending with "\r\n\u0000" or "\\u0000". +const sanitizeStringField = (input) => + input.replace(/\\u0000/g, '').replace(/\0/g, ''); + +const downloadPath = async ( + path: string, + commonNameToDomainsMap: CommonNameToDomainsMap, + i: number, + numFiles: number +): Promise => { + if (i >= 100) { + throw new Error('Invalid chunk number.'); + } + console.log(`i: ${i} of ${numFiles}: starting download of url ${path}`); + + const domains: Domain[] = []; + const gunzip = zlib.createGunzip(); + const downloadStream = got.stream.get(path, { ...auth }); + const unzippedStream = downloadStream.pipe(gunzip); + // readInterface lets us stream the JSON file line-by-line + const readInterface = readline.createInterface({ + input: unzippedStream + }); + await new Promise((resolve, reject) => { + downloadStream.on('error', reject); + readInterface.on('line', function (line) { + const item: CensysCertificatesData = JSON.parse(line); + + // eslint-disable-next-line prefer-spread + let matchingDomains = [].concat + .apply( + [], + ((item.parsed?.names as any as string[]) || []).map( + (name) => commonNameToDomainsMap[name] + ) + ) + .filter((e) => e); + + if (process.env.IS_LOCAL && typeof jest === 'undefined') { + // For local development: just randomly match domains + // (this behavior is not present when running tests + // through jest, though). + // eslint-disable-next-line prefer-spread + matchingDomains = [].concat + .apply([], Object.values(commonNameToDomainsMap)) // get a list of all domains in the domain map + .filter(() => Math.random() < 0.00001); + } + for (const matchingDomain of matchingDomains) { + domains.push( + plainToClass(Domain, { + name: matchingDomain.name, + organization: matchingDomain.organization, + censysCertificatesResults: JSON.parse( + sanitizeStringField(JSON.stringify(item)) + ), + ssl: { + issuerOrg: item.parsed?.issuer?.organization, + issuerCN: item.parsed?.issuer?.common_name, + validFrom: item.parsed?.validity?.start, + validTo: item.parsed?.validity?.end, + altNames: item.parsed?.names || [], + fingerprint: item.raw + } + }) + ); + } + }); + readInterface.on('close', resolve); + readInterface.on('SIGINT', reject); + readInterface.on('SIGCONT', reject); + readInterface.on('SIGTSTP', reject); + }); + if (!domains.length) { + console.log( + `censysCertificates - processed file ${i} of ${numFiles}: got no results` + ); + } else { + console.log( + `censysCertificates - processed file ${i} of ${numFiles}: got some results: ${domains.length} domains` + ); + } + + await saveDomainsToDb(domains); +}; + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId } = commandOptions; + + const { chunkNumber, numChunks } = await sanitizeChunkValues(commandOptions); + + const { + data: { results } + } = await pRetry(() => axios.get(CENSYS_CERTIFICATES_ENDPOINT, { auth }), { + // Perform fewer retries on jest to make tests faster + retries: typeof jest === 'undefined' ? 5 : 2, + randomize: true + }); + + const { + data: { files } + } = await pRetry(() => axios.get(results.latest.details_url, { auth }), { + // Perform fewer retries on jest to make tests faster + retries: typeof jest === 'undefined' ? 5 : 2, + randomize: true + }); + + await connectToDatabase(); + const scan = await Scan.findOne( + { id: commandOptions.scanId }, + { relations: ['organizations', 'tags', 'tags.organizations'] } + ); + + let orgs: string[] | undefined = undefined; + // censysCertificates is a global scan, so organizationId is only specified for tests. + // Otherwise, scan.organizations can be used for granular control of censys. + if (organizationId) orgs = [organizationId]; + else if (scan?.isGranular) { + orgs = getScanOrganizations(scan).map((org) => org.id); + } + + const allDomains = await getAllDomains(orgs); + + const queue = new PQueue({ concurrency: 2 }); + + const numFiles = Object.keys(files).length; + const fileNames = Object.keys(files).sort(); + const jobs: Promise[] = []; + + let startIndex = Math.floor(((1.0 * chunkNumber!) / numChunks!) * numFiles); + let endIndex = + Math.floor(((1.0 * (chunkNumber! + 1)) / numChunks!) * numFiles) - 1; + + if (process.env.IS_LOCAL && typeof jest === 'undefined') { + // For local testing. + startIndex = 0; + endIndex = 1; + } + + const commonNameToDomainsMap: CommonNameToDomainsMap = + allDomains.reduce( + (map: CommonNameToDomainsMap, domain: Domain) => { + const split = domain.name.split('.'); + for (let i = 0; i < split.length - 1; i++) { + const commonName = + i === 0 ? domain.name : '*.' + split.slice(i).join('.'); + if (!map[commonName]) { + map[commonName] = []; + } + map[commonName].push(domain); + } + return map; + }, + {} + ); + + for (let i = startIndex; i <= endIndex; i++) { + const idx = i; + const fileName = fileNames[idx]; + jobs.push( + queue.add(() => + pRetry( + () => + downloadPath( + files[fileName].download_path, + commonNameToDomainsMap, + idx, + numFiles + ), + { + // Perform fewer retries on jest to make tests faster + retries: typeof jest === 'undefined' ? 5 : 2, + randomize: true + } + ) + ) + ); + } + console.log(`censysCertificates: scheduled all tasks`); + await Promise.all(jobs); + + console.log(`censysCertificates done`); +}; diff --git a/backend/src/tasks/censysIpv4.ts b/backend/src/tasks/censysIpv4.ts new file mode 100644 index 00000000..6972d38c --- /dev/null +++ b/backend/src/tasks/censysIpv4.ts @@ -0,0 +1,208 @@ +import { connectToDatabase, Domain, Scan, Service } from '../models'; +import { plainToClass } from 'class-transformer'; +import saveDomainsToDb from './helpers/saveDomainsToDb'; +import { CommandOptions } from './ecs-client'; +import { CensysIpv4Data } from 'src/models/generated/censysIpv4'; +import { mapping } from './censys/mapping'; +import saveServicesToDb from './helpers/saveServicesToDb'; +import getAllDomains from './helpers/getAllDomains'; +import * as zlib from 'zlib'; +import * as readline from 'readline'; +import got from 'got'; +import PQueue from 'p-queue'; +import pRetry from 'p-retry'; +import axios from 'axios'; +import getScanOrganizations from './helpers/getScanOrganizations'; +import sanitizeChunkValues from './helpers/sanitizeChunkValues'; + +export interface IpToDomainsMap { + [ip: string]: Domain[]; +} + +const auth = { + username: process.env.CENSYS_API_ID!, + password: process.env.CENSYS_API_SECRET! +}; + +const CENSYS_IPV4_ENDPOINT = 'https://censys.io/api/v1/data/ipv4_2018'; + +// Sometimes, a field might contain null characters, but we can't store null +// characters in a string field in PostgreSQL. For example, a site might have +// a banner ending with "\r\n\u0000" or "\\u0000". +export const sanitizeStringField = (input) => + input.replace(/\\u0000/g, '').replace(/\0/g, ''); + +const downloadPath = async ( + path: string, + ipToDomainsMap: IpToDomainsMap, + i: number, + numFiles: number, + commandOptions: CommandOptions +): Promise => { + if (i >= 100) { + throw new Error('Invalid chunk number.'); + } + console.log(`i: ${i} of ${numFiles}: starting download of url ${path}`); + + const domains: Domain[] = []; + const services: Service[] = []; + const gunzip = zlib.createGunzip(); + const downloadStream = got.stream.get(path, { ...auth }); + const unzippedStream = downloadStream.pipe(gunzip); + // readInterface lets us stream the JSON file line-by-line + const readInterface = readline.createInterface({ + input: unzippedStream + }); + await new Promise((resolve, reject) => { + downloadStream.on('error', reject); + readInterface.on('line', function (line) { + const item: CensysIpv4Data = JSON.parse(line); + + let matchingDomains = ipToDomainsMap[item.ip!] || []; + if (process.env.IS_LOCAL && typeof jest === 'undefined') { + // For local development: just randomly match domains + // (this behavior is not present when running tests + // through jest, though). + // eslint-disable-next-line prefer-spread + matchingDomains = [].concat + .apply([], Object.values(ipToDomainsMap)) // get a list of all domains in the domain map + .filter(() => Math.random() < 0.00001); + } + for (const matchingDomain of matchingDomains) { + domains.push( + plainToClass(Domain, { + name: matchingDomain.name, + organization: matchingDomain.organization, + asn: item.autonomous_system?.asn, + ip: item.ip, + country: item.location?.country_code + }) + ); + for (const key in item) { + if (key.startsWith('p') && mapping[key]) { + const service = Object.keys(item[key] as any)[0]; + const s = { + ...mapping[key](item[key]), + service, + discoveredBy: { id: commandOptions.scanId }, + port: Number(key.slice(1)), + domain: matchingDomain, + lastSeen: new Date(Date.now()), + serviceSource: 'censysIpv4', + censysIpv4Results: JSON.parse( + sanitizeStringField(JSON.stringify(item[key])) + ) + }; + for (const k in s) { + if (typeof s[k] === 'string') { + s[k] = sanitizeStringField(s[k]); + } + } + services.push(plainToClass(Service, s)); + } + } + } + }); + readInterface.on('close', resolve); + readInterface.on('SIGINT', reject); + readInterface.on('SIGCONT', reject); + readInterface.on('SIGTSTP', reject); + }); + if (!domains.length) { + console.log( + `censysipv4 - processed file ${i} of ${numFiles}: got no results` + ); + } else { + console.log( + `censysipv4 - processed file ${i} of ${numFiles}: got some results: ${domains.length} domains and ${services.length} services` + ); + } + + await saveDomainsToDb(domains); + await saveServicesToDb(services); +}; + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId } = commandOptions; + + const { chunkNumber, numChunks } = await sanitizeChunkValues(commandOptions); + + const { + data: { results } + } = await axios.get(CENSYS_IPV4_ENDPOINT, { auth }); + + const { + data: { files } + } = await axios.get(results.latest.details_url, { auth }); + + await connectToDatabase(); + const scan = await Scan.findOne( + { id: commandOptions.scanId }, + { relations: ['organizations', 'tags', 'tags.organizations'] } + ); + + let orgs: string[] | undefined = undefined; + // censysIpv4 is a global scan, so organizationId is only specified for tests. + // Otherwise, scan.organizations can be used for granular control of censysIpv4. + if (organizationId) orgs = [organizationId]; + else if (scan?.isGranular) { + orgs = getScanOrganizations(scan).map((org) => org.id); + } + + const allDomains = await getAllDomains(orgs); + + const queue = new PQueue({ concurrency: 2 }); + + const numFiles = Object.keys(files).length; + const fileNames = Object.keys(files).sort(); + const jobs: Promise[] = []; + + let startIndex = Math.floor(((1.0 * chunkNumber!) / numChunks!) * numFiles); + let endIndex = + Math.floor(((1.0 * (chunkNumber! + 1)) / numChunks!) * numFiles) - 1; + + if (process.env.IS_LOCAL && typeof jest === 'undefined') { + // For local testing. + startIndex = 0; + endIndex = 1; + } + + const ipToDomainsMap: IpToDomainsMap = allDomains.reduce( + (map: IpToDomainsMap, domain: Domain) => { + if (!map[domain.ip]) { + map[domain.ip] = []; + } + map[domain.ip].push(domain); + return map; + }, + {} + ); + + for (let i = startIndex; i <= endIndex; i++) { + const idx = i; + const fileName = fileNames[idx]; + jobs.push( + queue.add(() => + pRetry( + () => + downloadPath( + files[fileName].download_path, + ipToDomainsMap, + idx, + numFiles, + commandOptions + ), + { + // Perform fewer retries on jest to make tests faster + retries: typeof jest === 'undefined' ? 5 : 2, + randomize: true + } + ) + ) + ); + } + console.log(`censysipv4: scheduled all tasks`); + await Promise.all(jobs); + + console.log(`censysipv4 done`); +}; diff --git a/backend/src/tasks/checkUserExpiration.ts b/backend/src/tasks/checkUserExpiration.ts new file mode 100644 index 00000000..2e5faa72 --- /dev/null +++ b/backend/src/tasks/checkUserExpiration.ts @@ -0,0 +1,137 @@ +import { Handler } from 'aws-lambda'; +import * as AWS from 'aws-sdk'; +import { connectToDatabase, User, UserType } from '../models'; +import { subDays, formatISO } from 'date-fns'; +import { sendEmail } from '../api/helpers'; +import { getRepository } from 'typeorm'; + +const cognito = new AWS.CognitoIdentityServiceProvider(); +const userPoolId = process.env.REACT_APP_USER_POOL_ID!; +const ses = new AWS.SES({ region: 'us-east-1' }); // Assuming SES for email notifications + +export const handler: Handler = async (event) => { + await connectToDatabase(true); + + const today = new Date(); + const cutoff30Days = subDays(today, 30); + const cutoff45Days = subDays(today, 45); + const cutoff90Days = subDays(today, 90); + + // Format dates for database querying + const formattedCutoff30Days = formatISO(cutoff30Days, { + representation: 'date' + }); + const formattedCutoff45Days = formatISO(cutoff45Days, { + representation: 'date' + }); + const formattedCutoff90Days = formatISO(cutoff90Days, { + representation: 'date' + }); + + // Users to notify (30 days of inactivity) + const usersToNotify = await User.find({ + where: { + lastLoggedIn: { + lt: formattedCutoff30Days, // Less than 30 days ago + gte: formattedCutoff45Days // Greater than or equal to 45 days ago + } + } + }); + + // Notify users of inactivity (30 days) + for (const user of usersToNotify) { + const subject = 'Account Inactivity Notice'; + const textBody = `Hello ${user.fullName},\n\nYour account has been + inactive for over 30 days. If your account reaches 45 days of inactivity, + your password will be reset, requiring action to reactivate your account.`; + await sendEmail(user.email, subject, textBody); + } + + // Users to deactivate (45 days of inactivity) + const usersToDeactivate = await User.find({ + where: { + lastLoggedIn: { + lt: formattedCutoff30Days, // Less than 30 days ago + gte: formattedCutoff45Days // Greater than or equal to 45 days ago + } + } + }); + + // Users to remove (90 days of inactivity) + const usersToRemove = await User.find({ + where: { + lastLoggedIn: `<${formattedCutoff90Days}` + } + }); + + // Notify users of inactivity (90 days) + for (const user of usersToRemove) { + const subject = 'Account Deactiveation Notice'; + const textBody = `Hello ${user.fullName},\n\nYour account has been + inactive for over 90 days. If your account has been removed, requiring + action to recreate your account.`; + await sendEmail(user.email, subject, textBody); + } + + // Deactivate users (reset password) + for (const user of usersToDeactivate) { + // Prepare email content + const subject = 'Account Deactivation Notice'; + const textBody = `Hello ${user.fullName},\n\nYour account has been inactive for over 45 days. As a result, your password will be reset, and you will need to set a new password the next time you log in. If your account reaches 90 days of inactivity, it will be removed, requiring action to recreate your account.`; + + // Send inactivity notification email + try { + await sendEmail(user.email, subject, textBody); + console.log(`Inactivity notification sent to user ${user.id}.`); + } catch (emailError) { + console.error( + `Error sending inactivity notification to user ${user.id}: ${emailError}` + ); + } + + // Reset the user's password + try { + await cognito + .adminSetUserPassword({ + Password: process.env.REACT_APP_RANDOM_PASSWORD as string, // Ensure this is set in your environment + UserPoolId: userPoolId, + Username: user.cognitoId, + Permanent: false // This requires the user to change their password at next login + }) + .promise(); + console.log( + `Password reset for user ${user.id} due to 45 days of inactivity.` + ); + } catch (passwordError) { + console.error( + `Error resetting password for user ${user.id}: ${passwordError}` + ); + } + } + + // Notify and remove users (90 days of inactivity) + for (const user of usersToRemove) { + const subject = 'Account Deactivation Notice'; + const textBody = `Hello ${user.fullName},\n\nYour account has been + inactive for over 90 days and has been removed. You will need to recreate + your account if you wish to use our services again.`; + await sendEmail(user.email, subject, textBody); + + try { + // Remove the user from Cognito + await cognito + .adminDeleteUser({ + UserPoolId: userPoolId, + Username: user.cognitoId + }) + .promise(); + + // Remove the user from your database + await getRepository(User).remove(user); // Correctly placed inside async handler + + console.log(`Removed user ${user.id} due to 90 days of inactivity.`); + } catch (error) { + console.error(`Error removing user ${user.id}: ${error}`); + } + } +}; diff --git a/backend/src/tasks/cloudwatchToS3.ts b/backend/src/tasks/cloudwatchToS3.ts new file mode 100644 index 00000000..397eed43 --- /dev/null +++ b/backend/src/tasks/cloudwatchToS3.ts @@ -0,0 +1,124 @@ +import { + CloudWatchLogsClient, + DescribeLogGroupsCommand, + DescribeLogGroupsRequest, + ListTagsForResourceCommand, + LogGroup, + CreateExportTaskCommand +} from '@aws-sdk/client-cloudwatch-logs'; +import { + SSMClient, + GetParameterCommand, + PutParameterCommand +} from '@aws-sdk/client-ssm'; + +const logs = new CloudWatchLogsClient({}); +const ssm = new SSMClient({}); +const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +export const handler = async () => { + const args: DescribeLogGroupsRequest = {}; + let logGroups: LogGroup[] = []; + const logBucketName = process.env.CLOUDWATCH_BUCKET_NAME; + const stage = process.env.STAGE; + + console.log(`logBucketName=${logBucketName}, stage=${stage}`); + + if (!logBucketName || !stage) { + console.error(`Error: logBucketName or stage not defined`); + return; + } + + while (true) { + const describeLogGroupsResponse = await logs.send( + new DescribeLogGroupsCommand(args) + ); + logGroups = logGroups.concat(describeLogGroupsResponse.logGroups!); + if (!describeLogGroupsResponse.nextToken) { + break; + } + args.nextToken = describeLogGroupsResponse.nextToken; + } + + for (const logGroup of logGroups) { + console.log(`logGroup: ${JSON.stringify(logGroup)}`); + const listTagsResponse = await logs.send( + new ListTagsForResourceCommand({ + resourceArn: logGroup.arn!.replace(/:\*$/g, '') // .replace() removes the trailing :* + }) + ); + console.log(`listTagsResponse: ${JSON.stringify(listTagsResponse)}`); + const logGroupTags = listTagsResponse.tags || {}; + if (logGroupTags.Stage !== stage) { + console.log( + `Skipping log group: ${logGroup.logGroupName} (no ${stage} tag)` + ); + continue; + } + const logGroupName = logGroup.logGroupName!; + console.log(`Processing log group: ${logGroupName}`); + const ssmParameterName = + `/logs/${stage}/last-export-to-s3/${logGroupName}`.replace('//', '/'); + let ssmValue = '0'; + + try { + const ssmResponse = await ssm.send( + new GetParameterCommand({ Name: ssmParameterName }) + ); + console.log(`ssmResponse: ${JSON.stringify(ssmResponse)}`); + ssmValue = ssmResponse.Parameter?.Value || '0'; + } catch (error) { + if (error.name !== 'ParameterNotFound') { + console.error(`Error fetching SSM parameter: ${JSON.stringify(error)}`); + } + console.error(`ssm.send error: ${JSON.stringify(error)}`); + } + + const exportTime = Math.round(Date.now()); + + console.log(`--> Exporting ${logGroupName} to ${logBucketName}`); + + if (exportTime - parseInt(ssmValue) < 24 * 60 * 60 * 1000) { + console.log( + 'Skipped: log group was already exported in the last 24 hours' + ); + continue; + } + + try { + const exportTaskResponse = await logs.send( + new CreateExportTaskCommand({ + logGroupName: logGroupName, + from: parseInt(ssmValue), + to: exportTime, + destination: logBucketName, + destinationPrefix: logGroupName.replace(/^\/|\/$/g, '') + }) + ); + console.log(`exportTaskResponse: ${JSON.stringify(exportTaskResponse)}`); + console.log(`Task created: ${exportTaskResponse.taskId}`); + await new Promise((resolve) => setTimeout(resolve, 5000)); + } catch (error) { + if (error.name === 'LimitExceededException') { + console.log(JSON.stringify(error)); + return; + } + console.error( + `Error exporting ${logGroupName}: ${JSON.stringify(error)}` + ); + continue; + } + + await ssm.send( + new PutParameterCommand({ + Name: ssmParameterName, + Type: 'String', + Value: exportTime.toString(), + Overwrite: true + }) + ); + console.log(`SSM parameter updated: ${ssmParameterName}`); + } + // TODO: reevaluate the delay time after the first set of exports + await delay(30 * 1000); // mitigates LimitExceededException (AWS allows only one export task at a time) +}; diff --git a/backend/src/tasks/cve-sync.ts b/backend/src/tasks/cve-sync.ts new file mode 100644 index 00000000..a33f25e9 --- /dev/null +++ b/backend/src/tasks/cve-sync.ts @@ -0,0 +1,201 @@ +import { Cpe, Cve } from '../models'; +import axios from 'axios'; +import saveCpesToDb from './helpers/saveCpesToDb'; +import saveCvesToDb from './helpers/saveCvesToDb'; +import { plainToClass } from 'class-transformer'; + +interface CpeProduct { + cpe_product_name: string; + version_number: string; + vender: string; +} +interface CveEntry { + cve_uid?: string | null; + cve_name: string | null; + published_date?: string | null; + last_modified_date?: string | null; + vuln_status?: string | null; + description?: string | null; + cvss_v2_source?: string | null; + cvss_v2_type?: string | null; + cvss_v2_version?: string | null; + cvss_v2_vector_string?: string | null; + cvss_v2_base_score?: number | null; + cvss_v2_base_severity?: string | null; + cvss_v2_exploitability_score?: number | null; + cvss_v2_impact_score?: number | null; + cvss_v3_source?: string | null; + cvss_v3_type?: string | null; + cvss_v3_version?: string | null; + cvss_v3_vector_string?: string | null; + cvss_v3_base_score?: number | null; + cvss_v3_base_severity?: string | null; + cvss_v3_exploitability_score?: number | null; + cvss_v3_impact_score?: number | null; + cvss_v4_source?: string | null; + cvss_v4_type?: string | null; + cvss_v4_version?: string | null; + cvss_v4_vector_string?: string | null; + cvss_v4_base_score?: number | null; + cvss_v4_base_severity?: string | null; + cvss_v4_exploitability_score?: number | null; + cvss_v4_impact_score?: number | null; + weaknesses: string[]; + reference_urls: string[]; + vender_product: { [key: string]: CpeProduct[] }; +} +interface CvssEndpointResponse { + task_id: string; + status: string; + result?: { + total_pages: number; + current_page: number; + data: CveEntry[]; + }; + error?: string; +} + +const fetchCveData = async (page: number) => { + console.log('Creating task to fetch CVE data'); + try { + const response = await axios({ + url: 'https://api.staging-cd.crossfeed.cyber.dhs.gov/pe/apiv1/cves_by_modified_date', + method: 'POST', + headers: { + Authorization: String(process.env.CF_API_KEY), + access_token: String(process.env.PE_API_KEY), + 'Content-Type': '' //this is needed or else it breaks because axios defaults to application/json + }, + data: { + page: page, + per_page: 100 // Tested with 150 and 200 but this results in 502 errors on certain pages with a lot of CPEs + } + }); + if (response.status >= 200 && response.status < 300) { + //console.log('Request was successful'); + } else { + console.log('Request failed'); + } + return response.data as CvssEndpointResponse; + } catch (error) { + console.log(`Error making POST request: ${error}`); + } +}; +const fetchCveDataTask = async (task_id: string) => { + console.log('Fetching CVE data'); + try { + const response = await axios({ + url: `https://api.staging-cd.crossfeed.cyber.dhs.gov/pe/apiv1/cves_by_modified_date/task/${task_id}`, + headers: { + Authorization: String(process.env.CF_API_KEY), + access_token: String(process.env.PE_API_KEY), + 'Content-Type': '' + } + }); + if (response.status >= 200 && response.status < 300) { + //console.log('Request was successful'); + } else { + console.log('Request failed'); + } + return response.data as CvssEndpointResponse; + } catch (error) { + console.log(`Error making POST request: ${error}`); + } +}; +//notes: add limit to number of times to retry +async function main() { + let done = false; + let page = 1; + let total_pages = 2; + + while (!done) { + let taskRequest = await fetchCveData(page); + console.log(`Fetching page ${page} of page ${total_pages}`); + await new Promise((r) => setTimeout(r, 1000)); + if (taskRequest?.status == 'Processing') { + while (taskRequest?.status == 'Processing') { + //console.log('Waiting for task to complete'); + await new Promise((r) => setTimeout(r, 1000)); + taskRequest = await fetchCveDataTask(taskRequest.task_id); + //console.log(taskRequest?.status); + } + if (taskRequest?.status == 'Completed') { + console.log(`Task completed successfully for page: ${page}`); + + const cveArray = taskRequest?.result?.data || []; //TODO, change this to CveEntry[] + await saveToDb(cveArray); + total_pages = taskRequest?.result?.total_pages || 1; + const current_page = taskRequest?.result?.current_page || 1; + if (current_page >= total_pages) { + done = true; + console.log(`Finished fetching CVE data`); + } + page = page + 1; + } + } else { + done = true; + console.log( + `Error fetching CVE data: ${taskRequest?.error} and status: ${taskRequest?.status}` + ); + } + } +} +export const handler = async (CommandOptions) => { + await main(); +}; + +export const saveToDb = async (cveArray: CveEntry[]) => { + for (const cve of cveArray) { + const cpeArray: Cpe[] = []; + for (const vender in cve.vender_product) { + for (const product of cve.vender_product[vender] as CpeProduct[]) { + cpeArray.push( + plainToClass(Cpe, { + name: product.cpe_product_name, + version: product.version_number, + vendor: product.vender, + lastSeenAt: new Date(Date.now()) + }) + ); + } + } + const ids: string[] = await saveCpesToDb(cpeArray); + //SAVE CVE TO DATABASE + await saveCvesToDb( + plainToClass(Cve, { + name: cve.cve_name, + publishedAt: new Date(cve.published_date!), + modifiedAt: new Date(cve.last_modified_date!), + status: cve.vuln_status, + description: cve.description, + cvssV2Source: cve.cvss_v2_source, + cvssV2Type: cve.cvss_v2_type, + cvssV2Version: cve.cvss_v2_version, + cvssV2VectorString: cve.cvss_v2_vector_string, + cvssV2BaseScore: cve.cvss_v2_base_score, + cvssV2BaseSeverity: cve.cvss_v2_base_severity, + cvssV2ExploitabilityScore: cve.cvss_v2_exploitability_score, + cvssV2ImpactScore: cve.cvss_v2_impact_score, + cvssV3Source: cve.cvss_v3_source, + cvssV3Type: cve.cvss_v3_type, + cvssV3Version: cve.cvss_v3_version, + cvssV3VectorString: cve.cvss_v3_vector_string, + cvssV3BaseScore: cve.cvss_v3_base_score, + cvssV3BaseSeverity: cve.cvss_v3_base_severity, + cvssV3ExploitabilityScore: cve.cvss_v3_exploitability_score, + cvssV3ImpactScore: cve.cvss_v3_impact_score, + cvssV4Source: cve.cvss_v4_source, + cvssV4Type: cve.cvss_v4_type, + cvssV4Version: cve.cvss_v4_version, + cvssV4VectorString: cve.cvss_v4_vector_string, + cvssV4BaseScore: cve.cvss_v4_base_score, + cvssV4BaseSeverity: cve.cvss_v4_base_severity, + cvssV4ExploitabilityScore: cve.cvss_v4_exploitability_score, + cvssV4ImpactScore: cve.cvss_v4_impact_score, + weaknesses: cve.weaknesses, + references: cve.reference_urls + }), + ids + ); + } +}; diff --git a/backend/src/tasks/cve.ts b/backend/src/tasks/cve.ts new file mode 100644 index 00000000..148fabc7 --- /dev/null +++ b/backend/src/tasks/cve.ts @@ -0,0 +1,422 @@ +import { + Domain, + connectToDatabase, + Vulnerability, + Service, + Webpage +} from '../models'; +import { spawnSync, execSync } from 'child_process'; +import { plainToClass } from 'class-transformer'; +import { CommandOptions } from './ecs-client'; +import * as buffer from 'buffer'; +import saveVulnerabilitiesToDb from './helpers/saveVulnerabilitiesToDb'; +import { LessThan, MoreThan, In, MoreThanOrEqual, Not } from 'typeorm'; +import * as fs from 'fs'; +import * as zlib from 'zlib'; +import axios, { AxiosResponse } from 'axios'; +import { CISACatalogOfKnownExploitedVulnerabilities } from 'src/models/generated/kev'; + +/** + * The CVE scan creates vulnerabilities based on existing + * data (such as product version numbers / CPEs, webpages) + * that have already been collected from other scans. + * + * To manually test the CVE tools from your command line, run: + +nvdsync -cve_feed cve-1.1.json.gz nvd-dump + +cpe2cve -d ' ' -d2 , -o ' ' -o2 , -cpe 2 -e 2 -matches 3 -cve 2 -cvss 4 -cwe 5 -require_version nvd-dump/nvdcve-1.1-2*.json.gz + +Then input: + +0 cpe:/a:microsoft:exchange_server:2019:cumulative_update_3 + +Press ctrl + D to end input. + +*/ + +// Stores alternate CPEs. Sometimes, CPEs are renamed or equivalent to other CPEs, +// so we want to input all variants so we get all applicable vulnerabilities. +const productMap = { + 'cpe:/a:microsoft:asp.net': ['cpe:/a:microsoft:.net_framework'], + 'cpe:/a:microsoft:internet_information_server': [ + 'cpe:/a:microsoft:internet_information_services' + ], + 'cpe:/a:microsoft:iis': ['cpe:/a:microsoft:internet_information_services'] +}; + +// The number of domains to fetch from the database +// at once. +const DOMAIN_BATCH_SIZE = 1000; + +// The number of domains to send to cpe2cve at once. +// This should be a small enough number +const CPE2CVE_BATCH_SIZE = 50; + +// URL for CISA's Known Exploited Vulnerabilities database. +const KEV_URL = + 'https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json'; + +/** + * Construct a CPE to be added. If the CPE doesn't already contain + * the version, then add the version to the CPE. + */ +const constructCPE = (cpe: string, version: string) => { + if ( + cpe?.indexOf(String(version)) > -1 || + cpe.indexOf('exchange_server') > -1 + ) { + // CPE already has the product version. Just return it. + return cpe; + } + if (cpe.endsWith(':')) { + // Remove trailing colons from CPE, if present + cpe = cpe.slice(0, -1); + } + return `${cpe}:${version}`; +}; + +/** + * Scan for new vulnerabilities based on version numbers of identified CPEs + */ +const identifyPassiveCVEsFromCPEs = async (allDomains: Domain[]) => { + const hostsToCheck: Array<{ + domain: Domain; + service: Service; + cpes: string[]; + }> = []; + + for (const domain of allDomains) { + for (const service of domain.services) { + const cpes = new Set(); + for (const product of service.products) { + if ( + product.cpe && + product.version && + String(product.version).split('.').length > 1 + ) { + const cpe = constructCPE(product.cpe, product.version); + cpes.add(cpe); + // Add alternate variants of the CPE as well. + for (const productMapCPE in productMap) { + if (cpe.indexOf(productMapCPE) > -1) { + for (const alternateCPE of productMap[productMapCPE]) { + cpes.add( + constructCPE( + cpe.replace(productMapCPE, alternateCPE), + product.version + ) + ); + } + } + } + } + } + if (cpes.size > 0) + hostsToCheck.push({ + domain: domain, + service: service, + cpes: Array.from(cpes) + }); + } + } + + spawnSync('nvdsync', ['-cve_feed', 'cve-1.1.json.gz', 'nvd-dump'], { + stdio: [process.stdin, process.stdout, process.stderr] + }); + + if (hostsToCheck.length === 0) { + console.warn('No hosts to check - no domains with CPEs found.'); + return; + } + + const numBatches = hostsToCheck.length / CPE2CVE_BATCH_SIZE; + for (let batch = 0; batch < numBatches; batch++) { + let input = ''; + console.log(`\tcpe2cve: starting batch ${batch} / ${numBatches}`); + for ( + let index = CPE2CVE_BATCH_SIZE * batch; + index < Math.min(CPE2CVE_BATCH_SIZE * (batch + 1), hostsToCheck.length); + index++ + ) { + input += `${index} ${hostsToCheck[index].cpes.join(',')}\n`; + console.log(`\t${index} ${hostsToCheck[index].cpes.join(',')}`); + } + let res: Buffer; + try { + res = execSync( + "cpe2cve -d ' ' -d2 , -o ' ' -o2 , -cpe 2 -e 2 -matches 3 -cve 2 -cvss 4 -cwe 5 -require_version nvd-dump/nvdcve-1.1-2*.json.gz", + { input: input, maxBuffer: buffer.constants.MAX_LENGTH } + ); + } catch (e) { + console.error(e); + continue; + } + const split = String(res).split('\n'); + const vulnerabilities: Vulnerability[] = []; + for (const line of split) { + const parts = line.split(' '); + if (parts.length < 5) continue; + const domain = hostsToCheck[parseInt(parts[0])].domain; + + const service = hostsToCheck[parseInt(parts[0])].service; + + const cvss = parseFloat(parts[3]); + vulnerabilities.push( + plainToClass(Vulnerability, { + domain: domain, + lastSeen: new Date(Date.now()), + title: parts[1], + cve: parts[1], + cwe: parts[4], + cpe: parts[2], + cvss, + state: 'open', + source: 'cpe2cve', + needsPopulation: true, + service: service + }) + ); + } + await saveVulnerabilitiesToDb(vulnerabilities, false); + } +}; + +/** + * Identifies unexpected webpages. + */ +const identifyUnexpectedWebpages = async (allDomains: Domain[]) => { + const vulnerabilities: Vulnerability[] = []; + const webpages = await Webpage.find({ + where: { + domain: { id: In(allDomains.map((e) => e.id)) }, + status: MoreThanOrEqual(500) + }, + relations: ['domain'] + }); + for (const webpage of webpages) { + vulnerabilities.push( + plainToClass(Vulnerability, { + domain: webpage.domain, + lastSeen: new Date(Date.now()), + title: `Unexpected status code ${webpage.status} for ${webpage.url}`, + severity: 'Low', + state: 'open', + source: 'webpage_status_code', + description: `${webpage.status} is not a normal status code that comes from performing a GET request on ${webpage.url}. This may indicate a misconfiguration or a potential for a Denial of Service (DoS) attack.` + }) + ); + } + await saveVulnerabilitiesToDb(vulnerabilities, false); +}; + +/** + * Identifies expired and soon-to-expire certificates, as well + * as invalid certificates. + */ +const identifyExpiringCerts = async (allDomains: Domain[]) => { + const oneWeekFromNow = new Date( + new Date(Date.now()).setDate(new Date(Date.now()).getDate() + 7) + ); + const vulnerabilities: Vulnerability[] = []; + for (const domain of allDomains) { + const { validTo, valid } = domain.ssl || {}; + if (valid === false) { + vulnerabilities.push( + plainToClass(Vulnerability, { + domain: domain, + lastSeen: new Date(Date.now()), + title: `Invalid SSL certificate`, + severity: 'Low', + state: 'open', + source: 'certs', + description: `This domain's SSL certificate is invalid. Please make sure its certificate is properly configured, or users may face SSL errors when trying to navigate to the site.` + }) + ); + } else if (validTo && new Date(validTo) <= oneWeekFromNow) { + vulnerabilities.push( + plainToClass(Vulnerability, { + domain: domain, + lastSeen: new Date(Date.now()), + title: `Expiring SSL certificate`, + severity: 'High', + state: 'open', + source: 'certs', + description: `This domain's SSL certificate is expiring / has expired at ${new Date( + validTo + ).toISOString()}. Please make sure its certificate is renewed, or users may face SSL errors when trying to navigate to the site.` + }) + ); + } + } + await saveVulnerabilitiesToDb(vulnerabilities, false); +}; + +interface NvdFile { + CVE_Items: { + cve: { + CVE_data_meta: { + ID: string; + }; + references: { + reference_data: { + url: string; + name: string; + refsource: string; + tags: string[]; + }[]; + }; + description: { + description_data: { + lang: string; + value: string; + }[]; + }; + }; + }[]; +} + +// Populate CVE details from the NVD. +const populateVulnerabilitiesFromNVD = async () => { + const vulnerabilities = await Vulnerability.find({ + needsPopulation: true + }); + const vulnerabilitiesMap: { [key: string]: Vulnerability[] } = {}; + for (const vuln of vulnerabilities) { + if (vuln.cve) { + if (vulnerabilitiesMap[vuln.cve]) { + vulnerabilitiesMap[vuln.cve].push(vuln); + } else vulnerabilitiesMap[vuln.cve] = [vuln]; + } + } + const filenames = await fs.promises.readdir('nvd-dump'); + for (const file of filenames) { + // Only process yearly CVE files, e.g. nvdcve-1.1-2014.json.gz + if (!file.match(/nvdcve-1\.1-\d{4}\.json\.gz/)) continue; + const contents = await fs.promises.readFile('nvd-dump/' + file); + const unzipped = zlib.unzipSync(contents); + const parsed: NvdFile = JSON.parse(unzipped.toString()); + for (const item of parsed.CVE_Items) { + const cve = item.cve.CVE_data_meta.ID; + if (vulnerabilitiesMap[cve]) { + console.log(cve); + const vulns = vulnerabilitiesMap[cve]; + const description = item.cve.description.description_data.find( + (desc) => desc.lang === 'en' + ); + for (const vuln of vulns) { + if (description) vuln.description = description.value; + vuln.references = item.cve.references.reference_data.map((r) => ({ + url: r.url, + name: r.name, + source: r.refsource, + tags: r.tags + })); + vuln.needsPopulation = false; + await vuln.save(); + } + } + } + } + + // moment(date, 'YYYY-MM-DD').toDate() +}; + +// Populate CVE details from the CISA Known Exploited Vulnerabilities (KEV) database. +const populateVulnerabilitiesFromKEV = async () => { + const response: AxiosResponse = + await axios.get(KEV_URL); + const { vulnerabilities: kevVulns } = response.data; + for (const kevVuln of kevVulns) { + const { affected = 0 } = await Vulnerability.update( + { + isKev: Not(true), + cve: kevVuln.cveID + }, + { + isKev: true, + kevResults: kevVuln as any + } + ); + if (affected > 0) { + console.log(`KEV ${kevVuln.cveID}: updated ${affected} vulns`); + } + } +}; + +// Close open vulnerabilities that haven't been seen in a week. +const closeOpenVulnerabilities = async () => { + const oneWeekAgo = new Date( + new Date(Date.now()).setDate(new Date(Date.now()).getDate() - 7) + ); + const openVulnerabilites = await Vulnerability.find({ + where: { + state: 'open', + lastSeen: LessThan(oneWeekAgo) + } + }); + for (const vulnerability of openVulnerabilites) { + vulnerability.setState('remediated', true, null); + await vulnerability.save(); + } +}; + +// Reopen closed vulnerabilities that have been seen in the past week. +const reopenClosedVulnerabilities = async () => { + const oneWeekAgo = new Date( + new Date(Date.now()).setDate(new Date(Date.now()).getDate() - 7) + ); + const remediatedVulnerabilities = await Vulnerability.find({ + where: { + state: 'closed', + lastSeen: MoreThan(oneWeekAgo), + substate: 'remediated' + } + }); + for (const vulnerability of remediatedVulnerabilities) { + vulnerability.setState('unconfirmed', true, null); + await vulnerability.save(); + } +}; + +export const handler = async (commandOptions: CommandOptions) => { + console.log('Running cve detection globally'); + + // CVE is a global scan; organizationId is used only for testing. + const { organizationId } = commandOptions; + + await connectToDatabase(); + + // Fetch all domains in batches. + for (let batchNum = 0; ; batchNum++) { + const domains = await Domain.find({ + select: ['id', 'name', 'ip', 'ssl'], + relations: ['services'], + where: organizationId + ? { organization: { id: organizationId } } + : undefined, + skip: batchNum * DOMAIN_BATCH_SIZE, + take: DOMAIN_BATCH_SIZE + }); + + if (domains.length == 0) { + // No more domains + break; + } + + console.log(`Running batch ${batchNum}`); + + await identifyPassiveCVEsFromCPEs(domains); + + await identifyExpiringCerts(domains); + } + + // await identifyUnexpectedWebpages(domains); + + await closeOpenVulnerabilities(); + await reopenClosedVulnerabilities(); + + await populateVulnerabilitiesFromNVD(); + + await populateVulnerabilitiesFromKEV(); +}; diff --git a/backend/src/tasks/dnstwist.ts b/backend/src/tasks/dnstwist.ts new file mode 100644 index 00000000..bf8bc1f2 --- /dev/null +++ b/backend/src/tasks/dnstwist.ts @@ -0,0 +1,111 @@ +import { connectToDatabase, Domain, Vulnerability } from '../models'; +import getRootDomains from './helpers/getRootDomains'; +import { CommandOptions } from './ecs-client'; +import { plainToClass } from 'class-transformer'; +import saveVulnerabilitiesToDb from './helpers/saveVulnerabilitiesToDb'; +import { spawnSync } from 'child_process'; +import saveDomainsToDb from './helpers/saveDomainsToDb'; +import * as dns from 'dns'; + +async function runDNSTwist(domain: string) { + const child = spawnSync( + 'dnstwist', + ['-r', '--tld', './worker/common_tlds.dict', '-f', 'json', domain], + { + stdio: 'pipe', + encoding: 'utf-8' + } + ); + const savedOutput = child.stdout; + const finalResults = JSON.parse(savedOutput); + console.log( + `Got ${ + Object.keys(finalResults).length + } similar domains for root domain ${domain}` + ); + return finalResults; +} + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName } = commandOptions; + await connectToDatabase(); + const dateNow = new Date(Date.now()); + console.log('Running dnstwist on organization', organizationName); + const root_domains = await getRootDomains(organizationId!); + const vulns: Vulnerability[] = []; + console.log('Root domains:', root_domains); + for (const root_domain of root_domains) { + try { + const results = await runDNSTwist(root_domain); + + // Fetch existing domain object + let domain = await Domain.findOne({ + organization: { id: organizationId }, + name: root_domain + }); + + if (!domain) { + let ipAddress; + const new_domain: Domain[] = []; + try { + ipAddress = (await dns.promises.lookup(root_domain)).address; + } catch (e) { + ipAddress = null; + } + new_domain.push( + plainToClass(Domain, { + name: root_domain, + ip: ipAddress, + organization: { id: organizationId } + }) + ); + await saveDomainsToDb(new_domain); + domain = await Domain.findOne({ + organization: { id: organizationId }, + name: root_domain + }); + } + + // Fetch existing dnstwist vulnerability + const existingVuln = await Vulnerability.findOne({ + domain: { id: domain?.id }, + source: 'dnstwist' + }); + + // Map date-first-observed to any domain-name that already exists + const existingVulnsMap = {}; + if (existingVuln) { + for (const domain of existingVuln.structuredData['domains']) { + existingVulnsMap[domain['domain']] = domain['date_first_observed']; + } + } + // If an existing domain-name is in the new results, set date-first-observed to the mapped value + // Else, set date-first-observed to today's date (dateNow) + for (const domain of results) { + domain['date_first_observed'] = + existingVulnsMap[domain['domain']] || dateNow; + } + if (Object.keys(results).length !== 0) { + vulns.push( + plainToClass(Vulnerability, { + domain: domain, + lastSeen: new Date(Date.now()), + title: 'DNS Twist Domains', + state: 'open', + source: 'dnstwist', + severity: 'Low', + needsPopulation: false, + structuredData: { domains: results }, + description: `Registered domains similar to ${root_domain}.` + }) + ); + await saveVulnerabilitiesToDb(vulns, false); + } else { + continue; + } + } catch (e) { + console.error(e); + continue; + } + } +}; diff --git a/backend/src/tasks/dotgov.ts b/backend/src/tasks/dotgov.ts new file mode 100644 index 00000000..7c49eda0 --- /dev/null +++ b/backend/src/tasks/dotgov.ts @@ -0,0 +1,83 @@ +import { connectToDatabase, Organization, OrganizationTag } from '../models'; +import { CommandOptions } from './ecs-client'; +import axios from 'axios'; +import * as Papa from 'papaparse'; + +interface ParsedRow { + 'Domain Name': string; + 'Domain Type': string; + Agency: string; + Organization: string; + City: string; + State: string; + 'Security Contact Email': string; +} + +// Retrieve all .gov domains +// export const DOTGOV_LIST_ENDPOINT = +// 'https://raw.githubusercontent.com/cisagov/dotgov-data/main/current-full.csv'; + +// To scan only federal .gov domains, use the below endpoint: +export const DOTGOV_LIST_ENDPOINT = + 'https://raw.githubusercontent.com/cisagov/dotgov-data/main/current-federal.csv'; + +export const DOTGOV_TAG_NAME = 'dotgov'; +export const DOTGOV_ORG_SUFFIX = ' (dotgov)'; + +export const handler = async (commandOptions: CommandOptions) => { + const { data } = await axios.get(DOTGOV_LIST_ENDPOINT); + const parsedRows: ParsedRow[] = await new Promise((resolve, reject) => + Papa.parse(data, { + header: true, + dynamicTyping: true, + complete: ({ data, errors }) => + errors.length ? reject(errors) : resolve(data as ParsedRow[]) + }) + ); + + await connectToDatabase(); + + const orgsToRootDomainMap: { + [x: string]: { row: ParsedRow; rootDomains: Set }; + } = {}; + for (const row of parsedRows) { + const orgName = row.Agency + DOTGOV_ORG_SUFFIX; + if (!orgsToRootDomainMap[orgName]) { + orgsToRootDomainMap[orgName] = { row, rootDomains: new Set() }; + } + orgsToRootDomainMap[orgName].rootDomains.add( + row['Domain Name'].toLowerCase() + ); + } + + const tag = + (await OrganizationTag.findOne({ where: { name: DOTGOV_TAG_NAME } })) || + (await OrganizationTag.create({ + name: DOTGOV_TAG_NAME + }).save()); + + for (const [orgName, { row, rootDomains }] of Object.entries( + orgsToRootDomainMap + )) { + // Create a new organization if needed; else, create the same one. + console.log(orgName); + const organization = + (await Organization.findOne({ + name: orgName + })) || + (await Organization.create({ + name: orgName, + tags: [tag], + ipBlocks: [], + isPassive: true, + rootDomains: [] + })); + organization.tags = [tag]; + // Replace existing rootDomains with new rootDomains. + organization.rootDomains = [...rootDomains]; + await organization.save(); + console.log('Finished org', orgName); + } + + console.log(`dotgov done`); +}; diff --git a/backend/src/tasks/ecs-client.ts b/backend/src/tasks/ecs-client.ts new file mode 100644 index 00000000..7b9e806e --- /dev/null +++ b/backend/src/tasks/ecs-client.ts @@ -0,0 +1,260 @@ +import { ECS, CloudWatchLogs } from 'aws-sdk'; +import { SCAN_SCHEMA } from '../api/scans'; + +export interface CommandOptions { + /** A list of organizations (id and name) that this + * ScanTask must run on. */ + organizations?: { + name: string; + id: string; + }[]; + + scanId: string; + scanName: string; + scanTaskId: string; + chunkNumber?: number; + numChunks?: number; + + // Used only for testing to scope down global scans to a single domain. + domainId?: string; + + /** These properties are not specified when creating a ScanTask (as a single ScanTask + * can correspond to multiple organizations), but they are input into the the + * specific task function that runs per organization. + */ + organizationId?: string; + organizationName?: string; +} + +const toSnakeCase = (input) => input.replace(/ /g, '-'); + +/** + * ECS Client. Normally, submits jobs to ECS. + * When the app is running locally, runs a + * Docker container locally instead. + */ +class ECSClient { + ecs?: ECS; + cloudWatchLogs?: CloudWatchLogs; + docker?: any; + isLocal: boolean; + + constructor(isLocal?: boolean) { + this.isLocal = + isLocal ?? + (process.env.IS_OFFLINE || process.env.IS_LOCAL ? true : false); + if (this.isLocal) { + const Docker = require('dockerode'); + this.docker = new Docker(); + } else { + this.ecs = new ECS(); + this.cloudWatchLogs = new CloudWatchLogs(); + } + } + + /** + * Launches an ECS task with the given command. + * @param commandOptions Command options + */ + async runCommand(commandOptions: CommandOptions) { + const { + scanId, + scanName, + organizationId, + organizationName, + numChunks, + chunkNumber + } = commandOptions; + const { cpu, memory, global } = SCAN_SCHEMA[scanName]; + if (this.isLocal) { + try { + const containerName = toSnakeCase( + `crossfeed_worker_${ + global ? 'global' : organizationName + }_${scanName}_` + Math.floor(Math.random() * 10000000) + ); + const container = await this.docker!.createContainer({ + // We need to create unique container names to avoid conflicts. + name: containerName, + Image: 'crossfeed-worker', + HostConfig: { + // In order to use the host name "db" to access the database from the + // crossfeed-worker image, we must launch the Docker container with + // the Crossfeed backend network. + NetworkMode: 'crossfeed_backend', + Memory: 4000000000 // Limit memory to 4 GB. We do this locally to better emulate fargate memory conditions. TODO: In the future, we could read the exact memory from SCAN_SCHEMA to better emulate memory requirements for each scan. + }, + Env: [ + `CROSSFEED_COMMAND_OPTIONS=${JSON.stringify(commandOptions)}`, + `CF_API_KEY=${process.env.CF_API_KEY}`, + `PE_API_KEY=${process.env.PE_API_KEY}`, + `DB_DIALECT=${process.env.DB_DIALECT}`, + `DB_HOST=${process.env.DB_HOST}`, + `IS_LOCAL=true`, + `DB_PORT=${process.env.DB_PORT}`, + `DB_NAME=${process.env.DB_NAME}`, + `DB_USERNAME=${process.env.DB_USERNAME}`, + `DB_PASSWORD=${process.env.DB_PASSWORD}`, + `PE_DB_NAME=${process.env.PE_DB_NAME}`, + `PE_DB_USERNAME=${process.env.PE_DB_USERNAME}`, + `PE_DB_PASSWORD=${process.env.PE_DB_PASSWORD}`, + `CENSYS_API_ID=${process.env.CENSYS_API_ID}`, + `CENSYS_API_SECRET=${process.env.CENSYS_API_SECRET}`, + `WORKER_USER_AGENT=${process.env.WORKER_USER_AGENT}`, + `SHODAN_API_KEY=${process.env.SHODAN_API_KEY}`, + `HIBP_API_KEY=${process.env.HIBP_API_KEY}`, + `SIXGILL_CLIENT_ID=${process.env.SIXGILL_CLIENT_ID}`, + `SIXGILL_CLIENT_SECRET=${process.env.SIXGILL_CLIENT_SECRET}`, + `PE_SHODAN_API_KEYS=${process.env.PE_SHODAN_API_KEYS}`, + `WORKER_SIGNATURE_PUBLIC_KEY=${process.env.WORKER_SIGNATURE_PUBLIC_KEY}`, + `WORKER_SIGNATURE_PRIVATE_KEY=${process.env.WORKER_SIGNATURE_PRIVATE_KEY}`, + `ELASTICSEARCH_ENDPOINT=${process.env.ELASTICSEARCH_ENDPOINT}`, + `AWS_ACCESS_KEY_ID=${process.env.AWS_ACCESS_KEY_ID}`, + `AWS_SECRET_ACCESS_KEY=${process.env.AWS_SECRET_ACCESS_KEY}`, + `LG_API_KEY=${process.env.LG_API_KEY}`, + `LG_WORKSPACE_NAME=${process.env.LG_WORKSPACE_NAME}` + ] + } as any); + await container.start(); + return { + tasks: [ + { + taskArn: containerName + } + ], + failures: [] + }; + } catch (e) { + console.error(e); + return { + tasks: [], + failures: [{}] + }; + } + } + const tags = [ + { + key: 'scanId', + value: scanId + }, + { + key: 'scanName', + value: scanName + } + ]; + if (organizationName && organizationId) { + tags.push({ + key: 'organizationId', + value: organizationId + }); + tags.push({ + key: 'organizationName', + value: organizationName + }); + } + if (numChunks !== undefined && chunkNumber !== undefined) { + tags.push({ + key: 'numChunks', + value: String(numChunks) + }); + tags.push({ + key: 'chunkNumber', + value: String(chunkNumber) + }); + } + return this.ecs!.runTask({ + cluster: process.env.FARGATE_CLUSTER_NAME!, + taskDefinition: process.env.FARGATE_TASK_DEFINITION_NAME!, + networkConfiguration: { + awsvpcConfiguration: { + assignPublicIp: 'ENABLED', + securityGroups: [process.env.FARGATE_SG_ID!], + subnets: [process.env.FARGATE_SUBNET_ID!] + } + }, + platformVersion: '1.4.0', + launchType: 'FARGATE', + // TODO: enable tags when we are able to opt in to the new ARN format for the lambda IAM role. + // See https://aws.amazon.com/blogs/compute/migrating-your-amazon-ecs-deployment-to-the-new-arn-and-resource-id-format-2/ + // tags, + overrides: { + cpu, + memory, + containerOverrides: [ + { + name: 'main', // from task definition + environment: [ + { + name: 'CROSSFEED_COMMAND_OPTIONS', + value: JSON.stringify(commandOptions) + }, + { + // Allow node to use more memory, if needed + name: 'NODE_OPTIONS', + value: memory ? `--max_old_space_size=${memory}` : '' + } + ] + } + ] + } + } as ECS.RunTaskRequest).promise(); + } + + /** + * Gets logs for a specific task. + */ + async getLogs(fargateTaskArn: string) { + if (this.isLocal) { + const logStream = await this.docker?.getContainer(fargateTaskArn).logs({ + stdout: true, + stderr: true, + timestamps: true + }); + // Remove 8 special characters at beginning of Docker logs -- see + // https://github.com/moby/moby/issues/7375. + return logStream + ?.toString() + .split('\n') + .map((e) => e.substring(8)) + .join('\n'); + } else { + const response = await this.cloudWatchLogs!.getLogEvents({ + logGroupName: process.env.FARGATE_LOG_GROUP_NAME!, + // Pick the ID from "arn:aws:ecs:us-east-1:957221700844:task/crossfeed-staging-worker/f59d71c6-3d23-4ee9-ad68-c7b810bf458b" + logStreamName: `worker/main/${fargateTaskArn.split('/')[2]}`, + startFromHead: true + }).promise(); + const res = response.$response.data; + if (!res || !res.events?.length) { + return ''; + } + return res.events + .map((e) => `${new Date(e.timestamp!).toISOString()} ${e.message}`) + .join('\n'); + } + } + + /** + * Retrieves the number of running tasks associated + * with the Fargate worker. + */ + async getNumTasks() { + if (this.isLocal) { + const containers = await this.docker?.listContainers({ + filters: { + ancestor: ['crossfeed-worker'] + } + }); + return containers?.length || 0; + } + const tasks = await this.ecs + ?.listTasks({ + cluster: process.env.FARGATE_CLUSTER_NAME, + launchType: 'FARGATE' + }) + .promise(); + return tasks?.taskArns?.length || 0; + } +} + +export default ECSClient; diff --git a/backend/src/tasks/es-client.ts b/backend/src/tasks/es-client.ts new file mode 100644 index 00000000..f470dd0f --- /dev/null +++ b/backend/src/tasks/es-client.ts @@ -0,0 +1,216 @@ +import { Client } from '@elastic/elasticsearch'; +import { Domain, Webpage } from '../models'; + +export const DOMAINS_INDEX = 'domains-5'; + +interface DomainRecord extends Domain { + suggest: { input: string | string[]; weight: number }[]; + parent_join: 'domain'; +} + +export interface WebpageRecord { + webpage_id: string; + webpage_createdAt: Date | null; + webpage_updatedAt: Date | null; + webpage_syncedAt: Date | null; + webpage_lastSeen: Date | null; + webpage_url: string; + webpage_status: string | number; + webpage_domainId: string; + webpage_discoveredById: string; + webpage_responseSize: number | null; + webpage_headers: { name: string; value: string }[]; + + // Added before elasticsearch insertion (not present in the database): + suggest?: { input: string | string[]; weight: number }[]; + parent_join?: { + name: 'webpage'; + parent: string; + }; + webpage_body?: string; +} + +/** + * Elasticsearch client. + */ +class ESClient { + client: Client; + + constructor(isLocal?: boolean) { + this.client = new Client({ node: process.env.ELASTICSEARCH_ENDPOINT! }); + } + + /** + * Creates the domains index, if it doesn't already exist. + */ + async syncDomainsIndex() { + const mapping = { + services: { + type: 'nested' + }, + vulnerabilities: { + type: 'nested' + }, + webpage_body: { + type: 'text', + term_vector: 'yes' + }, + parent_join: { + type: 'join', + relations: { + domain: ['webpage'] + } + } + }; + try { + await this.client.indices.get({ + index: DOMAINS_INDEX + }); + await this.client.indices.putMapping({ + index: DOMAINS_INDEX, + body: { properties: mapping } + }); + console.log(`Index ${DOMAINS_INDEX} updated.`); + } catch (e) { + if (e.meta?.body?.error.type !== 'index_not_found_exception') { + console.error(e.meta?.body); + throw e; + } + await this.client.indices.create({ + index: DOMAINS_INDEX, + body: { + mappings: { + properties: { + ...mapping, + suggest: { + type: 'completion' + } + }, + dynamic: true + }, + settings: { + number_of_shards: 2 + } + } + }); + console.log(`Created index ${DOMAINS_INDEX}.`); + } + await this.client.indices.putSettings({ + index: DOMAINS_INDEX, + body: { + settings: { refresh_interval: '1800s' } + } + }); + console.log(`Updated settings for index ${DOMAINS_INDEX}.`); + } + + excludeFields = (domain: Domain) => { + const copy: any = domain; + delete copy.ssl; + delete copy.censysCertificatesResults; + for (const service in copy.services) { + delete copy.services[service].censysIpv4Results; + delete copy.services[service].wappalyzerResults; + delete copy.services[service].intrigueIdentResults; + } + return copy; + }; + + /** + * Updates the given domains, upserting as necessary. + * @param domains Domains to insert. + */ + async updateDomains(domains: Domain[]) { + const domainRecords = domains.map((e) => ({ + ...this.excludeFields(e), + suggest: [{ input: e.name, weight: 1 }], + parent_join: 'domain' + })) as DomainRecord[]; + const b = this.client.helpers.bulk({ + datasource: domainRecords, + onDocument(domain) { + return [ + { + update: { + _index: DOMAINS_INDEX, + _id: domain.id + } + }, + { doc_as_upsert: true } + ]; + }, + onDrop(doc) { + console.error(doc.error, doc.document); + b.abort(); + } + }); + const result = await b; + if (result.aborted) { + console.error(result); + throw new Error('Bulk operation aborted'); + } + return result; + } + + /** + * Updates the given webpages, upserting as necessary. + * @param webpages Webpages to insert. + */ + async updateWebpages(webpages: WebpageRecord[]) { + const webpageRecords = webpages.map((e) => ({ + ...e, + suggest: [{ input: e.webpage_url, weight: 1 }], + parent_join: { + name: 'webpage', + parent: e.webpage_domainId + } + })) as WebpageRecord[]; + const b = this.client.helpers.bulk({ + datasource: webpageRecords, + onDocument(webpage) { + return [ + { + update: { + _index: DOMAINS_INDEX, + _id: 'webpage_' + webpage.webpage_id, + routing: webpage.webpage_domainId + } + }, + { doc_as_upsert: true } + ]; + }, + onDrop(doc) { + console.error(doc.error, doc.document); + b.abort(); + } + }); + const result = await b; + if (result.aborted) { + console.error(result); + throw new Error('Bulk operation aborted'); + } + return result; + } + + /** + * Searches for domains. + * @param body Elasticsearch query body. + */ + async searchDomains(body: any) { + return this.client.search({ + index: DOMAINS_INDEX, + body + }); + } + + /** + * Deletes everything in Elasticsearch + */ + async deleteAll() { + await this.client.indices.delete({ + index: '*' + }); + } +} + +export default ESClient; diff --git a/backend/src/tasks/findomain.ts b/backend/src/tasks/findomain.ts new file mode 100644 index 00000000..440d8a56 --- /dev/null +++ b/backend/src/tasks/findomain.ts @@ -0,0 +1,55 @@ +import { Domain } from '../models'; +import { spawnSync } from 'child_process'; +import { readFileSync } from 'fs'; +import { plainToClass } from 'class-transformer'; +import { CommandOptions } from './ecs-client'; +import getRootDomains from './helpers/getRootDomains'; +import saveDomainsToDb from './helpers/saveDomainsToDb'; +import * as path from 'path'; + +const OUT_PATH = path.join(__dirname, 'out-' + Math.random() + '.txt'); + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName, scanId } = commandOptions; + + console.log('Running findomain on organization', organizationName); + + const rootDomains = await getRootDomains(organizationId!); + + for (const rootDomain of rootDomains) { + try { + const args = [ + '--exclude-sources', + 'spyse', + '-it', + rootDomain, + '-u', + OUT_PATH + ]; + console.log('Running findomain with args', args); + spawnSync('findomain', args, { stdio: 'pipe' }); + const output = String(readFileSync(OUT_PATH)); + const lines = output.split('\n'); + const domains: Domain[] = []; + for (const line of lines) { + if (line == '') continue; + const split = line.split(','); + domains.push( + plainToClass(Domain, { + name: split[0], + ip: split[1], + organization: { id: organizationId }, + fromRootDomain: rootDomain, + subdomainSource: 'findomain', + discoveredBy: { id: scanId } + }) + ); + } + await saveDomainsToDb(domains); + console.log(`Findomain created/updated ${domains.length} new domains`); + } catch (e) { + console.error(e); + continue; + } + } +}; diff --git a/backend/src/tasks/functions.yml b/backend/src/tasks/functions.yml new file mode 100644 index 00000000..a2344f5b --- /dev/null +++ b/backend/src/tasks/functions.yml @@ -0,0 +1,62 @@ +cloudwatchToS3: + handler: src/tasks/cloudwatchToS3.handler + timeout: 900 + events: + - schedule: rate(4 hours) + reservedConcurrency: 1 + memorySize: 4096 + +scheduler: + handler: src/tasks/scheduler.handler + timeout: 900 + events: + - schedule: rate(5 minutes) + reservedConcurrency: 1 + memorySize: 4096 + +syncdb: + timeout: 900 + handler: src/tasks/syncdb.handler + +pesyncdb: + timeout: 900 + handler: src/tasks/pesyncdb.handler + +bastion: + timeout: 900 + handler: src/tasks/bastion.handler + +makeGlobalAdmin: + handler: src/tasks/makeGlobalAdmin.handler + +checkUserExpiration: + timeout: 300 + handler: src/tasks/checkUserExpiration.handler + events: + - schedule: cron(0 0 * * ? *) # Runs every day at midnight +scanExecution: + handler: src/tasks/scanExecution.handler + timeout: 300 # 5 minutes + environment: + SQS_QUEUE_NAME: ${self:provider.stage}-worker-control-queue + events: + - sqs: + arn: + Fn::GetAtt: + - WorkerControlQueue + - Arn + memorySize: 4096 + +updateScanTaskStatus: + handler: src/tasks/updateScanTaskStatus.handler + events: + - eventBridge: + name: ${self:provider.stage}-updateScanTaskStatus + pattern: + source: + - aws.ecs + detail-type: + - ECS Task State Change + detail: + clusterArn: + - ${file(env.yml):${self:provider.stage}-ecs-cluster, ''} diff --git a/backend/src/tasks/helpers.ts b/backend/src/tasks/helpers.ts new file mode 100644 index 00000000..59fccf3b --- /dev/null +++ b/backend/src/tasks/helpers.ts @@ -0,0 +1,25 @@ +import { Organization } from '../models'; + +/** Helper function to return all root domains for all organizations */ +export const getRootDomains = async ( + includePassive: boolean +): Promise< + { + name: string; + organization: Organization; + }[] +> => { + const organizations = await Organization.find(); + const allDomains: { + name: string; + organization: Organization; + }[] = []; + + for (const org of organizations) { + if (includePassive || !org.isPassive) { + for (const domain of org.rootDomains) + allDomains.push({ name: domain, organization: org }); + } + } + return allDomains; +}; diff --git a/backend/src/tasks/helpers/__mocks__/censysCertificatesSample.json b/backend/src/tasks/helpers/__mocks__/censysCertificatesSample.json new file mode 100644 index 00000000..769c64e4 --- /dev/null +++ b/backend/src/tasks/helpers/__mocks__/censysCertificatesSample.json @@ -0,0 +1,100 @@ +{"added_at":"2018-03-19 16:31:43 UTC","fingerprint_sha256":"8b1ce6dd056e3d86371c985cada9db6044088ea656c11b37f4cc968e8ed165b3","metadata":{"added_at":"2018-03-19 16:31:43 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2020-05-05 13:09:41 UTC","seen_in_scan":true,"source":"scan","updated_at":"2020-05-05 13:09:41 UTC"},"parents":[],"parsed":{"extensions":{"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[]},"fingerprint_md5":"ab35a203f8f525d13b5fc233b5986025","fingerprint_sha1":"ca4a9bce16fe015c56d6924d7081627017df8890","fingerprint_sha256":"8b1ce6dd056e3d86371c985cada9db6044088ea656c11b37f4cc968e8ed165b3","issuer":{"common_name":["raymark-ca-sha512.uptimeisf.com"],"country":["US"],"domain_component":[],"email_address":["hostmaster@uptimetech.com"],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Seattle"],"organization":["RAYMARK PLUMBING HEATING"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["Washington"],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=US, ST=Washington, L=Seattle, O=RAYMARK PLUMBING HEATING, CN=raymark-ca-sha512.uptimeisf.com, emailAddress=hostmaster@uptimetech.com","names":["mail.raymarkplumbing.com", "first_file_testdomain10", "first_file_testdomain11"],"redacted":false,"serial_number":"14597525864497956896","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA512-RSA","oid":"1.2.840.113549.1.1.13"},"valid":false,"value":"DqRg9GjtHiyROUG43ri5B0SFwz9VRWBjmFbNWbeu+HV1la8vrXm92Kn+WirDSyUETA3suEeTWV8A6MKPi8VpgCDYjcZ/GT8UiM4NNsKiBFOScVwo9unuritH5XRtnx2PJyxYKHTPgcliYn2GZf4Ku/QT1iOXaqwX4MQLLhNTYmXTMCB/NhjxgxmLWBomYj+HOSCGQGAkByF60HUkNfmy4I0CALktJ/TopdV+hfpEV2iF62FxIiCEhdr/Kvwifq1FBQU00uwBgpOMiA80DRfKZxBqshDmYKntPCLKM0+3luuUrH721fXXqRB9o2bPZw0qewoOJ7bSqslwUSFp8kUb4Q=="},"signature_algorithm":{"name":"SHA512-RSA","oid":"1.2.840.113549.1.1.13"},"spki_subject_fingerprint":"5c69c1b635950b9d9b258234534b20008751212cb300c6a733eb98b4c936cf9b","subject":{"common_name":["mail.raymarkplumbing.com"],"country":["US"],"domain_component":[],"email_address":["hostmaster@uptimetech.com"],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Seattle"],"organization":["Raymark Plumbing"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["Washington"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=US, ST=Washington, L=Seattle, O=Raymark Plumbing, CN=mail.raymarkplumbing.com, emailAddress=hostmaster@uptimetech.com","subject_key_info":{"fingerprint_sha256":"e4020e72897b2b9b6f9848a92d1edfc5be726e4921e6b2811ef2a5e3a871e0a1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"zEOP/ZV+1wBtgq4qIe/fqk+jdfGPPLqAjbHJjUAb8CWrbSDrTS4jHrAcyIHfsIlwy/Wj0kaViz2bCtEwKdIxtqh7WTVpyUm3eAoFk4cPQvsocutX+mc9RAJQMCgBYNDiZIW6RyVu/DLELNv3daI2WS4ZwdiyLV8op+bs90RtiEJLCLsv6yFfectSx5zI7EJud5pQwPYJHOwHVI8KL/SKB999ZWr9s3+eybWchkU2gCyZDpHjGTYiQzZef5wHcG/+fu4GGNdmdAjX4285BYvpeyBC4qimF5/UMsovXE4JtqI9YwmS740HI8AIbNoJo51E0I8gvhMaG3NA/XOb+LkE4Q=="}},"tbs_fingerprint":"2a2efaf20a610b7261412e4206518129307ee74375fe0cf187f7166a417b5a6d","tbs_noct_fingerprint":"c17ea31e70cd48ba7cfae54039b889327a5cbd0b4f296ffaa50ec968ac0a71c7","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2020-05-04 18:16:15 UTC","length":"157680000","start":"2015-05-06 18:16:15 UTC"},"version":"1"},"precert":false,"raw":"MIIDxTCCAq0CCQDKlNRuyPpIIDANBgkqhkiG9w0BAQ0FADCBqzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1NlYXR0bGUxITAfBgNVBAoTGFJBWU1BUksgUExVTUJJTkcgSEVBVElORzEoMCYGA1UEAxMfcmF5bWFyay1jYS1zaGE1MTIudXB0aW1laXNmLmNvbTEoMCYGCSqGSIb3DQEJARYZaG9zdG1hc3RlckB1cHRpbWV0ZWNoLmNvbTAeFw0xNTA1MDYxODE2MTVaFw0yMDA1MDQxODE2MTVaMIGcMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHU2VhdHRsZTEZMBcGA1UEChMQUmF5bWFyayBQbHVtYmluZzEhMB8GA1UEAxMYbWFpbC5yYXltYXJrcGx1bWJpbmcuY29tMSgwJgYJKoZIhvcNAQkBFhlob3N0bWFzdGVyQHVwdGltZXRlY2guY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzEOP/ZV+1wBtgq4qIe/fqk+jdfGPPLqAjbHJjUAb8CWrbSDrTS4jHrAcyIHfsIlwy/Wj0kaViz2bCtEwKdIxtqh7WTVpyUm3eAoFk4cPQvsocutX+mc9RAJQMCgBYNDiZIW6RyVu/DLELNv3daI2WS4ZwdiyLV8op+bs90RtiEJLCLsv6yFfectSx5zI7EJud5pQwPYJHOwHVI8KL/SKB999ZWr9s3+eybWchkU2gCyZDpHjGTYiQzZef5wHcG/+fu4GGNdmdAjX4285BYvpeyBC4qimF5/UMsovXE4JtqI9YwmS740HI8AIbNoJo51E0I8gvhMaG3NA/XOb+LkE4QIDAQABMA0GCSqGSIb3DQEBDQUAA4IBAQAOpGD0aO0eLJE5QbjeuLkHRIXDP1VFYGOYVs1Zt674dXWVry+teb3Yqf5aKsNLJQRMDey4R5NZXwDowo+LxWmAINiNxn8ZPxSIzg02wqIEU5JxXCj26e6uK0fldG2fHY8nLFgodM+ByWJifYZl/gq79BPWI5dqrBfgxAsuE1NiZdMwIH82GPGDGYtYGiZiP4c5IIZAYCQHIXrQdSQ1+bLgjQIAuS0n9Oil1X6F+kRXaIXrYXEiIISF2v8q/CJ+rUUFBTTS7AGCk4yIDzQNF8pnEGqyEOZgqe08IsozT7eW65SsfvbV9depEH2jZs9nDSp7Cg4nttKqyXBRIWnyRRvh","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"na","e_ext_authority_key_identifier_missing":"error","e_ext_authority_key_identifier_no_key_identifier":"error","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"na","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"error","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"error","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"na","e_path_len_constraint_zero_or_less":"na","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"ne","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"ne","e_sub_cert_locality_name_must_not_appear":"ne","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"ne","e_sub_cert_postal_code_must_not_appear":"ne","e_sub_cert_province_must_appear":"ne","e_sub_cert_province_must_not_appear":"ne","e_sub_cert_street_address_should_not_exist":"ne","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"error","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"warn","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:27:16 UTC","fingerprint_sha256":"93aea8eff3d4c11953d18153b275889782effaedc0351fa04ba7aabe6e02beaf","metadata":{"added_at":"2018-03-19 14:27:16 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-11-24 02:09:45 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-11-24 02:12:42 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"60da29b4f43871aa85c16f24e7dc40c361c02a4f","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["shiftingdreams.vinayakwebtech.com","mail.shiftingdreams.com","shiftingdreams.com","www.shiftingdreams.com","www.shiftingdreams.vinayakwebtech.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"60da29b4f43871aa85c16f24e7dc40c361c02a4f"},"fingerprint_md5":"c8d6f932a89fe126d614f3696e14deb9","fingerprint_sha1":"1f8f2ad9947e01cc6a27b60a4095930a16757912","fingerprint_sha256":"93aea8eff3d4c11953d18153b275889782effaedc0351fa04ba7aabe6e02beaf","issuer":{"common_name":["shiftingdreams.vinayakwebtech.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=shiftingdreams.vinayakwebtech.com","names":["www.shiftingdreams.com","www.shiftingdreams.vinayakwebtech.com","shiftingdreams.vinayakwebtech.com","mail.shiftingdreams.com","shiftingdreams.com"],"redacted":false,"serial_number":"7477722319","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"oQxvQd2tR9F0wwDfC8fagThehSPp/bolBSnly/4t74X17O/an1DY6VUv4H97Tl4ebBZBpl2DDubVdO9Xf8IP42gll6BEd7FeiiU1USeA0C6S5gRiCUBUGSf8SdSVz2rB8mmrIeERn9A7WIaSJZfHjSXVpmWXK77YCMQ1cSf5tX/zg59hwamp2/O47uTXrtI/YiZxEYJam1V7ijEWIpKf4rJ+nOyAysoKehetEbBXyVPQxJWylzioqIYAqYWETQmHNXIU3ew0l/P0ZgeMJ4BPq7gj//pQ3FL2mUSJCZD3VP2xH8p0gAMZrRVypRX2g51cYeTk4Uwskyg2FYELtuA7xQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"75dc0b89b5b21f1e4a84afa2ff37037027bbecaafd408d52eb5099fd97f0a5b2","subject":{"common_name":["shiftingdreams.vinayakwebtech.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=shiftingdreams.vinayakwebtech.com","subject_key_info":{"fingerprint_sha256":"3af3a3d8c1555a67d4f283db7b0c29f6d513cb10a8e3b99ca376b51ef54f6f71","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"paGcUIB4Qm+44UnqCcvK9C1bcY4ReL/p6Gpcro3j5qTvIcUsbWqYecuK99pDiG3Z48TjhbEe0Ae+PPTdDg6I+W1A7VWKugivd70k6pBqHaJjGG+EZADarSRKnt5MfTD8lcWW2T8iT+IYeiah5iJJid5B//arh6fe5nVWP9lLGvvi9lf2dluPnvbNveBcvigTx8k2S3pUpgqzNMAc1Ny2CPFFt526l6Nm6b/qu4v/8tUEHdn84CEm/8RlaapANR91Di0LQ7/7eRTqrsffsV0bwrWtzA6BSZo8AuCReqHxxAPhNJH6eAVtnVHNZ7KQf4e1iKChRzMPpRHntTe2hLvlIw=="}},"tbs_fingerprint":"1ab52572d95a9783c49b0841a352c7c012a212bdab9fc994b83bcfc68e9fcc98","tbs_noct_fingerprint":"1ab52572d95a9783c49b0841a352c7c012a212bdab9fc994b83bcfc68e9fcc98","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-11-23 05:19:26 UTC","length":"31536000","start":"2017-11-23 05:19:26 UTC"},"version":"3"},"precert":false,"raw":"MIIDwzCCAqugAwIBAgIFAb20/M8wDQYJKoZIhvcNAQELBQAwLDEqMCgGA1UEAwwhc2hpZnRpbmdkcmVhbXMudmluYXlha3dlYnRlY2guY29tMB4XDTE3MTEyMzA1MTkyNloXDTE4MTEyMzA1MTkyNlowLDEqMCgGA1UEAwwhc2hpZnRpbmdkcmVhbXMudmluYXlha3dlYnRlY2guY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApaGcUIB4Qm+44UnqCcvK9C1bcY4ReL/p6Gpcro3j5qTvIcUsbWqYecuK99pDiG3Z48TjhbEe0Ae+PPTdDg6I+W1A7VWKugivd70k6pBqHaJjGG+EZADarSRKnt5MfTD8lcWW2T8iT+IYeiah5iJJid5B//arh6fe5nVWP9lLGvvi9lf2dluPnvbNveBcvigTx8k2S3pUpgqzNMAc1Ny2CPFFt526l6Nm6b/qu4v/8tUEHdn84CEm/8RlaapANR91Di0LQ7/7eRTqrsffsV0bwrWtzA6BSZo8AuCReqHxxAPhNJH6eAVtnVHNZ7KQf4e1iKChRzMPpRHntTe2hLvlIwIDAQABo4HrMIHoMB0GA1UdDgQWBBRg2im09DhxqoXBbyTn3EDDYcAqTzAfBgNVHSMEGDAWgBRg2im09DhxqoXBbyTn3EDDYcAqTzAJBgNVHRMEAjAAMIGaBgNVHREEgZIwgY+CIXNoaWZ0aW5nZHJlYW1zLnZpbmF5YWt3ZWJ0ZWNoLmNvbYIXbWFpbC5zaGlmdGluZ2RyZWFtcy5jb22CEnNoaWZ0aW5nZHJlYW1zLmNvbYIWd3d3LnNoaWZ0aW5nZHJlYW1zLmNvbYIld3d3LnNoaWZ0aW5nZHJlYW1zLnZpbmF5YWt3ZWJ0ZWNoLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAoQxvQd2tR9F0wwDfC8fagThehSPp/bolBSnly/4t74X17O/an1DY6VUv4H97Tl4ebBZBpl2DDubVdO9Xf8IP42gll6BEd7FeiiU1USeA0C6S5gRiCUBUGSf8SdSVz2rB8mmrIeERn9A7WIaSJZfHjSXVpmWXK77YCMQ1cSf5tX/zg59hwamp2/O47uTXrtI/YiZxEYJam1V7ijEWIpKf4rJ+nOyAysoKehetEbBXyVPQxJWylzioqIYAqYWETQmHNXIU3ew0l/P0ZgeMJ4BPq7gj//pQ3FL2mUSJCZD3VP2xH8p0gAMZrRVypRX2g51cYeTk4Uwskyg2FYELtuA7xQ==","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:27:41 UTC","fingerprint_sha256":"d0e8f51650889c6f31547c488762ffe45413f4945c8bba293985c54853891186","metadata":{"added_at":"2018-03-19 14:27:41 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-03-18 00:11:55 UTC","seen_in_scan":true,"source":"scan","updated_at":"2019-03-18 00:12:17 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"296759fa04d6c1d543e5929da1d364f51307cad4","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["akmemontech.imtiyazmemon.website","akmemontech.com","mail.akmemontech.com","www.akmemontech.com","www.akmemontech.imtiyazmemon.website"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"296759fa04d6c1d543e5929da1d364f51307cad4"},"fingerprint_md5":"99c7eaaa33dba724c01534fbca59e176","fingerprint_sha1":"bfa33d549f45b4b2892203c2b9832db905256381","fingerprint_sha256":"d0e8f51650889c6f31547c488762ffe45413f4945c8bba293985c54853891186","issuer":{"common_name":["akmemontech.imtiyazmemon.website"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=akmemontech.imtiyazmemon.website","names":["www.akmemontech.imtiyazmemon.website","akmemontech.imtiyazmemon.website","akmemontech.com","mail.akmemontech.com","www.akmemontech.com","*.first_file_testdomain2.gov"],"redacted":false,"serial_number":"4966328060","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"QAREFCXiXmSFfHNFfAdrhQ7GmmszsHJrzyVzea4cbdVftExlPsNzirt+BzUsLyss3dkFv58YHcWRmRjxLYHw3zgxo9sNgkk56NKwMrrThSYlMWldbwU6v5Szkh1ZLwv0BW1KLCfmVF3CiE+uBcaSUpXmPh0XDAfAgEnNyzmQrOMgdkN21qjPDTz8WTvhPiiZyayanwxCtwcC3RnV/lcqKQJd0zU/6aKqNaFxPYiJ/ZG5j2Mz2ZZswRZkEdwqcHfgIrM5FHpxeeKNsP1XoM4XkktD09Tvp+yN8AXJY/mS1vYVMLf5xtOS+DmautWaTWlCZlOGeO7zDiJKX/thvxaaHQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"3c9deaeec1809b90215fe41068e88d09c6c7f3c444e2cc7074a762872d1bbdee","subject":{"common_name":["akmemontech.imtiyazmemon.website"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=akmemontech.imtiyazmemon.website","subject_key_info":{"fingerprint_sha256":"e292f1b8426fb13c12df280f96f35aa4f515eb951e80a8d267091262acb98aa2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vL3d88/7/vbjdUMGhs2eGwlvfcjFbNISekYc573qwTZh4ZRzHWCGK3I9jaJOrksMzwmvfZxBY6FsUk9yFMs15Fs7uR2e+8PCsfzRB/olQcWooOq41iqqLH09n0da6uqugq6ts7ZcFaiJtqJ6JK1ug6ef5LWU2uTepDJ2ssByl9IjU7SnLM4ef5IXjh2slWYf6NsE8FN+wz9PxS8E4YEWjt2si0H565WD9ILhS2xDYapVLyIXw0DK0UbHMU0nSDGFJasHHq8Ul+LVl7Bh6gwxw6niPpol7lkUXFjPTwvtYEoG0nLa2YSW9hleJ3qaszpoYd9eZapm7NvH5SkiX6WfGw=="}},"tbs_fingerprint":"4e8608215c79fabad19c8c88140ccb51787c0f6e1ae73ad1db1be47751e0de6a","tbs_noct_fingerprint":"4e8608215c79fabad19c8c88140ccb51787c0f6e1ae73ad1db1be47751e0de6a","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2019-03-17 12:26:13 UTC","length":"31536000","start":"2018-03-17 12:26:13 UTC"},"version":"3"},"precert":false,"raw":"MIIDtjCCAp6gAwIBAgIFASgEJvwwDQYJKoZIhvcNAQELBQAwKzEpMCcGA1UEAwwgYWttZW1vbnRlY2guaW10aXlhem1lbW9uLndlYnNpdGUwHhcNMTgwMzE3MTIyNjEzWhcNMTkwMzE3MTIyNjEzWjArMSkwJwYDVQQDDCBha21lbW9udGVjaC5pbXRpeWF6bWVtb24ud2Vic2l0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALy93fPP+/7243VDBobNnhsJb33IxWzSEnpGHOe96sE2YeGUcx1ghityPY2iTq5LDM8Jr32cQWOhbFJPchTLNeRbO7kdnvvDwrH80Qf6JUHFqKDquNYqqix9PZ9HWurqroKurbO2XBWoibaieiStboOnn+S1lNrk3qQydrLAcpfSI1O0pyzOHn+SF44drJVmH+jbBPBTfsM/T8UvBOGBFo7drItB+euVg/SC4UtsQ2GqVS8iF8NAytFGxzFNJ0gxhSWrBx6vFJfi1ZewYeoMMcOp4j6aJe5ZFFxYz08L7WBKBtJy2tmElvYZXid6mrM6aGHfXmWqZuzbx+UpIl+lnxsCAwEAAaOB4DCB3TAdBgNVHQ4EFgQUKWdZ+gTWwdVD5ZKdodNk9RMHytQwHwYDVR0jBBgwFoAUKWdZ+gTWwdVD5ZKdodNk9RMHytQwCQYDVR0TBAIwADCBjwYDVR0RBIGHMIGEgiBha21lbW9udGVjaC5pbXRpeWF6bWVtb24ud2Vic2l0ZYIPYWttZW1vbnRlY2guY29tghRtYWlsLmFrbWVtb250ZWNoLmNvbYITd3d3LmFrbWVtb250ZWNoLmNvbYIkd3d3LmFrbWVtb250ZWNoLmltdGl5YXptZW1vbi53ZWJzaXRlMA0GCSqGSIb3DQEBCwUAA4IBAQBABEQUJeJeZIV8c0V8B2uFDsaaazOwcmvPJXN5rhxt1V+0TGU+w3OKu34HNSwvKyzd2QW/nxgdxZGZGPEtgfDfODGj2w2CSTno0rAyutOFJiUxaV1vBTq/lLOSHVkvC/QFbUosJ+ZUXcKIT64FxpJSleY+HRcMB8CASc3LOZCs4yB2Q3bWqM8NPPxZO+E+KJnJrJqfDEK3BwLdGdX+VyopAl3TNT/poqo1oXE9iIn9kbmPYzPZlmzBFmQR3Cpwd+AiszkUenF54o2w/VegzheSS0PT1O+n7I3wBclj+ZLW9hUwt/nG05L4OZq61ZpNaUJmU4Z47vMOIkpf+2G/Fpod","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:17:20 UTC","fingerprint_sha256":"c3be2267edc8ae3d01bc08a2aea4a1bad927150e508934eb846f2685e1afcd8e","metadata":{"added_at":"2018-03-19 14:17:20 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-02-25 01:44:53 UTC","seen_in_scan":true,"source":"scan","updated_at":"2019-02-25 01:44:56 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"9630fc8f833c791bfa5465fd8e552410c44d7219","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["httptplinkmodemnet.com","mail.httptplinkmodemnet.com","www.httptplinkmodemnet.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"9630fc8f833c791bfa5465fd8e552410c44d7219"},"fingerprint_md5":"449a234544a93da44cc65fe2a429384d","fingerprint_sha1":"cdbfe0cbd082ef79023b8e3260e5fb89cc8dcd3d","fingerprint_sha256":"c3be2267edc8ae3d01bc08a2aea4a1bad927150e508934eb846f2685e1afcd8e","issuer":{"common_name":["httptplinkmodemnet.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=httptplinkmodemnet.com","names":["httptplinkmodemnet.com","mail.httptplinkmodemnet.com","www.httptplinkmodemnet.com"],"redacted":false,"serial_number":"321136876","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"jF5R330Ww2E5OWCbZsy/3F5rjZcgw4yRuors/SEo1PesDKw1UX4sB45q2MBwg9Cwf3ofTZb3Yy6XEJRtevkx4v5K+MplLfNWQRkHGu7KRRE7UXdNulag/iJygCxNgaOgeD26TMBEumHKmriXY8PNH77XeZ8Kp5SXT9otN4+KSSoiVu7VXa917JQuYYzHG/nN6VPpdZHBp15D+9LQh3yR1g1wrLJEEJPTpJdES4j2RKk9OWa9sGOeGluPn3m/0LUtvW8glSIgF0Su9A8QR5EkHRhwR9pTrGk09218nJqfDLQQ0WTCBO7fJDb+n8iv0HqKJMNKLVrOc7Oejd1vWR1OSw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"5b22290ddeae8f3c11366bd39f3a2c4505107ddacb5654e681a6e0d3ce869d38","subject":{"common_name":["httptplinkmodemnet.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=httptplinkmodemnet.com","subject_key_info":{"fingerprint_sha256":"08da0f639c33e980c8689d1066ed12e132c89940a51dff6108fcf56f84a73ad6","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"xSGAVYfQxb7c0ze318vfISu4bxzsj6YgGRYrPxSBq5UBQQJIrqPM9FlcL2/p2S9n6I6wm2xVUSCR5tpJkPtkOcGxlJWQS45vHwUXUtxIbmygymgtGK/7pk9PaJgsLMdELDlV2tzQL7eASKdetQwUOQ+IA9DvXcNMA9fvro/1MXvpRyDuYg21Pl6qnevlNfm8F9qFtITA0XE4YGZ+b4S1H2LuoYq3h2y3V+sIaDrpKl6hoIkp5m3aqSxLsezSMgP52FzOROY3YZC2NUiUlFBq/F9PkMwBZRL4o9qSvgdJXltlM6o2HQ3sEaKyM2SFH0YIIfuYNVglJwXP2Wsb7rmGow=="}},"tbs_fingerprint":"2aa513bde651c79cb135e1bbc40013ba21ab6195f093db6e828fafba71662ac6","tbs_noct_fingerprint":"2aa513bde651c79cb135e1bbc40013ba21ab6195f093db6e828fafba71662ac6","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2019-02-24 06:15:05 UTC","length":"31536000","start":"2018-02-24 06:15:05 UTC"},"version":"3"},"precert":false,"raw":"MIIDazCCAlOgAwIBAgIEEyQo7DANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDDBZodHRwdHBsaW5rbW9kZW1uZXQuY29tMB4XDTE4MDIyNDA2MTUwNVoXDTE5MDIyNDA2MTUwNVowITEfMB0GA1UEAwwWaHR0cHRwbGlua21vZGVtbmV0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUhgFWH0MW+3NM3t9fL3yEruG8c7I+mIBkWKz8UgauVAUECSK6jzPRZXC9v6dkvZ+iOsJtsVVEgkebaSZD7ZDnBsZSVkEuObx8FF1LcSG5soMpoLRiv+6ZPT2iYLCzHRCw5Vdrc0C+3gEinXrUMFDkPiAPQ713DTAPX766P9TF76Ucg7mINtT5eqp3r5TX5vBfahbSEwNFxOGBmfm+EtR9i7qGKt4dst1frCGg66SpeoaCJKeZt2qksS7Hs0jID+dhczkTmN2GQtjVIlJRQavxfT5DMAWUS+KPakr4HSV5bZTOqNh0N7BGisjNkhR9GCCH7mDVYJScFz9lrG+65hqMCAwEAAaOBqjCBpzAdBgNVHQ4EFgQUljD8j4M8eRv6VGX9jlUkEMRNchkwHwYDVR0jBBgwFoAUljD8j4M8eRv6VGX9jlUkEMRNchkwCQYDVR0TBAIwADBaBgNVHREEUzBRghZodHRwdHBsaW5rbW9kZW1uZXQuY29tghttYWlsLmh0dHB0cGxpbmttb2RlbW5ldC5jb22CGnd3dy5odHRwdHBsaW5rbW9kZW1uZXQuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQCMXlHffRbDYTk5YJtmzL/cXmuNlyDDjJG6iuz9ISjU96wMrDVRfiwHjmrYwHCD0LB/eh9NlvdjLpcQlG16+THi/kr4ymUt81ZBGQca7spFETtRd026VqD+InKALE2Bo6B4PbpMwES6YcqauJdjw80fvtd5nwqnlJdP2i03j4pJKiJW7tVdr3XslC5hjMcb+c3pU+l1kcGnXkP70tCHfJHWDXCsskQQk9Okl0RLiPZEqT05Zr2wY54aW4+feb/QtS29byCVIiAXRK70DxBHkSQdGHBH2lOsaTT3bXycmp8MtBDRZMIE7t8kNv6fyK/Qeookw0otWs5zs56N3W9ZHU5L","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:18:31 UTC","fingerprint_sha256":"d9745f5dff3ef33742f8eeff268615341f0a19c9bdd6ad3344692bbcd3b7f46e","metadata":{"added_at":"2018-03-19 14:18:31 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-11-30 01:47:57 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-11-30 01:51:25 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"6119f68b8a8920127a7d725f61fba68a11e49437","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["hollehockdesigns.com","mail.hollehockdesigns.com","www.hollehockdesigns.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"6119f68b8a8920127a7d725f61fba68a11e49437"},"fingerprint_md5":"5505f86ed4d22ff9cdb57838a626f17b","fingerprint_sha1":"5b01d7dc5ad0f84bb35a8c490d545cdf639b3d9e","fingerprint_sha256":"d9745f5dff3ef33742f8eeff268615341f0a19c9bdd6ad3344692bbcd3b7f46e","issuer":{"common_name":["hollehockdesigns.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=hollehockdesigns.com","names":["hollehockdesigns.com","mail.hollehockdesigns.com","www.hollehockdesigns.com"],"redacted":false,"serial_number":"8041818465","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"e5ctAeeHnVNF06CY2tMiUI9c2or1QltYJsQJJiZa3Tf9j45rGPp48IaEa9Dap/9bPRMahVWS+bjxAsuwE/+lZ5FNIzACTRPA07SCiiOu+6PDFBWvTGR82lvoqWtHGPYF1OW13W18drbXJiyOtGGOkr39nLXlNCRH834OSKhER2gLecnayT4F4hkPSYtHButTjeddar3PS/H/3/HH0LZ3hXeoVnReBvt0Q2ChNswNx/8jMiYgf+fjYiB2pYdd+hMjQaU8nDlUlp5nHxGejZCdkgVnnU9nl9auDS047/To3KtDqDhzj/bNklMi3tTbUokWzYTWN35l4gukbnaBwkWwYQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"34109fc6edf5d4f6c7d9d14f4f17c3ab64f5daac4d3639fb9e2d307681761e48","subject":{"common_name":["hollehockdesigns.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=hollehockdesigns.com","subject_key_info":{"fingerprint_sha256":"f94a2cfc12b8d11a594e4d60e26a22ff2ee5801887d706221a6dadaa9311ef0d","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"mg6ZWPy0fw4yDbGGDXvanQd6WnWQ25U5raS6R84bP1fp8ZBmQBqRoOB6Gjsb0zA+CRbrDV9O0JmjNaVNRouvtgvbl8BJ0NBsND2RNOZM4C5nuMaWmOk+MaJDrtzFLBBZ3ymSdSagmZx3j8MamY0BwF4B3Ki5pjn3WcNO/J1FrK3/eq6Gv/d3AZsCC/BS5driXQufCmipkBtEW4pycihtrRoFKnDx6kWStBBCwiJmAAQP7kr5ef4KmP0tyTQM2K263s+J9nWo8UUUYKVI4szYyRr5a5JbTkrb8fidukvyrPQmqjYSrDLUKc+M+c2HKA7XGlXoKrMD1/hPcTglCwNzPw=="}},"tbs_fingerprint":"b279305fa368275667b32889d56be9dd0265b567aeea548450337b15ab7367d0","tbs_noct_fingerprint":"b279305fa368275667b32889d56be9dd0265b567aeea548450337b15ab7367d0","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-11-29 21:02:52 UTC","length":"31536000","start":"2017-11-29 21:02:52 UTC"},"version":"3"},"precert":false,"raw":"MIIDYjCCAkqgAwIBAgIFAd9UaWEwDQYJKoZIhvcNAQELBQAwHzEdMBsGA1UEAwwUaG9sbGVob2NrZGVzaWducy5jb20wHhcNMTcxMTI5MjEwMjUyWhcNMTgxMTI5MjEwMjUyWjAfMR0wGwYDVQQDDBRob2xsZWhvY2tkZXNpZ25zLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJoOmVj8tH8OMg2xhg172p0Help1kNuVOa2kukfOGz9X6fGQZkAakaDgeho7G9MwPgkW6w1fTtCZozWlTUaLr7YL25fASdDQbDQ9kTTmTOAuZ7jGlpjpPjGiQ67cxSwQWd8pknUmoJmcd4/DGpmNAcBeAdyouaY591nDTvydRayt/3quhr/3dwGbAgvwUuXa4l0LnwpoqZAbRFuKcnIoba0aBSpw8epFkrQQQsIiZgAED+5K+Xn+Cpj9Lck0DNitut7PifZ1qPFFFGClSOLM2Mka+WuSW05K2/H4nbpL8qz0Jqo2Eqwy1CnPjPnNhygO1xpV6CqzA9f4T3E4JQsDcz8CAwEAAaOBpDCBoTAdBgNVHQ4EFgQUYRn2i4qJIBJ6fXJfYfumihHklDcwHwYDVR0jBBgwFoAUYRn2i4qJIBJ6fXJfYfumihHklDcwCQYDVR0TBAIwADBUBgNVHREETTBLghRob2xsZWhvY2tkZXNpZ25zLmNvbYIZbWFpbC5ob2xsZWhvY2tkZXNpZ25zLmNvbYIYd3d3LmhvbGxlaG9ja2Rlc2lnbnMuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQB7ly0B54edU0XToJja0yJQj1zaivVCW1gmxAkmJlrdN/2PjmsY+njwhoRr0Nqn/1s9ExqFVZL5uPECy7AT/6VnkU0jMAJNE8DTtIKKI677o8MUFa9MZHzaW+ipa0cY9gXU5bXdbXx2ttcmLI60YY6Svf2cteU0JEfzfg5IqERHaAt5ydrJPgXiGQ9Ji0cG61ON511qvc9L8f/f8cfQtneFd6hWdF4G+3RDYKE2zA3H/yMyJiB/5+NiIHalh136EyNBpTycOVSWnmcfEZ6NkJ2SBWedT2eX1q4NLTjv9Ojcq0OoOHOP9s2SUyLe1NtSiRbNhNY3fmXiC6RudoHCRbBh","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:19:01 UTC","fingerprint_sha256":"ed93d6dfbbca976e798864b747410763464b3328929a94371ad15d57217c92a5","metadata":{"added_at":"2018-03-19 14:19:01 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-02-14 00:48:51 UTC","seen_in_scan":true,"source":"scan","updated_at":"2019-02-14 00:48:54 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"aa8d75538faa8fe4bc32a5d91bf49f25b53a0bb0","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_key_id":"aa8d75538faa8fe4bc32a5d91bf49f25b53a0bb0"},"fingerprint_md5":"01287df208bc96c6da4b19e1882555e4","fingerprint_sha1":"8c696a4d2afa2dc5ddd1258ae78ac222ae567865","fingerprint_sha256":"ed93d6dfbbca976e798864b747410763464b3328929a94371ad15d57217c92a5","issuer":{"common_name":["tavarantarkastaja.com"],"country":["FI"],"domain_component":[],"email_address":["tuki@webhotelli.fi"],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Helsinki"],"organization":["Nordic Web Hotel Oy"],"organization_id":[],"organizational_unit":["Webhotelli.fi"],"postal_code":[],"province":["Uusimaa"],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=FI, L=Helsinki, O=Nordic Web Hotel Oy, OU=Webhotelli.fi, CN=tavarantarkastaja.com, emailAddress=tuki@webhotelli.fi, ST=Uusimaa","names":["tavarantarkastaja.com","subdomain.first_file_testdomain4.gov"],"redacted":false,"serial_number":"157943845","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"laDNmY7+h2FQ2a1R/4lkN3C1p1JJ5w1sydqQJ95Xp6Jzu8yQ+p3FQeHQlIGy6Cv1fPURTq0aTjKK4v2M2sXheLP43Yg5ak9wIuHojpiiYDmKbDWlMjTD34WHEWO9F4w9apeQtTlEDlEpvUWtoqUQphJNZkTdu1HG0T4OyrCvsSONMCvYvxJy7TgEHTDmTT4NzjNLk25AcfzeBc6siOfcMwKQLmMgvKHOHIePPzvekFkstC3UM+z7kqih+1YEJpdeMU176Bm2Zw92DlyISXXmFfjmj6EY76e6Lz1jvg7x4D53NJhzjnQ+YGvS7t0wNa1YiRUjo2AYn6qpZAXA3r0PcA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"c2bdc1a2112f732023a71fe64034613f7bbc0fbb7527747e7309c3319726ecf6","subject":{"common_name":["tavarantarkastaja.com"],"country":["FI"],"domain_component":[],"email_address":["tuki@webhotelli.fi"],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Helsinki"],"organization":["Nordic Web Hotel Oy"],"organization_id":[],"organizational_unit":["Webhotelli.fi"],"postal_code":[],"province":["Uusimaa"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=FI, L=Helsinki, O=Nordic Web Hotel Oy, OU=Webhotelli.fi, CN=tavarantarkastaja.com, emailAddress=tuki@webhotelli.fi, ST=Uusimaa","subject_key_info":{"fingerprint_sha256":"bb6d492ff73eb585f1289e02570e785c41a9f66c98507850570721283ae91626","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"zZyGfg+Sil+OsCJh/xxw0tSVTtFHKv1yok/g7Ev/fdqhnsBlERjhuotevy+9g3QZcPwaw7bquxAQ4JRY+hL4D+/o7vNOFynIOo1NmP5yY/x+OFyugwRBPgvY8eSxj8yY0y3hPzgQPtIWdHo5c7+t9bjuyGTpK2UIr64UTHAxjSkibo8CCTI2UMn/EP3eHgLlkBpeiFUGo9BwMBHpJyR9hVa2POOu7gSC6nPg7KDzV1nfWmb/rHkRX+wdDRCG87cMkkcV1IqlLKY1v2vS+tiNNrf/GyBgPfzyMQ86/27msbHks9YQSHbTtfarRXAvP8+w++dLFfIJj7SeeLOCr8kPVw=="}},"tbs_fingerprint":"eca30f5ff0cc15e5085f7420a2ab5c0597e94f1532c76b76f2dd66b04a5ed20d","tbs_noct_fingerprint":"eca30f5ff0cc15e5085f7420a2ab5c0597e94f1532c76b76f2dd66b04a5ed20d","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2019-02-13 13:36:26 UTC","length":"31536000","start":"2018-02-13 13:36:26 UTC"},"version":"3"},"precert":false,"raw":"MIIEIzCCAwugAwIBAgIECWoIJTANBgkqhkiG9w0BAQsFADCBqzELMAkGA1UEBhMCRkkxETAPBgNVBAcMCEhlbHNpbmtpMRwwGgYDVQQKDBNOb3JkaWMgV2ViIEhvdGVsIE95MRYwFAYDVQQLDA1XZWJob3RlbGxpLmZpMR4wHAYDVQQDDBV0YXZhcmFudGFya2FzdGFqYS5jb20xITAfBgkqhkiG9w0BCQEWEnR1a2lAd2ViaG90ZWxsaS5maTEQMA4GA1UECAwHVXVzaW1hYTAeFw0xODAyMTMxMzM2MjZaFw0xOTAyMTMxMzM2MjZaMIGrMQswCQYDVQQGEwJGSTERMA8GA1UEBwwISGVsc2lua2kxHDAaBgNVBAoME05vcmRpYyBXZWIgSG90ZWwgT3kxFjAUBgNVBAsMDVdlYmhvdGVsbGkuZmkxHjAcBgNVBAMMFXRhdmFyYW50YXJrYXN0YWphLmNvbTEhMB8GCSqGSIb3DQEJARYSdHVraUB3ZWJob3RlbGxpLmZpMRAwDgYDVQQIDAdVdXNpbWFhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzZyGfg+Sil+OsCJh/xxw0tSVTtFHKv1yok/g7Ev/fdqhnsBlERjhuotevy+9g3QZcPwaw7bquxAQ4JRY+hL4D+/o7vNOFynIOo1NmP5yY/x+OFyugwRBPgvY8eSxj8yY0y3hPzgQPtIWdHo5c7+t9bjuyGTpK2UIr64UTHAxjSkibo8CCTI2UMn/EP3eHgLlkBpeiFUGo9BwMBHpJyR9hVa2POOu7gSC6nPg7KDzV1nfWmb/rHkRX+wdDRCG87cMkkcV1IqlLKY1v2vS+tiNNrf/GyBgPfzyMQ86/27msbHks9YQSHbTtfarRXAvP8+w++dLFfIJj7SeeLOCr8kPVwIDAQABo00wSzAdBgNVHQ4EFgQUqo11U4+qj+S8MqXZG/SfJbU6C7AwHwYDVR0jBBgwFoAUqo11U4+qj+S8MqXZG/SfJbU6C7AwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAlaDNmY7+h2FQ2a1R/4lkN3C1p1JJ5w1sydqQJ95Xp6Jzu8yQ+p3FQeHQlIGy6Cv1fPURTq0aTjKK4v2M2sXheLP43Yg5ak9wIuHojpiiYDmKbDWlMjTD34WHEWO9F4w9apeQtTlEDlEpvUWtoqUQphJNZkTdu1HG0T4OyrCvsSONMCvYvxJy7TgEHTDmTT4NzjNLk25AcfzeBc6siOfcMwKQLmMgvKHOHIePPzvekFkstC3UM+z7kqih+1YEJpdeMU176Bm2Zw92DlyISXXmFfjmj6EY76e6Lz1jvg7x4D53NJhzjnQ+YGvS7t0wNa1YiRUjo2AYn6qpZAXA3r0PcA==","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"error","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"error","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 16:16:27 UTC","fingerprint_sha256":"ea709d7b9c4980580305d69137483769072ee40b59f186bed76e0b053bfe4e3a","metadata":{"added_at":"2018-03-19 16:16:27 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 07:01:47 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-29 17:23:02 UTC"},"parents":[],"parsed":{"extensions":{"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[]},"fingerprint_md5":"1d2ca120d0742d72a108e576384609d9","fingerprint_sha1":"d3e2fb83de584b79b9f9cbb6efd6d3aba7ae858c","fingerprint_sha256":"ea709d7b9c4980580305d69137483769072ee40b59f186bed76e0b053bfe4e3a","issuer":{"common_name":["znaika.com.ua"],"country":["UK"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Exim Developers"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=UK, O=Exim Developers, CN=znaika.com.ua","names":["znaika.com.ua"],"redacted":false,"serial_number":"0","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1-RSA","oid":"1.3.14.3.2.29"},"valid":false,"value":"TvhtGp9y8CE8rhnICN7iPUKooQ6pLzZ676V03V897UovDcUjLChlIivxsDwEruFiF5LjKMG0VIlzgPs04+28UPsWOfZ+/0WzkeYbIaeK5uD+9l+RFX2PNhJz5mLMqyapVCQbmGh6eD21gq14f2MhflDYFaG1G8hvT5ewgfE2vLI="},"signature_algorithm":{"name":"SHA1-RSA","oid":"1.3.14.3.2.29"},"spki_subject_fingerprint":"f42666bd16ac40b02853ec3a803081f6b047263ae2183a66fc37f3222432ae1a","subject":{"common_name":["znaika.com.ua"],"country":["UK"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Exim Developers"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=UK, O=Exim Developers, CN=znaika.com.ua","subject_key_info":{"fingerprint_sha256":"ff492cc933214c677539ff8bac35e9df96828d9c1525809ee5628448bc277d78","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"1o1G5OZBtya2NAGeAOXqaHqNn49lrx8PljkU2yfMxQajC3RDsy3Ew3IvEU8ReSp73iIHu1+OduJ+hqBd732uDqJbRhSaQiPfMUJJ40TX9t5ME/B3Lmvlma2HBRZO27WdOC5XE/P2ZpbW+LAQIswhrI3ROSZnoDZ9xJOI5jqBQh0="}},"tbs_fingerprint":"c5bd85defe517124d19f3feefb0d6fbd4345acdba47b7dd3276c5ed1867111f9","tbs_noct_fingerprint":"262799c946d27991a78adc34f7a2352abee1b307682081fe1e4f0133bc6cd327","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-03-19 17:16:27 UTC","length":"3600","start":"2018-03-19 16:16:27 UTC"},"version":"3"},"precert":false,"raw":"MIIB8jCCAVugAwIBAgIBADANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQGEwJVSzEYMBYGA1UEChMPRXhpbSBEZXZlbG9wZXJzMRYwFAYDVQQDEw16bmFpa2EuY29tLnVhMB4XDTE4MDMxOTE2MTYyN1oXDTE4MDMxOTE3MTYyN1owPzELMAkGA1UEBhMCVUsxGDAWBgNVBAoTD0V4aW0gRGV2ZWxvcGVyczEWMBQGA1UEAxMNem5haWthLmNvbS51YTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1o1G5OZBtya2NAGeAOXqaHqNn49lrx8PljkU2yfMxQajC3RDsy3Ew3IvEU8ReSp73iIHu1+OduJ+hqBd732uDqJbRhSaQiPfMUJJ40TX9t5ME/B3Lmvlma2HBRZO27WdOC5XE/P2ZpbW+LAQIswhrI3ROSZnoDZ9xJOI5jqBQh0CAwEAATANBgkqhkiG9w0BAQUFAAOBgQBO+G0an3LwITyuGcgI3uI9QqihDqkvNnrvpXTdXz3tSi8NxSMsKGUiK/GwPASu4WIXkuMowbRUiXOA+zTj7bxQ+xY59n7/RbOR5hshp4rm4P72X5EVfY82EnPmYsyrJqlUJBuYaHp4PbWCrXh/YyF+UNgVobUbyG9Pl7CB8Ta8sg==","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"na","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"error","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"na","e_path_len_constraint_zero_or_less":"na","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"error","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"error","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"error","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"error","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"warn","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 00:02:25 UTC","fingerprint_sha256":"1a3447cad712537386acb883016ac4dbcddd46cd921607547383a9d23a7b9370","metadata":{"added_at":"2018-03-19 00:02:25 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 11:26:28 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-29 22:44:25 UTC"},"parents":[],"parsed":{"extensions":{"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[]},"fingerprint_md5":"e9a9249b2d21ee5b336ea54801244382","fingerprint_sha1":"b861dba26bb7d71de8d204c8f49a3bb58923f08f","fingerprint_sha256":"1a3447cad712537386acb883016ac4dbcddd46cd921607547383a9d23a7b9370","issuer":{"common_name":["suitegirls.site"],"country":["HR"],"domain_component":[],"email_address":["info@studio4host.com"],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["HR"],"organization":["CentOS Web Panel"],"organization_id":[],"organizational_unit":["CentOS Web Panel"],"postal_code":[],"province":["Zagreb"],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=HR, ST=Zagreb, O=CentOS Web Panel, L=HR, CN=suitegirls.site, OU=CentOS Web Panel, emailAddress=info@studio4host.com","names":["suitegirls.site"],"redacted":false,"serial_number":"12397329080618424585","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"ipZ2HUY6m2Hn2VceWU0aLUXKTBm3O9oi7ktZ2gzauhxENndTfPZUw6emJw3zuuOQPekw4DJPnU8nfsBICPgyJIIx4NhNV7j9bzuwnFYGZKHX8Wmz/kDnGuArSF/L1QjaQiiYIvgc+tLO3abACgOgJJ/POMirYZ+e538g6gToN22IKFy0HYLKJY19s9k0fM1koDzmfF+HtteNXTLnLkiYL/Z1SvancYgfdXhGA55QgMaE5nQF6BzIIwVzgwwRmpwMaVwUlPFSvEpg6VO52iL7Gdzb8cJMGZHti7dXJfWlPfEtI2WOotWJLeV2yG2efA6mXXyh/X1pRZ90H9lu7CObpQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"081ed66d5f880a8639e1e7931e7362a2a76b9ac05ffe11c01cb51f60a8a12dbe","subject":{"common_name":["suitegirls.site"],"country":["HR"],"domain_component":[],"email_address":["info@studio4host.com"],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["HR"],"organization":["CentOS Web Panel"],"organization_id":[],"organizational_unit":["CentOS Web Panel"],"postal_code":[],"province":["Zagreb"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=HR, ST=Zagreb, O=CentOS Web Panel, L=HR, CN=suitegirls.site, OU=CentOS Web Panel, emailAddress=info@studio4host.com","subject_key_info":{"fingerprint_sha256":"f09415ae1d2f504b8a224474869ec2d45abefcdd4b1bc6ec5179f1cfb95e5162","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wYNlka1P7E59doTSNKA75T3O0MJ+pKPzrGS1AmdzECh+/ymPYtajjdcur+E+XpB25nQuR1oJ8rwHXEdd3HfAo9x0Bj4vt04ua15eCL8OWVfbTAnJgpgtICGZCk7Df0077BPRM+iqXmm4e1fGjHwnCgxrkWVAN/YkcTHD/hVpTcohb1DC0JdoGVobhS2pMCzmlP7gQCix9ykJN9/JYUJwF1H7R0xD6bvcDR7YYCFG47mpu9O/ZW+2FGcFF3Bspz/xuVW6dwvp214kNVrNv24s0MCOTzo4LQsb0t5U2r370/+XQ390/JqHk8O/YpmOvkgoap15kbqSP/SgLTs/h9RK+w=="}},"tbs_fingerprint":"29657e0e4401cf54c966f0f5942760df5c69bdac4b4326d5c2d516765c56a708","tbs_noct_fingerprint":"e34b77542d2ffad92cbe78a55fd4bb514fc3e7794fa9c2878e758cfbcbed64cd","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2028-03-15 15:20:25 UTC","length":"315360000","start":"2018-03-18 15:20:25 UTC"},"version":"1"},"precert":false,"raw":"MIIDvjCCAqYCCQCsDCkdbeGZCTANBgkqhkiG9w0BAQsFADCBoDELMAkGA1UEBhMCSFIxDzANBgNVBAgMBlphZ3JlYjEZMBcGA1UECgwQQ2VudE9TIFdlYiBQYW5lbDELMAkGA1UEBwwCSFIxGDAWBgNVBAMMD3N1aXRlZ2lybHMuc2l0ZTEZMBcGA1UECwwQQ2VudE9TIFdlYiBQYW5lbDEjMCEGCSqGSIb3DQEJARYUaW5mb0BzdHVkaW80aG9zdC5jb20wHhcNMTgwMzE4MTUyMDI1WhcNMjgwMzE1MTUyMDI1WjCBoDELMAkGA1UEBhMCSFIxDzANBgNVBAgMBlphZ3JlYjEZMBcGA1UECgwQQ2VudE9TIFdlYiBQYW5lbDELMAkGA1UEBwwCSFIxGDAWBgNVBAMMD3N1aXRlZ2lybHMuc2l0ZTEZMBcGA1UECwwQQ2VudE9TIFdlYiBQYW5lbDEjMCEGCSqGSIb3DQEJARYUaW5mb0BzdHVkaW80aG9zdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBg2WRrU/sTn12hNI0oDvlPc7Qwn6ko/OsZLUCZ3MQKH7/KY9i1qON1y6v4T5ekHbmdC5HWgnyvAdcR13cd8Cj3HQGPi+3Ti5rXl4Ivw5ZV9tMCcmCmC0gIZkKTsN/TTvsE9Ez6Kpeabh7V8aMfCcKDGuRZUA39iRxMcP+FWlNyiFvUMLQl2gZWhuFLakwLOaU/uBAKLH3KQk338lhQnAXUftHTEPpu9wNHthgIUbjuam7079lb7YUZwUXcGynP/G5Vbp3C+nbXiQ1Ws2/bizQwI5POjgtCxvS3lTavfvT/5dDf3T8moeTw79imY6+SChqnXmRupI/9KAtOz+H1Er7AgMBAAEwDQYJKoZIhvcNAQELBQADggEBAIqWdh1GOpth59lXHllNGi1FykwZtzvaIu5LWdoM2rocRDZ3U3z2VMOnpicN87rjkD3pMOAyT51PJ37ASAj4MiSCMeDYTVe4/W87sJxWBmSh1/Fps/5A5xrgK0hfy9UI2kIomCL4HPrSzt2mwAoDoCSfzzjIq2Gfnud/IOoE6DdtiChctB2CyiWNfbPZNHzNZKA85nxfh7bXjV0y5y5ImC/2dUr2p3GIH3V4RgOeUIDGhOZ0BegcyCMFc4MMEZqcDGlcFJTxUrxKYOlTudoi+xnc2/HCTBmR7Yu3VyX1pT3xLSNljqLViS3ldshtnnwOpl18of19aUWfdB/Zbuwjm6U=","tags":["unexpired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"na","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"na","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"error","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"error","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"na","e_path_len_constraint_zero_or_less":"na","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"error","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:20:13 UTC","fingerprint_sha256":"f54b6c3830e32828a145e7b8705058d3b4035996d286606f5da6cb05a35ebc48","metadata":{"added_at":"2018-03-19 14:20:13 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-03-07 02:11:21 UTC","seen_in_scan":true,"source":"scan","updated_at":"2019-03-07 02:30:22 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"21f1f301ef58f2154975ca3f16812e3644910d41","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["homesoflacanada.webpages-canada.net","homesoflacanada.com","mail.homesoflacanada.com","www.homesoflacanada.com","www.homesoflacanada.webpages-canada.net"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"21f1f301ef58f2154975ca3f16812e3644910d41"},"fingerprint_md5":"f888d63829f8c381e544a95e140e71fd","fingerprint_sha1":"efa88a3f89f99f5e8b9e031b3c62f5df42c71f11","fingerprint_sha256":"f54b6c3830e32828a145e7b8705058d3b4035996d286606f5da6cb05a35ebc48","issuer":{"common_name":["homesoflacanada.webpages-canada.net"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=homesoflacanada.webpages-canada.net","names":["www.homesoflacanada.webpages-canada.net","homesoflacanada.webpages-canada.net","homesoflacanada.com","mail.homesoflacanada.com","www.homesoflacanada.com"],"redacted":false,"serial_number":"7712306173","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"Z0I+gtsvltyswoHAJPx49ZJveBIh+PLlpXX8ykBgNq835Rfqbx7d8QPgp1Ff9EAZbRqsVAqVDDTRiREu2ESXid64WcmMhMKE7vkdyysg55F6V88L0fOw0/2NAcQ3CmV3gqwm6Baf284Pn1t+7n0rFix7PFm+/51WdBNUtIIAoL9Akf02BBKVj83lkhIm2reN++Od3zro4k4EYzIxiWJzx0DOvGq7dnTZLuH4qftQdAqRa+AUP/7hl+lE6cS7NTwfokxHJeXeMg63vo8a6pi8zJs1K+YO167hfDRdTz2244oFUBAVcbyzidy7kK1cceqzZ0kJ2Ti6P7moIfxcYvfHyw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"0545eb595299933ca184d874f5d51f27477f75596e8c3184538cc602d31f7d4c","subject":{"common_name":["homesoflacanada.webpages-canada.net"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=homesoflacanada.webpages-canada.net","subject_key_info":{"fingerprint_sha256":"5daa29b5f8b65f659bb57f2e4115254141a1173479e4c884a9e52cf2ab8baca9","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"v9GnZCutaQ0yC1GZpHoeIC2HuLL6iIVqvMDExdfEUTtt/1TZYCr48VUEDh9rawiPBlgPal14y98GQOcV/+si9YbHnZ9zasyzwQKcr2UU5iffIF+tlWXMOHTpASZG/ZXyxztoMWTYaB9rXTfu0NIf881EbIz7qxkj1s4wPF/FYZCJFvmkjOLidPORB48asVlsPt8WmqsyHQbtQG7bSVvIpsGfBuRXBAA3upLIz7k3MxFe9AdxtNLRk+/KHU/+fxCletGtTz1T1Nn2WU3biBpKX0+RVedMgJYo53PAl6A8tckPEB5IR6eEvRZ0kEoBu1sUMqLW96qmXf3WyC1sMCX1+w=="}},"tbs_fingerprint":"6edc082a75678f72fc4fac72fcd9a5dcdbc16fbc99bfbaaf5b92a8d404c22043","tbs_noct_fingerprint":"6edc082a75678f72fc4fac72fcd9a5dcdbc16fbc99bfbaaf5b92a8d404c22043","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2019-03-06 21:17:27 UTC","length":"31536000","start":"2018-03-06 21:17:27 UTC"},"version":"3"},"precert":false,"raw":"MIIDzjCCAragAwIBAgIFAcuwc/0wDQYJKoZIhvcNAQELBQAwLjEsMCoGA1UEAwwjaG9tZXNvZmxhY2FuYWRhLndlYnBhZ2VzLWNhbmFkYS5uZXQwHhcNMTgwMzA2MjExNzI3WhcNMTkwMzA2MjExNzI3WjAuMSwwKgYDVQQDDCNob21lc29mbGFjYW5hZGEud2VicGFnZXMtY2FuYWRhLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/Rp2QrrWkNMgtRmaR6HiAth7iy+oiFarzAxMXXxFE7bf9U2WAq+PFVBA4fa2sIjwZYD2pdeMvfBkDnFf/rIvWGx52fc2rMs8ECnK9lFOYn3yBfrZVlzDh06QEmRv2V8sc7aDFk2Ggfa1037tDSH/PNRGyM+6sZI9bOMDxfxWGQiRb5pIzi4nTzkQePGrFZbD7fFpqrMh0G7UBu20lbyKbBnwbkVwQAN7qSyM+5NzMRXvQHcbTS0ZPvyh1P/n8QpXrRrU89U9TZ9llN24gaSl9PkVXnTICWKOdzwJegPLXJDxAeSEenhL0WdJBKAbtbFDKi1veqpl391sgtbDAl9fsCAwEAAaOB8jCB7zAdBgNVHQ4EFgQUIfHzAe9Y8hVJdco/FoEuNkSRDUEwHwYDVR0jBBgwFoAUIfHzAe9Y8hVJdco/FoEuNkSRDUEwCQYDVR0TBAIwADCBoQYDVR0RBIGZMIGWgiNob21lc29mbGFjYW5hZGEud2VicGFnZXMtY2FuYWRhLm5ldIITaG9tZXNvZmxhY2FuYWRhLmNvbYIYbWFpbC5ob21lc29mbGFjYW5hZGEuY29tghd3d3cuaG9tZXNvZmxhY2FuYWRhLmNvbYInd3d3LmhvbWVzb2ZsYWNhbmFkYS53ZWJwYWdlcy1jYW5hZGEubmV0MA0GCSqGSIb3DQEBCwUAA4IBAQBnQj6C2y+W3KzCgcAk/Hj1km94EiH48uWldfzKQGA2rzflF+pvHt3xA+CnUV/0QBltGqxUCpUMNNGJES7YRJeJ3rhZyYyEwoTu+R3LKyDnkXpXzwvR87DT/Y0BxDcKZXeCrCboFp/bzg+fW37ufSsWLHs8Wb7/nVZ0E1S0ggCgv0CR/TYEEpWPzeWSEibat437453fOujiTgRjMjGJYnPHQM68art2dNku4fip+1B0CpFr4BQ//uGX6UTpxLs1PB+iTEcl5d4yDre+jxrqmLzMmzUr5g7XruF8NF1PPbbjigVQEBVxvLOJ3LuQrVxx6rNnSQnZOLo/uagh/Fxi98fL","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:23:55 UTC","fingerprint_sha256":"fea4424c3130b469ec2ce5fca4fe1436e22067fdb4d9cbafc4f585605c9a807a","metadata":{"added_at":"2018-03-19 14:23:55 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 00:23:27 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-29 08:59:44 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"b82d14c0a794a4ea002adaa706f67e274e6153bc","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["daryapix.ir","www.daryapix.ir","mail.daryapix.ir"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"b82d14c0a794a4ea002adaa706f67e274e6153bc"},"fingerprint_md5":"77575c6ecabab8af932fe0e1d9bb4f63","fingerprint_sha1":"cdec4903b5e5888596539003d05c4cc03aa399d1","fingerprint_sha256":"fea4424c3130b469ec2ce5fca4fe1436e22067fdb4d9cbafc4f585605c9a807a","issuer":{"common_name":["daryapix.ir"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=daryapix.ir","names":["daryapix.ir","www.daryapix.ir","mail.daryapix.ir"],"redacted":false,"serial_number":"5093856968","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"oLiyUWl4A6TPbfA6f1XdyfbImb9mYxqpHpBRYFe+IxeYA+nDDrrLvDs8bFawM+c0R4tj+ftn5nWi9bE98Eqjr6At11wpCPtKKICR6FYV2574PqpqK97xTVepENXOV7j1y2lNIMDd/1cCLZWZqr2QzsJzVj007BtlCp2Tbjv6GljkCMmlH6ENs6YvEZZBkFIIc8CCrUGneoF/nv8bfE5FyvmAEJcH4FcISBsNn2TMG4qKS2uTs1IRZY+F04Wh9qd/d59T6dvqXwSNGH6KYJ3UO9zdCfSN0eHQUoFYFZ2S/+Z3GgygJOzny0SGpXIDr1rQMODKRdDLV6FnWoTYVNalvg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"6bfd4c04f8c328a22feed2cbf3cdb03f11e972bf7766f751a23e98d46d03cecd","subject":{"common_name":["daryapix.ir"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=daryapix.ir","subject_key_info":{"fingerprint_sha256":"1d593a5bbc81525a57488a6af84c05b85bd8209d41f6c4933310af768e3f82a7","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1b2muKA5UakRf8mT0h/95fywSyg7xDHL/Nlq1mlFcuHaY7L7nYIyH9FWwO3g0N7Bg73DP7+OUqFO5r4QIt7W8WDyBSUJoa1LT3hLc/yozCgZ7MLSk3suJq9qDrPPKE6zaQo71Tpu11gFFeVQoFHuof6ujTqiHVBwSTbnGWOm/2Ry9+chiLtlaSv3iRH/f147tIasltx7YX3+5gEXlwLdBqvQUKioJxiyYSK6H+F1okpRJ2NJRHTl5iujnRgbmTc84DbRbgrXsz/aXh5dbmeX+Teu9KD4X0nLIraVKb3SWHHwbTAZ2DAUjSMkO4Dxx68RxrqmM8TB2Xh/pGGA9Si2tQ=="}},"tbs_fingerprint":"2adf76706a7f659adac8b92eee87690150976ac782517c9ea6f4013abb398bc8","tbs_noct_fingerprint":"2adf76706a7f659adac8b92eee87690150976ac782517c9ea6f4013abb398bc8","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-04-22 10:38:26 UTC","length":"31536000","start":"2017-04-22 10:38:26 UTC"},"version":"3"},"precert":false,"raw":"MIIDNTCCAh2gAwIBAgIFAS+eFsgwDQYJKoZIhvcNAQELBQAwFjEUMBIGA1UEAwwLZGFyeWFwaXguaXIwHhcNMTcwNDIyMTAzODI2WhcNMTgwNDIyMTAzODI2WjAWMRQwEgYDVQQDDAtkYXJ5YXBpeC5pcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANW9prigOVGpEX/Jk9If/eX8sEsoO8Qxy/zZatZpRXLh2mOy+52CMh/RVsDt4NDewYO9wz+/jlKhTua+ECLe1vFg8gUlCaGtS094S3P8qMwoGezC0pN7Liavag6zzyhOs2kKO9U6btdYBRXlUKBR7qH+ro06oh1QcEk25xljpv9kcvfnIYi7ZWkr94kR/39eO7SGrJbce2F9/uYBF5cC3Qar0FCoqCcYsmEiuh/hdaJKUSdjSUR05eYro50YG5k3POA20W4K17M/2l4eXW5nl/k3rvSg+F9JyyK2lSm90lhx8G0wGdgwFI0jJDuA8cevEca6pjPEwdl4f6RhgPUotrUCAwEAAaOBiTCBhjAdBgNVHQ4EFgQUuC0UwKeUpOoAKtqnBvZ+J05hU7wwHwYDVR0jBBgwFoAUuC0UwKeUpOoAKtqnBvZ+J05hU7wwCQYDVR0TBAIwADA5BgNVHREEMjAwggtkYXJ5YXBpeC5pcoIPd3d3LmRhcnlhcGl4LmlyghBtYWlsLmRhcnlhcGl4LmlyMA0GCSqGSIb3DQEBCwUAA4IBAQCguLJRaXgDpM9t8Dp/Vd3J9siZv2ZjGqkekFFgV74jF5gD6cMOusu8OzxsVrAz5zRHi2P5+2fmdaL1sT3wSqOvoC3XXCkI+0oogJHoVhXbnvg+qmor3vFNV6kQ1c5XuPXLaU0gwN3/VwItlZmqvZDOwnNWPTTsG2UKnZNuO/oaWOQIyaUfoQ2zpi8RlkGQUghzwIKtQad6gX+e/xt8TkXK+YAQlwfgVwhIGw2fZMwbiopLa5OzUhFlj4XThaH2p393n1Pp2+pfBI0YfopgndQ73N0J9I3R4dBSgVgVnZL/5ncaDKAk7OfLRIalcgOvWtAw4MpF0MtXoWdahNhU1qW+","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:20:15 UTC","fingerprint_sha256":"cd005cd726ca834b51b7ffcff2aad698ac952e9af070cd1fe69a0df50c592aaf","metadata":{"added_at":"2018-03-19 14:20:15 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 22:57:01 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-29 07:10:49 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"ac1fff8fdf64cacd058c8e5673ed92069622b007","basic_constraints":{"is_ca":true},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_key_id":"ac1fff8fdf64cacd058c8e5673ed92069622b007"},"fingerprint_md5":"b1d3a3cb635678780599f3532879a82a","fingerprint_sha1":"68041c96384e19fd91adc509eaa3566854d1fc4e","fingerprint_sha256":"cd005cd726ca834b51b7ffcff2aad698ac952e9af070cd1fe69a0df50c592aaf","issuer":{"common_name":["Plesk"],"country":["US"],"domain_component":[],"email_address":["info@plesk.com"],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Seattle"],"organization":["Odin"],"organization_id":[],"organizational_unit":["Plesk"],"postal_code":[],"province":["Washington"],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=US, ST=Washington, L=Seattle, O=Odin, OU=Plesk, CN=Plesk, emailAddress=info@plesk.com","names":[],"redacted":false,"serial_number":"347545328","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"xPwaOJbFmeFkjnooRQxBYkqDFHaZ6z/Och0EJgt1og7iP8zyAC+ai61zLgFYOH5M7faXMKj58obzO4wNcjYeQM/30tkj91PU+62Issf0Yqwpr8cTKOeT44d8MW/8GY96xKFAqVN23wUYc9sId7jMkKGoqXqtOnodP3zkyYjnrjl2lh6sv3Di0yuSsn1hsjL1lEwLB+utcVXFSgw5l+dbT9e9Cq8bOYIY4KF8Tzv+/MeMH5U35kkLR/KRc7aunZl8UBVc2TQ7ZqonX7hafbN2wgX4kv2t5FMMKKhjLrORZwvbbo33fbFnsmQjJeUPANZbsozIGt5Las7UZTS/I7k23w=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d717c25cb27f671ab68f674b862c46e597cd0beeb833530f4bd2af4ba2f586d0","subject":{"common_name":["Plesk"],"country":["US"],"domain_component":[],"email_address":["info@plesk.com"],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Seattle"],"organization":["Odin"],"organization_id":[],"organizational_unit":["Plesk"],"postal_code":[],"province":["Washington"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=US, ST=Washington, L=Seattle, O=Odin, OU=Plesk, CN=Plesk, emailAddress=info@plesk.com","subject_key_info":{"fingerprint_sha256":"8873bb3ce95fb86d00f2b3d385454cfd5b4c2065d9d3a24b42481a72a5264a53","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1IU7YWVkHW7fF6GVp4/VgHrn0drR0mZ4xdCo7K8sak5j0ldi4b06+bcyVcGdBEoPKDDUBs149DSVmg2OuEXrhGCBNNqRaEA6VWZmUCzBn1uJYj6/VJBwlImQhaHhf5Jhm/Cr5fWvNKRsTK3QHZwWtGMjPLxx3Yx9BVjeb8UHKhy7WmBhdmN+QzncTUsJY2Zb3myyX4tvYrRQx5OUpsVRYFuog8v/uPzlcawsQs75ENeVI/MYhx4kep85ZPN3z3PU+cnPG6yBkMJ1hQobH6+WtDj/nSgdtdYE+gaCcuStLvhOX21MkkhQuM8Jxh6Fms7zg51BXdpvE6J88BP7q1QE5w=="}},"tbs_fingerprint":"2ec9a77d5eb78267512f6e8cb1ea1f77d88721a0f1679511e5614bc871f154a7","tbs_noct_fingerprint":"2ec9a77d5eb78267512f6e8cb1ea1f77d88721a0f1679511e5614bc871f154a7","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2017-09-19 20:20:06 UTC","length":"31536000","start":"2016-09-19 20:20:06 UTC"},"version":"3"},"precert":false,"raw":"MIIEajCCA1KgAwIBAgIEFLce8DANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1NlYXR0bGUxDTALBgNVBAoTBE9kaW4xDjAMBgNVBAsTBVBsZXNrMQ4wDAYDVQQDEwVQbGVzazEdMBsGCSqGSIb3DQEJARYOaW5mb0BwbGVzay5jb20wHhcNMTYwOTE5MjAyMDA2WhcNMTcwOTE5MjAyMDA2WjCBgjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1NlYXR0bGUxDTALBgNVBAoTBE9kaW4xDjAMBgNVBAsTBVBsZXNrMQ4wDAYDVQQDEwVQbGVzazEdMBsGCSqGSIb3DQEJARYOaW5mb0BwbGVzay5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUhTthZWQdbt8XoZWnj9WAeufR2tHSZnjF0KjsryxqTmPSV2LhvTr5tzJVwZ0ESg8oMNQGzXj0NJWaDY64ReuEYIE02pFoQDpVZmZQLMGfW4liPr9UkHCUiZCFoeF/kmGb8Kvl9a80pGxMrdAdnBa0YyM8vHHdjH0FWN5vxQcqHLtaYGF2Y35DOdxNSwljZlvebLJfi29itFDHk5SmxVFgW6iDy/+4/OVxrCxCzvkQ15Uj8xiHHiR6nzlk83fPc9T5yc8brIGQwnWFChsfr5a0OP+dKB211gT6BoJy5K0u+E5fbUySSFC4zwnGHoWazvODnUFd2m8TonzwE/urVATnAgMBAAGjgeUwgeIwHQYDVR0OBBYEFKwf/4/fZMrNBYyOVnPtkgaWIrAHMIGyBgNVHSMEgaowgaeAFKwf/4/fZMrNBYyOVnPtkgaWIrAHoYGIpIGFMIGCMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHU2VhdHRsZTENMAsGA1UEChMET2RpbjEOMAwGA1UECxMFUGxlc2sxDjAMBgNVBAMTBVBsZXNrMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHBsZXNrLmNvbYIEFLce8DAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDE/Bo4lsWZ4WSOeihFDEFiSoMUdpnrP85yHQQmC3WiDuI/zPIAL5qLrXMuAVg4fkzt9pcwqPnyhvM7jA1yNh5Az/fS2SP3U9T7rYiyx/RirCmvxxMo55Pjh3wxb/wZj3rEoUCpU3bfBRhz2wh3uMyQoaipeq06eh0/fOTJiOeuOXaWHqy/cOLTK5KyfWGyMvWUTAsH661xVcVKDDmX51tP170Krxs5ghjgoXxPO/78x4wflTfmSQtH8pFztq6dmXxQFVzZNDtmqidfuFp9s3bCBfiS/a3kUwwoqGMus5FnC9tujfd9sWeyZCMl5Q8A1luyjMga3ktqztRlNL8juTbf","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"error","e_ca_common_name_missing":"ne","e_ca_country_name_invalid":"pass","e_ca_country_name_missing":"pass","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"error","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"pass","e_ca_subject_field_empty":"pass","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"na","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"na","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"pass","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"pass","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"error","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"na","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"na","e_sub_cert_cert_policy_empty":"na","e_sub_cert_certificate_policies_missing":"na","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"na","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"na","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"na","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"na","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"pass","w_root_ca_contains_cert_policy":"pass","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_serial_number_low_entropy":"ne","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":false,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 14:28:14 UTC","fingerprint_sha256":"6c4cad504cbc561953af6ecac6e88398c423f740510c91bbd775831506184a1f","metadata":{"added_at":"2018-03-19 14:28:14 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-03-19 02:11:10 UTC","seen_in_scan":true,"source":"scan","updated_at":"2019-03-19 02:14:39 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"d313f57cf94a48014f75468748608fb89333769e","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["bet-12.com","mail.bet-12.com","www.bet-12.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"d313f57cf94a48014f75468748608fb89333769e"},"fingerprint_md5":"dac58ee8fc100aa40aa228226fab1595","fingerprint_sha1":"6600b3f2283df814942e99de87ac565ba98e74c7","fingerprint_sha256":"6c4cad504cbc561953af6ecac6e88398c423f740510c91bbd775831506184a1f","issuer":{"common_name":["bet-12.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=bet-12.com","names":["www.bet-12.com","bet-12.com","mail.bet-12.com"],"redacted":false,"serial_number":"5233233739","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"IgkqSOhP57t3APDbGbBlOtZVNkZCHBVN7dvSA54q5qSRhJFTa67epmNkP8U42ACAg8mtjW7j99Ak2HrF00/ZRAFczAa2x2VA1Jsod5Isx67wfgc8ROBp6LaFq089/MsAKMEw+xvHOHvnPJCtcJl//MG7p5ipZmF2YOJiwb/A/nVc9KCfN/2cduxDMayDJ3MufBl51BkALzU270C1pln1ISKDQpqsQ5hWpEKfzWVPOZrNW0LJPgI3n7TwQUcwxDZ5Q1C7VD6aW7f+/pdS6PyYgT3BNLtvMYtWgcStqOyBck5QGPhJPgDNW7vqycUq8bhG7lGfpPS9jQb6rXD31sYLKA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"0e65d6cc8df3304493078cd157b2e68e7c2ede3541f0929dbf3b1f365fefcbcb","subject":{"common_name":["bet-12.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=bet-12.com","subject_key_info":{"fingerprint_sha256":"79fbf6acde36074df4aec08e018f1f8e5c0f9680e1f6703944a2943fb4610f29","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"yVJTSunQUAcR8CArnp4GjzE2ligeHovy9tba3JjgvKX6uPaGeX3nOip+DnWM9ZV4ztDFKp/ZNkLZRjd7+VDow+FfI85gF2MuMC2PmPPUtbErLq95ZvllC58z/3oqB7LkFXDF1tFmfg0GSpOSbPPtfnRRhilaMtTGQUZ3AN3rj20MGiJAQpNA97Yx3LPfuPTAg1NSLFOgMlUufMCaQMsfn+MVunRzAZd2pcDk91KK2MemfSiKs0ZT0de4ESg9fEWWi7sSv6rwXb/oH+xYbnzwK/PbKqUovoAF/u6DtK4dudoG+68ckv7W2FTPB7coLPMpV1M6Uwxb7eMKS2bF1GYHSw=="}},"tbs_fingerprint":"4ec28481cb3eee5aa3a38b4cdc5ffff88d57b414ace691b5536addb59a7f05d4","tbs_noct_fingerprint":"4ec28481cb3eee5aa3a38b4cdc5ffff88d57b414ace691b5536addb59a7f05d4","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2019-03-18 13:05:13 UTC","length":"31536000","start":"2018-03-18 13:05:13 UTC"},"version":"3"},"precert":false,"raw":"MIIDMDCCAhigAwIBAgIFATfsz0swDQYJKoZIhvcNAQELBQAwFTETMBEGA1UEAwwKYmV0LTEyLmNvbTAeFw0xODAzMTgxMzA1MTNaFw0xOTAzMTgxMzA1MTNaMBUxEzARBgNVBAMMCmJldC0xMi5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJUlNK6dBQBxHwICuengaPMTaWKB4ei/L21trcmOC8pfq49oZ5fec6Kn4OdYz1lXjO0MUqn9k2QtlGN3v5UOjD4V8jzmAXYy4wLY+Y89S1sSsur3lm+WULnzP/eioHsuQVcMXW0WZ+DQZKk5Js8+1+dFGGKVoy1MZBRncA3euPbQwaIkBCk0D3tjHcs9+49MCDU1IsU6AyVS58wJpAyx+f4xW6dHMBl3alwOT3UorYx6Z9KIqzRlPR17gRKD18RZaLuxK/qvBdv+gf7FhufPAr89sqpSi+gAX+7oO0rh252gb7rxyS/tbYVM8Htygs8ylXUzpTDFvt4wpLZsXUZgdLAgMBAAGjgYYwgYMwHQYDVR0OBBYEFNMT9Xz5SkgBT3VGh0hgj7iTM3aeMB8GA1UdIwQYMBaAFNMT9Xz5SkgBT3VGh0hgj7iTM3aeMAkGA1UdEwQCMAAwNgYDVR0RBC8wLYIKYmV0LTEyLmNvbYIPbWFpbC5iZXQtMTIuY29tgg53d3cuYmV0LTEyLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAIgkqSOhP57t3APDbGbBlOtZVNkZCHBVN7dvSA54q5qSRhJFTa67epmNkP8U42ACAg8mtjW7j99Ak2HrF00/ZRAFczAa2x2VA1Jsod5Isx67wfgc8ROBp6LaFq089/MsAKMEw+xvHOHvnPJCtcJl//MG7p5ipZmF2YOJiwb/A/nVc9KCfN/2cduxDMayDJ3MufBl51BkALzU270C1pln1ISKDQpqsQ5hWpEKfzWVPOZrNW0LJPgI3n7TwQUcwxDZ5Q1C7VD6aW7f+/pdS6PyYgT3BNLtvMYtWgcStqOyBck5QGPhJPgDNW7vqycUq8bhG7lGfpPS9jQb6rXD31sYLKA==","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:25:53 UTC","fingerprint_sha256":"e927850d6d5b9f9a266adbff773f9fd48eb815a743b6c6b5d56d15bfd948143a","metadata":{"added_at":"2018-03-19 14:25:53 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-11-25 01:47:45 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-11-25 01:47:55 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"09a78804aa1b51b6947c853b734a5d46fe39b857","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["streichel.me","mail.streichel.me","www.streichel.me"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"09a78804aa1b51b6947c853b734a5d46fe39b857"},"fingerprint_md5":"082032fe9645c170c31690cddfdb009e","fingerprint_sha1":"cae93d20b3cac2a3b8e88d1ec2c6a2cf0c992b93","fingerprint_sha256":"e927850d6d5b9f9a266adbff773f9fd48eb815a743b6c6b5d56d15bfd948143a","issuer":{"common_name":["streichel.me"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=streichel.me","names":["streichel.me","mail.streichel.me","www.streichel.me"],"redacted":false,"serial_number":"49974560","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"M4YlZ4P8hJTFjtgMxPleTWl5lfKPsNCUSgE//rvZes8gZh0JozZzEh/wTBXMKgTgU9Gfkr0E7AcR/EAMqP04ASk/QnrS5MJ15dh2+0IOivh5LBfrVj+uO4p/YeD9M/FFmt0PcaWy7OWJlRu+UldLY9cWPDKaCr4wpax6BMKUM0N8cB7DAubha84DDNIv3S5HBcyiXoGw+dR45o3ThTfQx2zhGgOPfDasq2XJ+tLQF4fbhScpeOKtmDrcm9u/cEIhkAhray7lIEZlzSj8PvwxvRgbQkF/iO9mwQHOBfAg4cYX+nQ9JiuflOdwqM5OywI1Z6gCVCIglKWvyVBuDCsKLQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"c60488a5af636dde0f8fb204133537d228f3944bc277b1c33674559c496a3c7b","subject":{"common_name":["streichel.me"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=streichel.me","subject_key_info":{"fingerprint_sha256":"cb612269c1511ff10c015085576ca1ae34176549fbdd3a4408203628d5edc289","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"n6uLvlL+26dh7RZm2cEsHZjuPw0PtW0uKGCBnre080SRijtInOllfdRqzGc8Ijr9qV/F8dV9u7Y77lEYlr6mH7Zgp371mNRsGxh3OIJBezZSakVtO8CI6hqDnABcyEK9jrmFT3Tzl6ZnoC23TICPBq/O9v5Ktrrm9RJ9Oj5RzLoBOvC5EXAQ9KzxWEst4+AWiwF8D6gcP8X31HzPavA8MCkeVfOXKMMltBUMsisAaX42+VY7vuwpTAp9imB4xMKSutS8sASwFxSFq/5r4QIKxCQkJ2Rh4tlwYz58EX4IVEs882SJpdqQ2L9Izvhh/KUKjLDAsnc+CvtdvyCFpXtUSQ=="}},"tbs_fingerprint":"6b5390268c5468436234ab1b2c29370fe849fe72605cde3bb53827d287901a99","tbs_noct_fingerprint":"6b5390268c5468436234ab1b2c29370fe849fe72605cde3bb53827d287901a99","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-11-24 09:14:35 UTC","length":"31536000","start":"2017-11-24 09:14:35 UTC"},"version":"3"},"precert":false,"raw":"MIIDOTCCAiGgAwIBAgIEAvqNIDANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxzdHJlaWNoZWwubWUwHhcNMTcxMTI0MDkxNDM1WhcNMTgxMTI0MDkxNDM1WjAXMRUwEwYDVQQDDAxzdHJlaWNoZWwubWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCfq4u+Uv7bp2HtFmbZwSwdmO4/DQ+1bS4oYIGet7TzRJGKO0ic6WV91GrMZzwiOv2pX8Xx1X27tjvuURiWvqYftmCnfvWY1GwbGHc4gkF7NlJqRW07wIjqGoOcAFzIQr2OuYVPdPOXpmegLbdMgI8Gr872/kq2uub1En06PlHMugE68LkRcBD0rPFYSy3j4BaLAXwPqBw/xffUfM9q8DwwKR5V85cowyW0FQyyKwBpfjb5Vju+7ClMCn2KYHjEwpK61LywBLAXFIWr/mvhAgrEJCQnZGHi2XBjPnwRfghUSzzzZIml2pDYv0jO+GH8pQqMsMCydz4K+12/IIWle1RJAgMBAAGjgYwwgYkwHQYDVR0OBBYEFAmniASqG1G2lHyFO3NKXUb+ObhXMB8GA1UdIwQYMBaAFAmniASqG1G2lHyFO3NKXUb+ObhXMAkGA1UdEwQCMAAwPAYDVR0RBDUwM4IMc3RyZWljaGVsLm1lghFtYWlsLnN0cmVpY2hlbC5tZYIQd3d3LnN0cmVpY2hlbC5tZTANBgkqhkiG9w0BAQsFAAOCAQEAM4YlZ4P8hJTFjtgMxPleTWl5lfKPsNCUSgE//rvZes8gZh0JozZzEh/wTBXMKgTgU9Gfkr0E7AcR/EAMqP04ASk/QnrS5MJ15dh2+0IOivh5LBfrVj+uO4p/YeD9M/FFmt0PcaWy7OWJlRu+UldLY9cWPDKaCr4wpax6BMKUM0N8cB7DAubha84DDNIv3S5HBcyiXoGw+dR45o3ThTfQx2zhGgOPfDasq2XJ+tLQF4fbhScpeOKtmDrcm9u/cEIhkAhray7lIEZlzSj8PvwxvRgbQkF/iO9mwQHOBfAg4cYX+nQ9JiuflOdwqM5OywI1Z6gCVCIglKWvyVBuDCsKLQ==","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:16:51 UTC","fingerprint_sha256":"ac493e0ee35d2528d49c4df51fa3e4bd9381ab3fdc299e0bdac6dc131260681c","metadata":{"added_at":"2018-03-19 14:16:51 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-01-19 01:53:08 UTC","seen_in_scan":true,"source":"scan","updated_at":"2019-01-19 01:53:08 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"18fd2f6d4317857b6e4a9872affe818e6bf54a18","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["globalexpressmfginc.com","mail.globalexpressmfginc.com","www.globalexpressmfginc.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"18fd2f6d4317857b6e4a9872affe818e6bf54a18"},"fingerprint_md5":"9b7c43536429f3466e804d62b678c22c","fingerprint_sha1":"fb5c8eb6153969ab82fe936a2a9da4c2a8351b29","fingerprint_sha256":"ac493e0ee35d2528d49c4df51fa3e4bd9381ab3fdc299e0bdac6dc131260681c","issuer":{"common_name":["globalexpressmfginc.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=globalexpressmfginc.com","names":["globalexpressmfginc.com","mail.globalexpressmfginc.com","www.globalexpressmfginc.com"],"redacted":false,"serial_number":"8850759805","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"IYz0QALi4/Hj7C7KdCUUF5j6SqsWAGuYycY4Y9AJDtHGX1kZeVZij8bus+VeBgXn+G5SX41tNYGMrxkZ834YrT9cmNZqVG+ay4e8U202F64ypLbOACjkeOJsvkZXH4ZJvfiMzkHpr8cbUjCWTB/bkIv2iaZkxZzFyIOd+qgVRg7y0YMbS3zE5nssd0yH4ej4UUimyt0qZH6Y+83YL73i7wNP42AMIKbC5aPWQsfMNzcvKxAGuTtZp4IzQDHFRGJAkMgMmgK/kLKMHS/Jid1K79wKvA4Wu5GSUdh2pmVS31YfClb+6ImKKxUKASWc8Zw650Gxu0Ls2cAnofs2RawTRg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b94545d4de0f5e458c38d4792008c823a81e46d54bc6d93fe3e9395ce0239986","subject":{"common_name":["globalexpressmfginc.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=globalexpressmfginc.com","subject_key_info":{"fingerprint_sha256":"1a5a58eaefd750884f70f47110fe6060b924c1d514b0de9bc32e18c156094014","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"m4zIDsobEAQBvtmOi64u2IS0iGwwtTOxaaLVKiMqhVbYkFUkA1iT8Xmym8MMBJltYCHTJw9cVPpmeiNQwj9jB8EuOdzI+F3H3Jt5guKI68anXth/WVJkaTeE/ROp1aRHUBgrSKLN1a44Ui0D7znu/FoxFCmwGYdSLRleQgQTRWs+OJ4y41lJuaL8yWEhHgDQz65uO+Zso9UmodnVDdYuxSEEjNUwzjrt0GuEWQAFV3WsaQ3KYDhex7DpJGMzun2+lkpMdlxugNU3gB7/0rNzqLdhJcEByiWrFzUef/abMcB8DgmaulhjVoRVThCP1xsqzMn0D1AAJmbDkHVNsvXd8Q=="}},"tbs_fingerprint":"7fd33c95e34961d191238c0d0182274204e3151538a16efc45c4ce840e4866ed","tbs_noct_fingerprint":"7fd33c95e34961d191238c0d0182274204e3151538a16efc45c4ce840e4866ed","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2019-01-18 17:54:09 UTC","length":"31536000","start":"2018-01-18 17:54:09 UTC"},"version":"3"},"precert":false,"raw":"MIIDcTCCAlmgAwIBAgIFAg+L4H0wDQYJKoZIhvcNAQELBQAwIjEgMB4GA1UEAwwXZ2xvYmFsZXhwcmVzc21mZ2luYy5jb20wHhcNMTgwMTE4MTc1NDA5WhcNMTkwMTE4MTc1NDA5WjAiMSAwHgYDVQQDDBdnbG9iYWxleHByZXNzbWZnaW5jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJuMyA7KGxAEAb7ZjouuLtiEtIhsMLUzsWmi1SojKoVW2JBVJANYk/F5spvDDASZbWAh0ycPXFT6ZnojUMI/YwfBLjncyPhdx9ybeYLiiOvGp17Yf1lSZGk3hP0TqdWkR1AYK0iizdWuOFItA+857vxaMRQpsBmHUi0ZXkIEE0VrPjieMuNZSbmi/MlhIR4A0M+ubjvmbKPVJqHZ1Q3WLsUhBIzVMM467dBrhFkABVd1rGkNymA4Xsew6SRjM7p9vpZKTHZcboDVN4Ae/9Kzc6i3YSXBAcolqxc1Hn/2mzHAfA4JmrpYY1aEVU4Qj9cbKszJ9A9QACZmw5B1TbL13fECAwEAAaOBrTCBqjAdBgNVHQ4EFgQUGP0vbUMXhXtuSphyr/6Bjmv1ShgwHwYDVR0jBBgwFoAUGP0vbUMXhXtuSphyr/6Bjmv1ShgwCQYDVR0TBAIwADBdBgNVHREEVjBUghdnbG9iYWxleHByZXNzbWZnaW5jLmNvbYIcbWFpbC5nbG9iYWxleHByZXNzbWZnaW5jLmNvbYIbd3d3Lmdsb2JhbGV4cHJlc3NtZmdpbmMuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQAhjPRAAuLj8ePsLsp0JRQXmPpKqxYAa5jJxjhj0AkO0cZfWRl5VmKPxu6z5V4GBef4blJfjW01gYyvGRnzfhitP1yY1mpUb5rLh7xTbTYXrjKkts4AKOR44my+Rlcfhkm9+IzOQemvxxtSMJZMH9uQi/aJpmTFnMXIg536qBVGDvLRgxtLfMTmeyx3TIfh6PhRSKbK3Spkfpj7zdgvveLvA0/jYAwgpsLlo9ZCx8w3Ny8rEAa5O1mngjNAMcVEYkCQyAyaAr+QsowdL8mJ3Urv3Aq8Dha7kZJR2HamZVLfVh8KVv7oiYorFQoBJZzxnDrnQbG7QuzZwCeh+zZFrBNG","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:26:01 UTC","fingerprint_sha256":"1a5f468f4c844852bd9651e2f1ed0da261477005508e948b6e38c0463ae8c7cb","metadata":{"added_at":"2018-03-19 14:26:01 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-12-20 01:52:26 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-12-20 01:52:26 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"9a5bd1a8f4029e5e9ae6a5e3495c7d18ab07850f","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["thrillerlivetheatretickets.com","mail.thrillerlivetheatretickets.com","www.thrillerlivetheatretickets.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"9a5bd1a8f4029e5e9ae6a5e3495c7d18ab07850f"},"fingerprint_md5":"97d5f83f864008143e389bc4ecb1310c","fingerprint_sha1":"2f55f49678b4534f84b3e91d81de49940f4f9add","fingerprint_sha256":"1a5f468f4c844852bd9651e2f1ed0da261477005508e948b6e38c0463ae8c7cb","issuer":{"common_name":["thrillerlivetheatretickets.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=thrillerlivetheatretickets.com","names":["thrillerlivetheatretickets.com","mail.thrillerlivetheatretickets.com","www.thrillerlivetheatretickets.com"],"redacted":false,"serial_number":"5864706109","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"dtqzjoCRLe4ViC4PXu9YyJ0aM/cFef0LQ04vkRjN5LzPsiuGjytY5v7AtQU1J3oY38xCYo2kIx+5Qxsrp8NqJ0h/R1bOFlyLrOyPfyPhreGqlW5QZtu5xhiA/FWXA6r887wTCZQynPHebtBOtMNkNXz3hWJ9ptKfa0zEdQWW3k1p14p8AoPlHrsIswaWBUocOJ8/g0s4+2UeQdvmPeWhD7uvceqeKXSWRO+rwHlxUWIqxH3oCcckEnm4PM0DN7A+re8XvyF6g0ieKXQVvYYRUWY0+xAHE1K87r4q5ShQxu33H5c40WYTuKSVwggnvOZrwzTq9rtAQwDqhW6iS+Nwgw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"60d54a158e3674ffa8a5db0f9e34e8b4bb5d9d6dfd8374650ed36fd01670c5a4","subject":{"common_name":["thrillerlivetheatretickets.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=thrillerlivetheatretickets.com","subject_key_info":{"fingerprint_sha256":"353a5e37c6796cb087a1b09af838a8b07668d65874e85881087a3d50f8c60ced","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"ug/2idGJJqQbTiFlxgRWyWgG0zHHkF1XmXmmkSslirV4PdsIuthSEHV//h/52qJZY6825i55+jZG7ErvlYrx6h1j9u9BG+QciWb5vQXDp4Vx0qjmsJRMd8AsORNauiON29opTwlZ7RCyMsdtjJGSX5UhmZoTyvEfZhzBYrexn4cUolSGF+Tjn6w1ZgoPwVwr4WFLaOD0Dp9d6OhZEERWXOe7wXon+rS3+Gf4eF3Mp+MAroa641si5ohlOOFKVIzwsI/RI2t5Sd4Zm0J/g2lo2GQF+XQ5xcd3Qfw1gS+hyn8txlmUc7lLZFysPgSuJTPTquX9f85Gx18m2fn6jU+t7w=="}},"tbs_fingerprint":"7a1ee3f34750aa46cf7796609cb095f567b48819f2df7592b7eb441027386d65","tbs_noct_fingerprint":"7a1ee3f34750aa46cf7796609cb095f567b48819f2df7592b7eb441027386d65","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-12-19 09:49:47 UTC","length":"31536000","start":"2017-12-19 09:49:47 UTC"},"version":"3"},"precert":false,"raw":"MIIDlDCCAnygAwIBAgIFAV2QUD0wDQYJKoZIhvcNAQELBQAwKTEnMCUGA1UEAwwedGhyaWxsZXJsaXZldGhlYXRyZXRpY2tldHMuY29tMB4XDTE3MTIxOTA5NDk0N1oXDTE4MTIxOTA5NDk0N1owKTEnMCUGA1UEAwwedGhyaWxsZXJsaXZldGhlYXRyZXRpY2tldHMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAug/2idGJJqQbTiFlxgRWyWgG0zHHkF1XmXmmkSslirV4PdsIuthSEHV//h/52qJZY6825i55+jZG7ErvlYrx6h1j9u9BG+QciWb5vQXDp4Vx0qjmsJRMd8AsORNauiON29opTwlZ7RCyMsdtjJGSX5UhmZoTyvEfZhzBYrexn4cUolSGF+Tjn6w1ZgoPwVwr4WFLaOD0Dp9d6OhZEERWXOe7wXon+rS3+Gf4eF3Mp+MAroa641si5ohlOOFKVIzwsI/RI2t5Sd4Zm0J/g2lo2GQF+XQ5xcd3Qfw1gS+hyn8txlmUc7lLZFysPgSuJTPTquX9f85Gx18m2fn6jU+t7wIDAQABo4HCMIG/MB0GA1UdDgQWBBSaW9Go9AKeXprmpeNJXH0YqweFDzAfBgNVHSMEGDAWgBSaW9Go9AKeXprmpeNJXH0YqweFDzAJBgNVHRMEAjAAMHIGA1UdEQRrMGmCHnRocmlsbGVybGl2ZXRoZWF0cmV0aWNrZXRzLmNvbYIjbWFpbC50aHJpbGxlcmxpdmV0aGVhdHJldGlja2V0cy5jb22CInd3dy50aHJpbGxlcmxpdmV0aGVhdHJldGlja2V0cy5jb20wDQYJKoZIhvcNAQELBQADggEBAHbas46AkS3uFYguD17vWMidGjP3BXn9C0NOL5EYzeS8z7Irho8rWOb+wLUFNSd6GN/MQmKNpCMfuUMbK6fDaidIf0dWzhZci6zsj38j4a3hqpVuUGbbucYYgPxVlwOq/PO8EwmUMpzx3m7QTrTDZDV894VifabSn2tMxHUFlt5NadeKfAKD5R67CLMGlgVKHDifP4NLOPtlHkHb5j3loQ+7r3Hqnil0lkTvq8B5cVFiKsR96AnHJBJ5uDzNAzewPq3vF78heoNInil0Fb2GEVFmNPsQBxNSvO6+KuUoUMbt9x+XONFmE7iklcIIJ7zma8M06va7QEMA6oVuokvjcIM=","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:17:29 UTC","fingerprint_sha256":"402efa1edfeb09cbd7b024452c61ee067c83f5b4ab298a5ac9c5e60f0610b148","metadata":{"added_at":"2018-03-19 14:17:29 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-01-13 02:01:41 UTC","seen_in_scan":true,"source":"scan","updated_at":"2019-01-13 02:01:43 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"4aeacd817c6ba2c2de8e63e22c625cdc1b7092b9","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["frankstanks.net","mail.frankstanks.net","www.frankstanks.net"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"4aeacd817c6ba2c2de8e63e22c625cdc1b7092b9"},"fingerprint_md5":"de9f66f0d840c5526544cb5225d3e8b3","fingerprint_sha1":"b860e4edc7c809c25cbcfa8d05716c2d1c631045","fingerprint_sha256":"402efa1edfeb09cbd7b024452c61ee067c83f5b4ab298a5ac9c5e60f0610b148","issuer":{"common_name":["frankstanks.net"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=frankstanks.net","names":["frankstanks.net","mail.frankstanks.net","www.frankstanks.net"],"redacted":false,"serial_number":"8929113363","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"f1Cly/nHNEHC15zwvygJqYQhjMpFKXIix9/hPICoEWYcPz04syWhxCaPpAFIRrJy4KNALy/HrNRqzhrc4SnwDo/dgGOlJKrGXCeP6ThxtiQjyX+PN9s42xSYL82vaxUvpHCcgOcjLVcFya54SQRC97EaXWVfHsnz4ef5gOkgyoFhqa75ZMqfU4y6kuK70WMKOQ1ikZxBzSKwIxERGmXv6AHFqAF3K5165BD1fcUAR9vwDIb3M8bFSlqUwqWwyOMLDLLh5XuptWLImm8Bsfr32O7Ysq67Y24BaiPM5Sh5UkouGy38nY2fO25NNISHZr943fF4c8VKn71+nSbHxYf6Xg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"ad27c5b9d03c9b103bd665ff118c0e9ef979287f9f2612ded4d0d2c3185d6b6e","subject":{"common_name":["frankstanks.net"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=frankstanks.net","subject_key_info":{"fingerprint_sha256":"42343d830f36eb3dc5e6221c1a90279e9d465099d2aa93a19b046c717ee53783","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"pDe8Tg4Xnh4t17sdPUzEmXMu92LH5d9ySvg8gZyu/tuvUOQqmNqMXBNlOgspwNdkseTpL3FtpWUCgoMYKlXh6Fdo/HPd5F1r2Zfj69JSeqQ9hDYdB4hb9yE3sZ6K4FjgojZzvBLrz/BgO4cqsOjOI8roY4ugRlBGe/+7vgHNIHcCn1qaoRLMmFy+IhOaUmo4SUfhhXozHgIbwhR/Atrcd35X4SOG4jaUmD8GeQ6GA37H0tz6nRxigJe9g/9hEQGayAmSpGXPn2gPOiCbbZnp+hMfa+wsaypJWkvvT09/NuRREgZSc9dQoqwW+OvpN02ZNNJrdwk3+dgI2eVYiSuJ7w=="}},"tbs_fingerprint":"823e92a6a8dc07d89e8734091b891d1ebb3dcc0d16e2e4bcc3e0c5bddbed2431","tbs_noct_fingerprint":"823e92a6a8dc07d89e8734091b891d1ebb3dcc0d16e2e4bcc3e0c5bddbed2431","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2019-01-12 16:37:28 UTC","length":"31536000","start":"2018-01-12 16:37:28 UTC"},"version":"3"},"precert":false,"raw":"MIIDSTCCAjGgAwIBAgIFAhQ3dRMwDQYJKoZIhvcNAQELBQAwGjEYMBYGA1UEAwwPZnJhbmtzdGFua3MubmV0MB4XDTE4MDExMjE2MzcyOFoXDTE5MDExMjE2MzcyOFowGjEYMBYGA1UEAwwPZnJhbmtzdGFua3MubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApDe8Tg4Xnh4t17sdPUzEmXMu92LH5d9ySvg8gZyu/tuvUOQqmNqMXBNlOgspwNdkseTpL3FtpWUCgoMYKlXh6Fdo/HPd5F1r2Zfj69JSeqQ9hDYdB4hb9yE3sZ6K4FjgojZzvBLrz/BgO4cqsOjOI8roY4ugRlBGe/+7vgHNIHcCn1qaoRLMmFy+IhOaUmo4SUfhhXozHgIbwhR/Atrcd35X4SOG4jaUmD8GeQ6GA37H0tz6nRxigJe9g/9hEQGayAmSpGXPn2gPOiCbbZnp+hMfa+wsaypJWkvvT09/NuRREgZSc9dQoqwW+OvpN02ZNNJrdwk3+dgI2eVYiSuJ7wIDAQABo4GVMIGSMB0GA1UdDgQWBBRK6s2BfGuiwt6OY+IsYlzcG3CSuTAfBgNVHSMEGDAWgBRK6s2BfGuiwt6OY+IsYlzcG3CSuTAJBgNVHRMEAjAAMEUGA1UdEQQ+MDyCD2ZyYW5rc3RhbmtzLm5ldIIUbWFpbC5mcmFua3N0YW5rcy5uZXSCE3d3dy5mcmFua3N0YW5rcy5uZXQwDQYJKoZIhvcNAQELBQADggEBAH9Qpcv5xzRBwtec8L8oCamEIYzKRSlyIsff4TyAqBFmHD89OLMlocQmj6QBSEaycuCjQC8vx6zUas4a3OEp8A6P3YBjpSSqxlwnj+k4cbYkI8l/jzfbONsUmC/Nr2sVL6RwnIDnIy1XBcmueEkEQvexGl1lXx7J8+Hn+YDpIMqBYamu+WTKn1OMupLiu9FjCjkNYpGcQc0isCMRERpl7+gBxagBdyudeuQQ9X3FAEfb8AyG9zPGxUpalMKlsMjjCwyy4eV7qbViyJpvAbH699ju2LKuu2NuAWojzOUoeVJKLhst/J2NnztuTTSEh2a/eN3xeHPFSp+9fp0mx8WH+l4=","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 16:14:18 UTC","fingerprint_sha256":"4bc01387e28b8a06f12d065dc203b440e07fa662aaaaa88431c933d2d9ff996f","metadata":{"added_at":"2018-03-19 16:14:18 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 06:44:01 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-28 09:17:56 UTC"},"parents":[],"parsed":{"extensions":{"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[]},"fingerprint_md5":"bb21938f0131aac8f78eec1e53072847","fingerprint_sha1":"094a9e19447971fdff3e38013ae208fdc72ca700","fingerprint_sha256":"4bc01387e28b8a06f12d065dc203b440e07fa662aaaaa88431c933d2d9ff996f","issuer":{"common_name":["c-q130-u1500-180.webazilla.com"],"country":["UK"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Exim Developers"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=UK, O=Exim Developers, CN=c-q130-u1500-180.webazilla.com","names":["c-q130-u1500-180.webazilla.com"],"redacted":false,"serial_number":"0","signature":{"self_signed":true,"signature_algorithm":{"name":"MD5-RSA","oid":"1.2.840.113549.1.1.4"},"valid":false,"value":"mnHEOQgPlr/ZQ6CJo7c7H8MfisFMkJ7zkMKhouJiQ/u8rlrhJoHommIrHlGBZ/5N6UmnEtyOsoOJh/2z0AzyxlAsM6KE/msRPF6GJl5yOuL98WWGZ916L6r9zFQZOhOZj4enjweIFytTwQwwCVr9BaYC387qhYaOrAif9+2kqW8="},"signature_algorithm":{"name":"MD5-RSA","oid":"1.2.840.113549.1.1.4"},"spki_subject_fingerprint":"b9acc60e52ef391eab37d0c49b4e5db8ed20e3508ea9cd05b068601b0c8bb786","subject":{"common_name":["c-q130-u1500-180.webazilla.com"],"country":["UK"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Exim Developers"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=UK, O=Exim Developers, CN=c-q130-u1500-180.webazilla.com","subject_key_info":{"fingerprint_sha256":"ae3ea794aa6b42de0f5381d44463759c6799de584d7a243c82978d6b25230ba6","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"vlPuvZFJ/LTdmcR/sB1hm/IefSyz2q/CtGUmMfJWeJPN9xugC/oyxSe+LRDJW+vnN/N4gDjtgg3C2xGHHD/Dauh03yn/bvY5EfhqkQSKh4+KI2olg0Fs3/B9sL1PZKn/2uotHie6g50yDgVCJnduy1RdPRTFsmS12G+PXPZk4R0="}},"tbs_fingerprint":"e9380f7b13a2a89a787ec4ab6ea0ed84fdee7f092c91b006ae9da78b481c4b54","tbs_noct_fingerprint":"34be82d180e44f8cbe8c47301ccb22c8e20d3d65978de490ce0fb6117e0cefd9","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-03-19 17:14:17 UTC","length":"3600","start":"2018-03-19 16:14:17 UTC"},"version":"3"},"precert":false,"raw":"MIICFDCCAX2gAwIBAgIBADANBgkqhkiG9w0BAQQFADBQMQswCQYDVQQGEwJVSzEYMBYGA1UEChMPRXhpbSBEZXZlbG9wZXJzMScwJQYDVQQDEx5jLXExMzAtdTE1MDAtMTgwLndlYmF6aWxsYS5jb20wHhcNMTgwMzE5MTYxNDE3WhcNMTgwMzE5MTcxNDE3WjBQMQswCQYDVQQGEwJVSzEYMBYGA1UEChMPRXhpbSBEZXZlbG9wZXJzMScwJQYDVQQDEx5jLXExMzAtdTE1MDAtMTgwLndlYmF6aWxsYS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL5T7r2RSfy03ZnEf7AdYZvyHn0ss9qvwrRlJjHyVniTzfcboAv6MsUnvi0QyVvr5zfzeIA47YINwtsRhxw/w2rodN8p/272ORH4apEEioePiiNqJYNBbN/wfbC9T2Sp/9rqLR4nuoOdMg4FQiZ3bstUXT0UxbJktdhvj1z2ZOEdAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAmnHEOQgPlr/ZQ6CJo7c7H8MfisFMkJ7zkMKhouJiQ/u8rlrhJoHommIrHlGBZ/5N6UmnEtyOsoOJh/2z0AzyxlAsM6KE/msRPF6GJl5yOuL98WWGZ916L6r9zFQZOhOZj4enjweIFytTwQwwCVr9BaYC387qhYaOrAif9+2kqW8=","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"na","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"error","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"na","e_path_len_constraint_zero_or_less":"na","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"error","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"error","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"error","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"error","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:23:17 UTC","fingerprint_sha256":"0ad60cd8afd6e1a0d565041e3bbe93c8a94174b5b6ba0d9988dad11a05a1ff36","metadata":{"added_at":"2018-03-19 14:23:17 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-10-09 01:48:51 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-10-09 06:55:23 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"a65f4768366fdf46fae54f1b14d67dbe62dece47","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["moviebuzznow.prophysios.com","mail.moviebuzznow.com","moviebuzznow.com","www.moviebuzznow.com","www.moviebuzznow.prophysios.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"a65f4768366fdf46fae54f1b14d67dbe62dece47"},"fingerprint_md5":"769758a1947c1a4e23a3d9d407577d08","fingerprint_sha1":"3be438e58d7a719379dad237bc9e7bde110dca63","fingerprint_sha256":"0ad60cd8afd6e1a0d565041e3bbe93c8a94174b5b6ba0d9988dad11a05a1ff36","issuer":{"common_name":["moviebuzznow.prophysios.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=moviebuzznow.prophysios.com","names":["moviebuzznow.prophysios.com","mail.moviebuzznow.com","moviebuzznow.com","www.moviebuzznow.com","www.moviebuzznow.prophysios.com"],"redacted":false,"serial_number":"6376739805","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"l08YehaiqLzyGNinPErHXIODDF1zWybzgDmsGFuEWTkyCkGxdAqZItXGNdz++I8jSkNyWz6IFwOAcv3BvoieVJLvuRvosdpnKjgRFT2MTI1aMYj83GQr/xahFIPLhYHW5DgZGyJ7OQdXaO86RGmfYfTRLT6aWsNFkPLvBETy3ENal6XTvJJXZxkCw9Zg8uD39yZOJVdunJHv6bZo0liYlCVSDTbLyhlbl7PLU70obLDcBAHZ73Iun+JrscQ2ywkxcBUck4yRSyLrUmtNv59CGIlzkj/IS3DVw4mJG8GtT30k2G4s5imIeFg84B3lh64aAVUaS3x4ICGpZFT0cO8ydQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d42511a871bc5a9330bc92b477cc2638695af2d48f37ffa45bb8754649c9218c","subject":{"common_name":["moviebuzznow.prophysios.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=moviebuzznow.prophysios.com","subject_key_info":{"fingerprint_sha256":"cb4e51ece07189466ce35d449f89abf1b633d7dec005e7792aef67120705ffd1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"mpwm/6AC7O6QcpD7pE/60JP/GFYjUZYCHkTfMNa13QMvIRmFYNgnQKR3447P6gM0VNOAp/aC0d7VI1qr1Qb3fnZhdbcuwarDReZzgdGGPdNrM6lxlZgzynATjpxMtxB3U8gqG2kC84NtcaQWv9G8/+IfGxmHYUgtYQR8sNDKXMhYXE0hAyC8JitXf/Ibed6vNTQwBBKepT0p2I7VD2npwnSQgenq1zOMbxdGawS8UeTKiIQQleeq/mhfxnw6OQJUeen22j1fqBeq+eBzJauUbZzLg23BDN8NNJV5gWoQcq/Y4SFkshRaGbDONmXNl+BTJi/kbly6q/2AjELwKK6Z1w=="}},"tbs_fingerprint":"9593366e3c3f283685806984f52489d665f5339d94249889f0e8984a69d4a5cb","tbs_noct_fingerprint":"9593366e3c3f283685806984f52489d665f5339d94249889f0e8984a69d4a5cb","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-09-08 02:52:15 UTC","length":"31536000","start":"2017-09-08 02:52:15 UTC"},"version":"3"},"precert":false,"raw":"MIIDozCCAougAwIBAgIFAXwVU90wDQYJKoZIhvcNAQELBQAwJjEkMCIGA1UEAwwbbW92aWVidXp6bm93LnByb3BoeXNpb3MuY29tMB4XDTE3MDkwODAyNTIxNVoXDTE4MDkwODAyNTIxNVowJjEkMCIGA1UEAwwbbW92aWVidXp6bm93LnByb3BoeXNpb3MuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmpwm/6AC7O6QcpD7pE/60JP/GFYjUZYCHkTfMNa13QMvIRmFYNgnQKR3447P6gM0VNOAp/aC0d7VI1qr1Qb3fnZhdbcuwarDReZzgdGGPdNrM6lxlZgzynATjpxMtxB3U8gqG2kC84NtcaQWv9G8/+IfGxmHYUgtYQR8sNDKXMhYXE0hAyC8JitXf/Ibed6vNTQwBBKepT0p2I7VD2npwnSQgenq1zOMbxdGawS8UeTKiIQQleeq/mhfxnw6OQJUeen22j1fqBeq+eBzJauUbZzLg23BDN8NNJV5gWoQcq/Y4SFkshRaGbDONmXNl+BTJi/kbly6q/2AjELwKK6Z1wIDAQABo4HXMIHUMB0GA1UdDgQWBBSmX0doNm/fRvrlTxsU1n2+Yt7ORzAfBgNVHSMEGDAWgBSmX0doNm/fRvrlTxsU1n2+Yt7ORzAJBgNVHRMEAjAAMIGGBgNVHREEfzB9ghttb3ZpZWJ1enpub3cucHJvcGh5c2lvcy5jb22CFW1haWwubW92aWVidXp6bm93LmNvbYIQbW92aWVidXp6bm93LmNvbYIUd3d3Lm1vdmllYnV6em5vdy5jb22CH3d3dy5tb3ZpZWJ1enpub3cucHJvcGh5c2lvcy5jb20wDQYJKoZIhvcNAQELBQADggEBAJdPGHoWoqi88hjYpzxKx1yDgwxdc1sm84A5rBhbhFk5MgpBsXQKmSLVxjXc/viPI0pDcls+iBcDgHL9wb6InlSS77kb6LHaZyo4ERU9jEyNWjGI/NxkK/8WoRSDy4WB1uQ4GRsiezkHV2jvOkRpn2H00S0+mlrDRZDy7wRE8txDWpel07ySV2cZAsPWYPLg9/cmTiVXbpyR7+m2aNJYmJQlUg02y8oZW5ezy1O9KGyw3AQB2e9yLp/ia7HENssJMXAVHJOMkUsi61JrTb+fQhiJc5I/yEtw1cOJiRvBrU99JNhuLOYpiHhYPOAd5YeuGgFVGkt8eCAhqWRU9HDvMnU=","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 16:25:12 UTC","fingerprint_sha256":"a9a0a2ba1b759a13370e2ea2f23389dba0aaac74064ba50d12c0966b2f7e89d2","metadata":{"added_at":"2018-03-19 16:25:12 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 23:52:05 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-29 08:19:46 UTC"},"parents":[],"parsed":{"extensions":{"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[]},"fingerprint_md5":"447a6378b35059d8b50ad97a3dc43127","fingerprint_sha1":"527930b30e36591a787b504b7cf60163fd946212","fingerprint_sha256":"a9a0a2ba1b759a13370e2ea2f23389dba0aaac74064ba50d12c0966b2f7e89d2","issuer":{"common_name":["cc1-elizium.vds.colocall.com"],"country":["UK"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Exim Developers"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=UK, O=Exim Developers, CN=cc1-elizium.vds.colocall.com","names":["cc1-elizium.vds.colocall.com"],"redacted":false,"serial_number":"0","signature":{"self_signed":true,"signature_algorithm":{"name":"MD5-RSA","oid":"1.2.840.113549.1.1.4"},"valid":false,"value":"Ykg5PYYKlztu9Tt+zcp6PzH6a1KpFNs+KqKX3z84eq+43EGqCPP2OYaoWv7JsJsOPPgW9mKz9mCYxJ1vOLcXeKRNtVbQw801ahX4MeyB7KQhrjQULDnV7zAztBl9VwEauaUoJLD/AoSW1hRv+uvguawxF1SffpapLC2InwR+QUg="},"signature_algorithm":{"name":"MD5-RSA","oid":"1.2.840.113549.1.1.4"},"spki_subject_fingerprint":"1d18ae261ce9baa9258c7c331a4c36b836801fd8b78413044f8cf81532b1b0e8","subject":{"common_name":["cc1-elizium.vds.colocall.com"],"country":["UK"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Exim Developers"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=UK, O=Exim Developers, CN=cc1-elizium.vds.colocall.com","subject_key_info":{"fingerprint_sha256":"d8e38e90c52509ca3ea90cc179f8e0627e7660685fc11e1373ad5ae8e603b362","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"5lYjMkO3PoU581YtBXLRIMPZCVA7PRmjj4BqCqtFq58jsoyopmAno/vwHDy+WY9nTwdQOM/Kish8QumyTrYHejzXIukTzDFVTbZFascp0plsF4LTflAzTZpw2NDeuwhcWJh+4rruFTppiHoSuOZFqNn9LmnXTMfnKJ8n2ckp2G0="}},"tbs_fingerprint":"bc85d3ab1aaa5d2239349b3b0f7bc5738c76dce0118c0aed64585233b396d0b0","tbs_noct_fingerprint":"0c314c52ae94fb849ec75a0e0ef46337dda9d38ee22c96728d74bad455f2ec16","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-03-19 17:25:11 UTC","length":"3600","start":"2018-03-19 16:25:11 UTC"},"version":"3"},"precert":false,"raw":"MIICEDCCAXmgAwIBAgIBADANBgkqhkiG9w0BAQQFADBOMQswCQYDVQQGEwJVSzEYMBYGA1UEChMPRXhpbSBEZXZlbG9wZXJzMSUwIwYDVQQDExxjYzEtZWxpeml1bS52ZHMuY29sb2NhbGwuY29tMB4XDTE4MDMxOTE2MjUxMVoXDTE4MDMxOTE3MjUxMVowTjELMAkGA1UEBhMCVUsxGDAWBgNVBAoTD0V4aW0gRGV2ZWxvcGVyczElMCMGA1UEAxMcY2MxLWVsaXppdW0udmRzLmNvbG9jYWxsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5lYjMkO3PoU581YtBXLRIMPZCVA7PRmjj4BqCqtFq58jsoyopmAno/vwHDy+WY9nTwdQOM/Kish8QumyTrYHejzXIukTzDFVTbZFascp0plsF4LTflAzTZpw2NDeuwhcWJh+4rruFTppiHoSuOZFqNn9LmnXTMfnKJ8n2ckp2G0CAwEAATANBgkqhkiG9w0BAQQFAAOBgQBiSDk9hgqXO271O37Nyno/MfprUqkU2z4qopffPzh6r7jcQaoI8/Y5hqha/smwmw48+Bb2YrP2YJjEnW84txd4pE21VtDDzTVqFfgx7IHspCGuNBQsOdXvMDO0GX1XARq5pSgksP8ChJbWFG/66+C5rDEXVJ9+lqksLYifBH5BSA==","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"na","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"error","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"na","e_path_len_constraint_zero_or_less":"na","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"error","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"error","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"error","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"error","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 16:22:29 UTC","fingerprint_sha256":"8fee60f823c5efb64b0bf4b03a8a667938960f45e1d495bdcd6b45065f94a43b","metadata":{"added_at":"2018-03-19 16:22:29 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 20:14:12 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-29 03:54:09 UTC"},"parents":[],"parsed":{"extensions":{"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[]},"fingerprint_md5":"ff0c465522d1df2ce9d0f118ca4f89f8","fingerprint_sha1":"3ca01d469e143395d940bf6cd1b641e7dda2e96e","fingerprint_sha256":"8fee60f823c5efb64b0bf4b03a8a667938960f45e1d495bdcd6b45065f94a43b","issuer":{"common_name":["mail-002-3.webh.pro"],"country":["UK"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Exim Developers"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=UK, O=Exim Developers, CN=mail-002-3.webh.pro","names":["mail-002-3.webh.pro"],"redacted":false,"serial_number":"0","signature":{"self_signed":true,"signature_algorithm":{"name":"MD5-RSA","oid":"1.2.840.113549.1.1.4"},"valid":false,"value":"g8zo+mzrMUvUSPHXTQsNPHTbvBBjiew+utgQJDgpkWkDbBfHO6NvLrZGWgJ0KVkOX+CeMTizocHZqSCYDJx99y9RnQYZGZ5eequnyM30lUPj6Ng455NrAWmNnTGBFGpuRoZN8Fsfw6SrMrpy7471GWvdyQ45G0qqt8V62npU9Q8="},"signature_algorithm":{"name":"MD5-RSA","oid":"1.2.840.113549.1.1.4"},"spki_subject_fingerprint":"14492557259cb489b2b906dc9a4387c61313a1a4f1c085bb8dcf6b0ddd774d51","subject":{"common_name":["mail-002-3.webh.pro"],"country":["UK"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Exim Developers"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=UK, O=Exim Developers, CN=mail-002-3.webh.pro","subject_key_info":{"fingerprint_sha256":"2d889441afc6b24b42cc625939e213721f0d2b9348c676faf7f25482dde0bc5a","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"4e1sp4oXp4B6/RrLa+gop/21/Wss1hUW0tA68bcJRYDJ4hXlsyUDjmStLvr8EEPiRs5i2UCjgeIfmALfPm6dwMfnLs/QpX3tmFiFGGfggSy9c/U6PGW3bGSzWrPN1hZsxS4kYdBj7rdRVWk/ghH7qQViYLrBl/TGn6NbUj6u3Ls="}},"tbs_fingerprint":"c954e9e0cd537de837549cbd224b44e60c172e364eba449f4d6b2fce7232daf2","tbs_noct_fingerprint":"dc3e19d9b6d81399a3f735a1ae706edc20a6494af41a15649d12b2c53ae2461f","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-03-19 17:15:44 UTC","length":"3600","start":"2018-03-19 16:15:44 UTC"},"version":"3"},"precert":false,"raw":"MIIB/jCCAWegAwIBAgIBADANBgkqhkiG9w0BAQQFADBFMQswCQYDVQQGEwJVSzEYMBYGA1UECgwPRXhpbSBEZXZlbG9wZXJzMRwwGgYDVQQDDBNtYWlsLTAwMi0zLndlYmgucHJvMB4XDTE4MDMxOTE2MTU0NFoXDTE4MDMxOTE3MTU0NFowRTELMAkGA1UEBhMCVUsxGDAWBgNVBAoMD0V4aW0gRGV2ZWxvcGVyczEcMBoGA1UEAwwTbWFpbC0wMDItMy53ZWJoLnBybzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4e1sp4oXp4B6/RrLa+gop/21/Wss1hUW0tA68bcJRYDJ4hXlsyUDjmStLvr8EEPiRs5i2UCjgeIfmALfPm6dwMfnLs/QpX3tmFiFGGfggSy9c/U6PGW3bGSzWrPN1hZsxS4kYdBj7rdRVWk/ghH7qQViYLrBl/TGn6NbUj6u3LsCAwEAATANBgkqhkiG9w0BAQQFAAOBgQCDzOj6bOsxS9RI8ddNCw08dNu8EGOJ7D662BAkOCmRaQNsF8c7o28utkZaAnQpWQ5f4J4xOLOhwdmpIJgMnH33L1GdBhkZnl56q6fIzfSVQ+Po2Djnk2sBaY2dMYEUam5Ghk3wWx/DpKsyunLvjvUZa93JDjkbSqq3xXraelT1Dw==","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"na","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"error","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"na","e_path_len_constraint_zero_or_less":"na","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"error","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"error","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"error","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"error","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:21:01 UTC","fingerprint_sha256":"5afde26d437029761de28f92d6b55f3ff57e6e55d190a0d3f5235110c99c9f32","metadata":{"added_at":"2018-03-19 14:21:01 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-10-09 04:56:39 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-10-09 10:46:17 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"2d9e58607b84eb05aa3ac2cd9018177d3be8c088","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["idealhut.amjadiqbal.com","idealhut.com","mail.idealhut.com","www.idealhut.amjadiqbal.com","www.idealhut.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"2d9e58607b84eb05aa3ac2cd9018177d3be8c088"},"fingerprint_md5":"5630617b3cb07ad5fdf4c186b6e9b2a2","fingerprint_sha1":"db7b3af8674ee21da72b7191b2ac8370e65e3c43","fingerprint_sha256":"5afde26d437029761de28f92d6b55f3ff57e6e55d190a0d3f5235110c99c9f32","issuer":{"common_name":["idealhut.amjadiqbal.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=idealhut.amjadiqbal.com","names":["www.idealhut.amjadiqbal.com","www.idealhut.com","idealhut.amjadiqbal.com","idealhut.com","mail.idealhut.com"],"redacted":false,"serial_number":"1116514779","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"IHBAGywJ4Lizls4YoYyzxc7AToAtSSoe4WxvCCnY6Sz2dP4KV2f1opjnwfeGCC6f4OZ4pqzNZWikgwEEH8Vsg2OHCbBchSkZC6jX+dHiRw6WyvE8rTI5lKt4T0Ns7VFbdTqI3lt2g+IxRmVkTlmZFJ5cgWB7/8RiubN2Z3glqDM4s8psmIP01wehCtRzcAdwuE7CSBEBLFvl6euKlrmXJfHAad6owH4n48+TUMFiDSqBQbEHF2jeFCATyJpNKVrCQmaYNMSTl6u4SNnsaF1Zq05ZmGXSKnx+t4JdMOHLEDVqYVRHnTeU09PgRqo6ECuwBl2ro2AqrN/gAvh5tePwHg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"79b011388d10f0eb5361a10d05c374d715a5dcd2caf3a31256fb6edd77fb8d41","subject":{"common_name":["idealhut.amjadiqbal.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=idealhut.amjadiqbal.com","subject_key_info":{"fingerprint_sha256":"45fad08d860ab1b9ffd876a885a3f62499b629d45ac47426d378e3a53ba9f936","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"xbsPDphpTdX89ywbQUwCokY1cH+rrnI7fiDQVmka2VR8cktBYgFdW4LgqfHXv73dcCcDXpZMVb7veLyu9pFxqUKmv5rD1pLu3qy97H03gA6mvMImkPrndAFepFMU+/C2UZwrWpgRlUl2mAvkEsWXn/qSCnxmIBAwQemv1lBiI4Dltf3Tgwv2iwDhuaFogUNPtm7qBxmIBIXaSBvDteg4GSy7t/+f4C/UGn1H3tn32SDIB2xdjY4AZwECIxT2JW2y+zvV/D7T3KsKj5RUvRg1r0ZyukiPLvm3u0Y+WUwo2s6RbQKK1kb+kqWbbZopoS/SJKTVXVZi3IesehyF1doC/Q=="}},"tbs_fingerprint":"17ee30a8ea260701d2a0549b565f87dd9945c1c1d001d2b470f65283ca3bb874","tbs_noct_fingerprint":"17ee30a8ea260701d2a0549b565f87dd9945c1c1d001d2b470f65283ca3bb874","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-09-22 18:02:12 UTC","length":"31536000","start":"2017-09-22 18:02:12 UTC"},"version":"3"},"precert":false,"raw":"MIIDhTCCAm2gAwIBAgIEQoyp2zANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdpZGVhbGh1dC5hbWphZGlxYmFsLmNvbTAeFw0xNzA5MjIxODAyMTJaFw0xODA5MjIxODAyMTJaMCIxIDAeBgNVBAMMF2lkZWFsaHV0LmFtamFkaXFiYWwuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxbsPDphpTdX89ywbQUwCokY1cH+rrnI7fiDQVmka2VR8cktBYgFdW4LgqfHXv73dcCcDXpZMVb7veLyu9pFxqUKmv5rD1pLu3qy97H03gA6mvMImkPrndAFepFMU+/C2UZwrWpgRlUl2mAvkEsWXn/qSCnxmIBAwQemv1lBiI4Dltf3Tgwv2iwDhuaFogUNPtm7qBxmIBIXaSBvDteg4GSy7t/+f4C/UGn1H3tn32SDIB2xdjY4AZwECIxT2JW2y+zvV/D7T3KsKj5RUvRg1r0ZyukiPLvm3u0Y+WUwo2s6RbQKK1kb+kqWbbZopoS/SJKTVXVZi3IesehyF1doC/QIDAQABo4HCMIG/MB0GA1UdDgQWBBQtnlhge4TrBao6ws2QGBd9O+jAiDAfBgNVHSMEGDAWgBQtnlhge4TrBao6ws2QGBd9O+jAiDAJBgNVHRMEAjAAMHIGA1UdEQRrMGmCF2lkZWFsaHV0LmFtamFkaXFiYWwuY29tggxpZGVhbGh1dC5jb22CEW1haWwuaWRlYWxodXQuY29tght3d3cuaWRlYWxodXQuYW1qYWRpcWJhbC5jb22CEHd3dy5pZGVhbGh1dC5jb20wDQYJKoZIhvcNAQELBQADggEBACBwQBssCeC4s5bOGKGMs8XOwE6ALUkqHuFsbwgp2Oks9nT+Cldn9aKY58H3hggun+DmeKaszWVopIMBBB/FbINjhwmwXIUpGQuo1/nR4kcOlsrxPK0yOZSreE9DbO1RW3U6iN5bdoPiMUZlZE5ZmRSeXIFge//EYrmzdmd4JagzOLPKbJiD9NcHoQrUc3AHcLhOwkgRASxb5enripa5lyXxwGneqMB+J+PPk1DBYg0qgUGxBxdo3hQgE8iaTSlawkJmmDTEk5eruEjZ7GhdWatOWZhl0ip8freCXTDhyxA1amFUR503lNPT4EaqOhArsAZdq6NgKqzf4AL4ebXj8B4=","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:23:56 UTC","fingerprint_sha256":"c3833beced725b7c8e60dc8cdc0b8b9a55ec77b4e6c589a5a07f14f7f9868e37","metadata":{"added_at":"2018-03-19 14:23:56 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-10-16 01:14:06 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-10-16 01:15:04 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"267b68224c34b24280a4b140ccff268c328d27e2","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_key_id":"267b68224c34b24280a4b140ccff268c328d27e2"},"fingerprint_md5":"cf40476fa2abdc7a047eef99c2e9b26a","fingerprint_sha1":"941a42bd8bf3788547802f00594fb6b5a8266a2d","fingerprint_sha256":"c3833beced725b7c8e60dc8cdc0b8b9a55ec77b4e6c589a5a07f14f7f9868e37","issuer":{"common_name":["chobar.ir"],"country":["IR"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["tehran"],"organization":["chobar"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["tehran"],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"ST=tehran, O=chobar, C=IR, CN=chobar.ir, L=tehran","names":["chobar.ir"],"redacted":false,"serial_number":"3291404028","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"dTfSgKckb2OAjWoXfZu3LJhCwNKQ8AJ9rbbcHuZseTuj4bsdvYtaWUPEaK8zD++EMNs8o+jGb/NtfGXHtJgZkrZShcO1Ua1muE+ucpkbuCoR/tABeddy2jrZHLoj3UKjGvgwjCCbgNRgZAsIKgMl6j6qVi2Yo4bP121iwSvFFBfXjK714SncA4raPhKUZp/ONMhMFkFBJ40xllgzk24G978m7N8N9C35YPa2Fw/nYWy1s/4n+lufW4pCJgZsZedVdfDnLdQ4d/BCuZm6GR8SBcrWMFycncE4W5VW9lRwKfG515K3wXxdwcbnlXB209MD8nRsAw7W+Fk/tEdX+9tfHA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"44c4a6558bb3e4f2a61e7a783f2e01ddabc5b1291c92ad74f3b8c7c9313994df","subject":{"common_name":["chobar.ir"],"country":["IR"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["tehran"],"organization":["chobar"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["tehran"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"ST=tehran, O=chobar, C=IR, CN=chobar.ir, L=tehran","subject_key_info":{"fingerprint_sha256":"ba086ff4e10ece74a50f8ccea21a3d8a1f0b4ff71370f225a4e7c23fdf168b30","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"zXahH9jd1I89BCTtmENproop7sTl1/gfVT2/7TA95GuaoUHR15gGfkCqXKQSNbSrWcoV6zvnl3Yby3Yq7sebnhHD51vaYQDYn5iRu+PGkSm/UMy+qwa1NF58wCasEneGtXGxFE6uK9PVzlFsFzKOU7y4p43d61EEJli3obD5rvkXGBjzIpkqOn51+ZHTg6rk9mmHS4MCWAkPyoquyjErSEvfvOrfVmqmsS2f5hu0UF/y/0Ls5KylndXJNn1BGnjjKl5ZxV9EX32QEhf5ckQZ/a5ISm9I3FOf6JNa7J5XEcaHZyoRZYCzStgdOX7z4EMjOLFblH3+01BDvlJCZA+A0w=="}},"tbs_fingerprint":"d2622b57eb964d0331cc3c0a0417cdf56795608184a06cd3732dae0efc7beff5","tbs_noct_fingerprint":"d2622b57eb964d0331cc3c0a0417cdf56795608184a06cd3732dae0efc7beff5","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-10-15 18:12:21 UTC","length":"31536000","start":"2017-10-15 18:12:21 UTC"},"version":"3"},"precert":false,"raw":"MIIDdDCCAlygAwIBAgIFAMQu1vwwDQYJKoZIhvcNAQELBQAwVDEPMA0GA1UECAwGdGVocmFuMQ8wDQYDVQQKDAZjaG9iYXIxCzAJBgNVBAYTAklSMRIwEAYDVQQDDAljaG9iYXIuaXIxDzANBgNVBAcMBnRlaHJhbjAeFw0xNzEwMTUxODEyMjFaFw0xODEwMTUxODEyMjFaMFQxDzANBgNVBAgMBnRlaHJhbjEPMA0GA1UECgwGY2hvYmFyMQswCQYDVQQGEwJJUjESMBAGA1UEAwwJY2hvYmFyLmlyMQ8wDQYDVQQHDAZ0ZWhyYW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNdqEf2N3Ujz0EJO2YQ2muiinuxOXX+B9VPb/tMD3ka5qhQdHXmAZ+QKpcpBI1tKtZyhXrO+eXdhvLdirux5ueEcPnW9phANifmJG748aRKb9QzL6rBrU0XnzAJqwSd4a1cbEUTq4r09XOUWwXMo5TvLinjd3rUQQmWLehsPmu+RcYGPMimSo6fnX5kdODquT2aYdLgwJYCQ/Kiq7KMStIS9+86t9WaqaxLZ/mG7RQX/L/QuzkrKWd1ck2fUEaeOMqXlnFX0RffZASF/lyRBn9rkhKb0jcU5/ok1rsnlcRxodnKhFlgLNK2B05fvPgQyM4sVuUff7TUEO+UkJkD4DTAgMBAAGjTTBLMB0GA1UdDgQWBBQme2giTDSyQoCksUDM/yaMMo0n4jAfBgNVHSMEGDAWgBQme2giTDSyQoCksUDM/yaMMo0n4jAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQB1N9KApyRvY4CNahd9m7csmELA0pDwAn2tttwe5mx5O6Phux29i1pZQ8RorzMP74Qw2zyj6MZv8218Zce0mBmStlKFw7VRrWa4T65ymRu4KhH+0AF513LaOtkcuiPdQqMa+DCMIJuA1GBkCwgqAyXqPqpWLZijhs/XbWLBK8UUF9eMrvXhKdwDito+EpRmn840yEwWQUEnjTGWWDOTbgb3vybs3w30Lflg9rYXD+dhbLWz/if6W59bikImBmxl51V18Oct1Dh38EK5mboZHxIFytYwXJydwThblVb2VHAp8bnXkrfBfF3BxueVcHbT0wPydGwDDtb4WT+0R1f7218c","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"error","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"error","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:15:40 UTC","fingerprint_sha256":"db75c64afeaae88c05eb92495a36f68949ce2928e71e05e6a68edac4eaef0c29","metadata":{"added_at":"2018-03-19 14:15:40 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 04:49:51 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-29 14:30:47 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"a82e9cdb2f688a4494d7f81cae3b4cc2bca804ad","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["payamtaksms.ir","mail.payamtaksms.ir","www.payamtaksms.ir"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"a82e9cdb2f688a4494d7f81cae3b4cc2bca804ad"},"fingerprint_md5":"234821026ebce6007a6d45c32c97b1df","fingerprint_sha1":"3612352db2113bd62bd7e55f48f293c60228badc","fingerprint_sha256":"db75c64afeaae88c05eb92495a36f68949ce2928e71e05e6a68edac4eaef0c29","issuer":{"common_name":["payamtaksms.ir"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=payamtaksms.ir","names":["payamtaksms.ir","mail.payamtaksms.ir","www.payamtaksms.ir"],"redacted":false,"serial_number":"2347835677","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"aowLiqghPBj00YqLakORHwa2so6h+5hOfR0igGfxr9srbMyhZ3xW+g0B3FplxYCxOtIwP5ywf59tgyKqTQdL3nROOs7vNylMOGS5RkzIffl6GcuCiqgwzsOPOK9afFgm2TVTuZVmuo9SETUyKNe1H040J+Jf5LceW1f1R0cNReBzi3hwmPj4X1wV4/SI9/HyI2YMnydPW7pbvEUqDijHbV+HI0tfaYJ8ga/Q9YkVuK4iO/mR+GMjDA+uFVDIcoQBxHJS3MXr9sz1vXiGDMQJxNKFCpDLfR7lbhROIZiwyZFMk4sfE2YTmz3575g0X2nxiGm6bEZfdTD99Ym/Wt0aPQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"95c7fc24aaf04a918c50fede648ee8eca753a703b19c38ad5757adbc1658593f","subject":{"common_name":["payamtaksms.ir"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=payamtaksms.ir","subject_key_info":{"fingerprint_sha256":"48c7ba9a256ed630a2e5d44af49ed8c23e9839b09cbb6bb090e72825a316c1bc","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"tatNJ/W9bM4/n5RP2/vvY0qgTYWW6zQlG5Evno5GSIpLu588sfSe8Njye++aWp6EGoGVQG/g5ToZMAK5mY5lfaft7exrRj73YI1aopGtsbSA5QWEamgpkkokyxLFE3HNpViUGGBj1gbUrtvvSoMZSN8bmUChU3/999bODScJHAATpK4z0aZ1InMknLoLpn3W3KS29sLGtP6rb76gnHH77yKtihhQH7gnhodbND+SK3EfewiyH+dMV8jrWBrNly3V2ey+FETVP9AON1W83AaCCb1IF7I5Ehhzvtx+XuQW3MkGy5xhjGx6UGNBqnpLTL/p+YHtssHSMGjzKE6cxeeiKw=="}},"tbs_fingerprint":"9043bee7ffd72cded056430a8845432283cded7bedb6278a71c3bdc885241c1e","tbs_noct_fingerprint":"9043bee7ffd72cded056430a8845432283cded7bedb6278a71c3bdc885241c1e","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-07-12 06:04:03 UTC","length":"31536000","start":"2017-07-12 06:04:03 UTC"},"version":"3"},"precert":false,"raw":"MIIDRDCCAiygAwIBAgIFAIvxIR0wDQYJKoZIhvcNAQELBQAwGTEXMBUGA1UEAwwOcGF5YW10YWtzbXMuaXIwHhcNMTcwNzEyMDYwNDAzWhcNMTgwNzEyMDYwNDAzWjAZMRcwFQYDVQQDDA5wYXlhbXRha3Ntcy5pcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWrTSf1vWzOP5+UT9v772NKoE2Flus0JRuRL56ORkiKS7ufPLH0nvDY8nvvmlqehBqBlUBv4OU6GTACuZmOZX2n7e3sa0Y+92CNWqKRrbG0gOUFhGpoKZJKJMsSxRNxzaVYlBhgY9YG1K7b70qDGUjfG5lAoVN//ffWzg0nCRwAE6SuM9GmdSJzJJy6C6Z91tyktvbCxrT+q2++oJxx++8irYoYUB+4J4aHWzQ/kitxH3sIsh/nTFfI61gazZct1dnsvhRE1T/QDjdVvNwGggm9SBeyORIYc77cfl7kFtzJBsucYYxselBjQap6S0y/6fmB7bLB0jBo8yhOnMXnoisCAwEAAaOBkjCBjzAdBgNVHQ4EFgQUqC6c2y9oikSU1/gcrjtMwryoBK0wHwYDVR0jBBgwFoAUqC6c2y9oikSU1/gcrjtMwryoBK0wCQYDVR0TBAIwADBCBgNVHREEOzA5gg5wYXlhbXRha3Ntcy5pcoITbWFpbC5wYXlhbXRha3Ntcy5pcoISd3d3LnBheWFtdGFrc21zLmlyMA0GCSqGSIb3DQEBCwUAA4IBAQBqjAuKqCE8GPTRiotqQ5EfBrayjqH7mE59HSKAZ/Gv2ytszKFnfFb6DQHcWmXFgLE60jA/nLB/n22DIqpNB0vedE46zu83KUw4ZLlGTMh9+XoZy4KKqDDOw484r1p8WCbZNVO5lWa6j1IRNTIo17UfTjQn4l/ktx5bV/VHRw1F4HOLeHCY+PhfXBXj9Ij38fIjZgyfJ09bulu8RSoOKMdtX4cjS19pgnyBr9D1iRW4riI7+ZH4YyMMD64VUMhyhAHEclLcxev2zPW9eIYMxAnE0oUKkMt9HuVuFE4hmLDJkUyTix8TZhObPfnvmDRfafGIabpsRl91MP31ib9a3Ro9","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 02:38:34 UTC","fingerprint_sha256":"2342029fc0057e2a0816e21aaa7390e5fc45d9c479537031048c06ff942168e9","metadata":{"added_at":"2018-03-19 02:38:34 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-03-19 03:22:12 UTC","seen_in_scan":true,"source":"scan","updated_at":"2019-03-19 03:39:44 UTC"},"parents":[],"parsed":{"extensions":{"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[]},"fingerprint_md5":"a916764c30e5ae8007e16c61ac417ac8","fingerprint_sha1":"fd117d94c0d6c52c263755b95e6b51846ac8b742","fingerprint_sha256":"2342029fc0057e2a0816e21aaa7390e5fc45d9c479537031048c06ff942168e9","issuer":{"common_name":["imap.example.com"],"country":[],"domain_component":[],"email_address":["postmaster@example.com"],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":["IMAP server"],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com","names":["imap.example.com"],"redacted":false,"serial_number":"9980506603591762830","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1-RSA","oid":"1.3.14.3.2.29"},"valid":false,"value":"IF4JPlE5wmHmbL4GxcH7qSonb1jKzAkRzH8idoPtmf9W0M6pz1ucqzFrkxci8cNBr3vkZB6FjZTWjZ0WrLyW5BtbCdFPBnf7avRzWbyZ+dfa0cRztU3kkR31iEPhcpO2NNSich40SZo/UkcsN2f2gKqzf7WLupsZ1cidVTXACG0="},"signature_algorithm":{"name":"SHA1-RSA","oid":"1.3.14.3.2.29"},"spki_subject_fingerprint":"cb0a5a8076f344d2184e9e233def6f7898b54b89a77d9f967666ad5af1d7bb93","subject":{"common_name":["imap.example.com"],"country":[],"domain_component":[],"email_address":["postmaster@example.com"],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":["IMAP server"],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com","subject_key_info":{"fingerprint_sha256":"414d7d1e090e71d107e72fa251fbcc7c31784fdecbc2d054c622eeb2197e7391","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"3BVlBURX6ysohbgM/rErGjnehYhsI9GLbcMCNf46UtVbA3CRZRg3uOFndYr8E0ClUie+nRVH7T4yCxVTFTV7x3Us3GtwoUypyq5do257KlcLs3QwrDtNl6UD4KC+F2TQsOyDbSOU7ZnTpbtZ9wII4yiM3Q2frCkhCmdX6z0gNzM="}},"tbs_fingerprint":"4bdf45e1aea2bc6d9799aedb45018fe145ad3f59eff3caf6bc9798b8ffd3aa46","tbs_noct_fingerprint":"4bdf45e1aea2bc6d9799aedb45018fe145ad3f59eff3caf6bc9798b8ffd3aa46","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGQA=="}],"validation_level":"unknown","validity":{"end":"2019-03-18 08:29:10 UTC","length":"31536000","start":"2018-03-18 08:29:10 UTC"},"version":"3"},"precert":false,"raw":"MIICQzCCAaygAwIBAgIJAIqB4eCBhwOOMA0GCSqGSIb3DQEBBQUAMFgxFDASBgNVBAsTC0lNQVAgc2VydmVyMRkwFwYDVQQDExBpbWFwLmV4YW1wbGUuY29tMSUwIwYJKoZIhvcNAQkBFhZwb3N0bWFzdGVyQGV4YW1wbGUuY29tMB4XDTE4MDMxODA4MjkxMFoXDTE5MDMxODA4MjkxMFowWDEUMBIGA1UECxMLSU1BUCBzZXJ2ZXIxGTAXBgNVBAMTEGltYXAuZXhhbXBsZS5jb20xJTAjBgkqhkiG9w0BCQEWFnBvc3RtYXN0ZXJAZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANwVZQVEV+srKIW4DP6xKxo53oWIbCPRi23DAjX+OlLVWwNwkWUYN7jhZ3WK/BNApVInvp0VR+0+MgsVUxU1e8d1LNxrcKFMqcquXaNueypXC7N0MKw7TZelA+Cgvhdk0LDsg20jlO2Z06W7WfcCCOMojN0Nn6wpIQpnV+s9IDczAgMBAAGjFTATMBEGCWCGSAGG+EIBAQQEAwIGQDANBgkqhkiG9w0BAQUFAAOBgQAgXgk+UTnCYeZsvgbFwfupKidvWMrMCRHMfyJ2g+2Z/1bQzqnPW5yrMWuTFyLxw0Gve+RkHoWNlNaNnRasvJbkG1sJ0U8Gd/tq9HNZvJn519rRxHO1TeSRHfWIQ+Fyk7Y01KJyHjRJmj9SRyw3Z/aAqrN/tYu6mxnVyJ1VNcAIbQ==","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"na","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"error","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"na","e_path_len_constraint_zero_or_less":"na","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"error","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"error","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"error","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"warn","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:24:02 UTC","fingerprint_sha256":"71e964071aeb3af54a20f80de5721f9939891a8e4e4604a0e861540518d82b2c","metadata":{"added_at":"2018-03-19 14:24:02 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-03-06 00:27:28 UTC","seen_in_scan":true,"source":"scan","updated_at":"2019-03-06 00:34:10 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"7c071a4990cd017b3691fdd3dd127ac1e8506121","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["hbio.ir","mail.hbio.ir","www.hbio.ir"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"7c071a4990cd017b3691fdd3dd127ac1e8506121"},"fingerprint_md5":"d9337a9f32da1dd7b274fad77d41b60b","fingerprint_sha1":"18ae6be222279a3f020f940511d2a018ad45b40d","fingerprint_sha256":"71e964071aeb3af54a20f80de5721f9939891a8e4e4604a0e861540518d82b2c","issuer":{"common_name":["hbio.ir"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=hbio.ir","names":["www.hbio.ir","hbio.ir","mail.hbio.ir"],"redacted":false,"serial_number":"9520103675","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"p6/UspGcL9AbpNqfuqMlvrCgBb5hvYLGQdb9T6rKTjg0KtChORKNg9cxpMLd/XNMJWoCwNzwsafz/0Oncl7JOiGwHIcECthHQVLNxW6OgXuss2nwj3Q/BKCZi5NZxCTHsCgbyZ+zBkn5G8Xq0PqQKeAxjhWUiNJvYHO7RRzePhHmqqANRLU6GuM3f/lnhcrMO51J1ZT12gYxF6CKxnKIB8y4fZcw2HP1qP9BrfTQcz2EdnnJCX1SMpfNEdR0H6KSD+JCH/y367mxqivSRmb7/sxjMHjFkhpT16mY4I2ecREjx5aZScVaUk+26RNusRby8AKCEO+qkQ6jGegqgEtEcg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"2750481d07aeca05cb6217b3c1a2d2883ecf8fa7b04a7639109fd485af80a8c3","subject":{"common_name":["hbio.ir"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=hbio.ir","subject_key_info":{"fingerprint_sha256":"8770bbdb9a672c382ce7eb11980e104faae5fe0d95a1f713c1f81f30405307ac","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"rcBITdXkjUF8TioZZSYL8+ZUoTL7o/xDd1cat9pO5L/vaBOnMHTAw+gviRGwzyTdyy8Wsy8XwbvaPyltuE6ADQ9mEdCXfHhm+ym4baLlKvnPoycM1NZkgTUAwUzos5WT3fCZoNbnfXQISi7gp0b4oD5h4A/Niic4zMTQ5GoFEC5TLg253BYl9d+g+pyDRXm3PdDByxfg7fm5G6cezRkE0wxw+hApI24098bfp7DQGw5WbVEGgS4Oo62S2VaAK2V7vX0XWOFbH50fgfQa4j4p4EACLgXtK8mpC2buX2Q7FHseFzRYA/SxLpN0kAnX3s+ghD+/z7+fcGrrLiiNY4+TYQ=="}},"tbs_fingerprint":"2d521ba16ceb859918023da03745a96f47bebe59733e6210aee96642ef7383ed","tbs_noct_fingerprint":"2d521ba16ceb859918023da03745a96f47bebe59733e6210aee96642ef7383ed","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2019-03-05 18:40:27 UTC","length":"31536000","start":"2018-03-05 18:40:27 UTC"},"version":"3"},"precert":false,"raw":"MIIDHzCCAgegAwIBAgIFAjdxQPswDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAwwHaGJpby5pcjAeFw0xODAzMDUxODQwMjdaFw0xOTAzMDUxODQwMjdaMBIxEDAOBgNVBAMMB2hiaW8uaXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtwEhN1eSNQXxOKhllJgvz5lShMvuj/EN3Vxq32k7kv+9oE6cwdMDD6C+JEbDPJN3LLxazLxfBu9o/KW24ToAND2YR0Jd8eGb7KbhtouUq+c+jJwzU1mSBNQDBTOizlZPd8Jmg1ud9dAhKLuCnRvigPmHgD82KJzjMxNDkagUQLlMuDbncFiX136D6nINFebc90MHLF+Dt+bkbpx7NGQTTDHD6ECkjbjT3xt+nsNAbDlZtUQaBLg6jrZLZVoArZXu9fRdY4VsfnR+B9BriPingQAIuBe0ryakLZu5fZDsUex4XNFgD9LEuk3SQCdfez6CEP7/Pv59wausuKI1jj5NhAgMBAAGjfDB6MB0GA1UdDgQWBBR8BxpJkM0BezaR/dPdEnrB6FBhITAfBgNVHSMEGDAWgBR8BxpJkM0BezaR/dPdEnrB6FBhITAJBgNVHRMEAjAAMC0GA1UdEQQmMCSCB2hiaW8uaXKCDG1haWwuaGJpby5pcoILd3d3LmhiaW8uaXIwDQYJKoZIhvcNAQELBQADggEBAKev1LKRnC/QG6Tan7qjJb6woAW+Yb2CxkHW/U+qyk44NCrQoTkSjYPXMaTC3f1zTCVqAsDc8LGn8/9Dp3JeyTohsByHBArYR0FSzcVujoF7rLNp8I90PwSgmYuTWcQkx7AoG8mfswZJ+RvF6tD6kCngMY4VlIjSb2Bzu0Uc3j4R5qqgDUS1OhrjN3/5Z4XKzDudSdWU9doGMRegisZyiAfMuH2XMNhz9aj/Qa300HM9hHZ5yQl9UjKXzRHUdB+ikg/iQh/8t+u5saor0kZm+/7MYzB4xZIaU9epmOCNnnERI8eWmUnFWlJPtukTbrEW8vACghDvqpEOoxnoKoBLRHI=","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:26:26 UTC","fingerprint_sha256":"e6fb251f21f9325fee207e5087a77157a56ee606beabffd1b49e1f434313d0aa","metadata":{"added_at":"2018-03-19 14:26:26 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-12-22 00:39:35 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-12-22 00:44:22 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"2e0000ebf3fd692e6b875d5b693ea8b9a19fc547","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["lunatravel.kielashop.website","lunatravel.me","mail.lunatravel.me","www.lunatravel.kielashop.website","www.lunatravel.me"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"2e0000ebf3fd692e6b875d5b693ea8b9a19fc547"},"fingerprint_md5":"df04f9972daa09f31348ad969681e850","fingerprint_sha1":"362b8fa8f6f2c105e774de774686431712ad4040","fingerprint_sha256":"e6fb251f21f9325fee207e5087a77157a56ee606beabffd1b49e1f434313d0aa","issuer":{"common_name":["lunatravel.kielashop.website"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=lunatravel.kielashop.website","names":["www.lunatravel.kielashop.website","www.lunatravel.me","lunatravel.kielashop.website","lunatravel.me","mail.lunatravel.me"],"redacted":false,"serial_number":"8827855768","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"XoLeAFt4uXYSIb3HuD5sa5tvB557RGXfuiO3WVEQIyOucLT+VM2boXA2zcGIu/fAuCb3cwwDcYpnXwdY4o5sJfsXRI+xYj9LgC/o05hMRN6P5I5aYrN5Hteq9Kgz8ezi6Ql1Jf0RkAqZvUn1OhWQDsEyBlohIUq33azlphK8TzlFrxit0YEO28qwsUR5BhSMD+dVZyYGlRMBHoXxtO4KRQzl3KCfNYZz59wnCP1MPq+3x0jFJthEWW9DrsU4bok6dRjnc/CRlJHHv67rb/jky+gIZrFXezr+b+v4L1Tc+OgGYRvtbGKUVRKUNZfEwxhu6ApmFlOmlTIDJYijNnMSlg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"27556eb7fa1c58ef74854077e205ee11c7e18a6b6ee64b6fd382250de776c767","subject":{"common_name":["lunatravel.kielashop.website"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=lunatravel.kielashop.website","subject_key_info":{"fingerprint_sha256":"21a0da079201086d18ee60468c3005781af3131f4b71123e76e911e11893027e","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"4kXJQE5wTIYaUGTBh6tSuBV+jDgPoNV1K602FGCu295EPpm1DNYpWzKnN87PZVWDy6OoeEsU63WdbKy7S7Kw1qXyMsPYZWLu8P/pj/KKKV64mtV8HACnQ1cKskx5cm2glQsude9XR28MzX4rt0E1O+WbyJNJhWygL5RX4DzpvnR8F6LI6ZtitNogy1OuaFU6C6gUVqZQMNMueasFvPMdcsGaapTTZs7L+EjJ2fjf3ZvzaRybDTPrJFuCF3BlH4VAFcGcpYWAfNpT930hXxW/nx3o/BwX+bKRkJGLNZe7aHKx7Pjmib38YVjTVmFw116MPqY836BtX+XGzZ+3cf9iIQ=="}},"tbs_fingerprint":"5de6d4f94104a77b9adc0bad88c8251915299e15644c9eb8737306ac5374a40e","tbs_noct_fingerprint":"5de6d4f94104a77b9adc0bad88c8251915299e15644c9eb8737306ac5374a40e","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-12-21 08:23:48 UTC","length":"31536000","start":"2017-12-21 08:23:48 UTC"},"version":"3"},"precert":false,"raw":"MIIDnTCCAoWgAwIBAgIFAg4uY5gwDQYJKoZIhvcNAQELBQAwJzElMCMGA1UEAwwcbHVuYXRyYXZlbC5raWVsYXNob3Aud2Vic2l0ZTAeFw0xNzEyMjEwODIzNDhaFw0xODEyMjEwODIzNDhaMCcxJTAjBgNVBAMMHGx1bmF0cmF2ZWwua2llbGFzaG9wLndlYnNpdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDiRclATnBMhhpQZMGHq1K4FX6MOA+g1XUrrTYUYK7b3kQ+mbUM1ilbMqc3zs9lVYPLo6h4SxTrdZ1srLtLsrDWpfIyw9hlYu7w/+mP8oopXria1XwcAKdDVwqyTHlybaCVCy5171dHbwzNfiu3QTU75ZvIk0mFbKAvlFfgPOm+dHwXosjpm2K02iDLU65oVToLqBRWplAw0y55qwW88x1ywZpqlNNmzsv4SMnZ+N/dm/NpHJsNM+skW4IXcGUfhUAVwZylhYB82lP3fSFfFb+fHej8HBf5spGQkYs1l7tocrHs+OaJvfxhWNNWYXDXXow+pjzfoG1f5cbNn7dx/2IhAgMBAAGjgc8wgcwwHQYDVR0OBBYEFC4AAOvz/Wkua4ddW2k+qLmhn8VHMB8GA1UdIwQYMBaAFC4AAOvz/Wkua4ddW2k+qLmhn8VHMAkGA1UdEwQCMAAwfwYDVR0RBHgwdoIcbHVuYXRyYXZlbC5raWVsYXNob3Aud2Vic2l0ZYINbHVuYXRyYXZlbC5tZYISbWFpbC5sdW5hdHJhdmVsLm1lgiB3d3cubHVuYXRyYXZlbC5raWVsYXNob3Aud2Vic2l0ZYIRd3d3Lmx1bmF0cmF2ZWwubWUwDQYJKoZIhvcNAQELBQADggEBAF6C3gBbeLl2EiG9x7g+bGubbweee0Rl37ojt1lRECMjrnC0/lTNm6FwNs3BiLv3wLgm93MMA3GKZ18HWOKObCX7F0SPsWI/S4Av6NOYTETej+SOWmKzeR7XqvSoM/Hs4ukJdSX9EZAKmb1J9ToVkA7BMgZaISFKt92s5aYSvE85Ra8YrdGBDtvKsLFEeQYUjA/nVWcmBpUTAR6F8bTuCkUM5dygnzWGc+fcJwj9TD6vt8dIxSbYRFlvQ67FOG6JOnUY53PwkZSRx7+u62/45MvoCGaxV3s6/m/r+C9U3PjoBmEb7WxilFUSlDWXxMMYbugKZhZTppUyAyWIozZzEpY=","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:20:35 UTC","fingerprint_sha256":"f8261e891c2f95b57ca9f35af197055d951efd76950f36dc8fa7f0156bf79d03","metadata":{"added_at":"2018-03-19 14:20:35 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-12-26 02:04:14 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-12-26 02:04:21 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"1735eb01fbce4c5dea5a509d933614752e1748c0","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["shirazfurniture.ir","mail.shirazfurniture.ir","www.shirazfurniture.ir"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"1735eb01fbce4c5dea5a509d933614752e1748c0"},"fingerprint_md5":"2095c090a45c30969b4d749d8b8ab8d8","fingerprint_sha1":"f040600e7449d4a9cf3077bfce2a0e90141ed5a5","fingerprint_sha256":"f8261e891c2f95b57ca9f35af197055d951efd76950f36dc8fa7f0156bf79d03","issuer":{"common_name":["shirazfurniture.ir"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=shirazfurniture.ir","names":["shirazfurniture.ir","mail.shirazfurniture.ir","www.shirazfurniture.ir"],"redacted":false,"serial_number":"2300905420","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"g2/wm6qmmsCxiZ7cgAxF2K1uvjqSSM+x/jTnaKF96aO3Zjtx5MG7/Rv2Af3piJcFQbVp9+YDuQh4Muru0aqYGlpiHFnzXlE1PZ6kgpnJy9wIVxTZyE8Z4ZdyTKKJi3mNaQWnUVk1T9cvHoVfZGQtONylG7K9hw0qeoPrkTRVrCq050r5nNDCpm9SbUCVKub5qnlEJ0oGaea5L5dcQM/vmcVC7fSRMD9RX1MtlF7t7YVYs15f2njacWWcZ1WSLgMTFsmYPFTy/78hFjWU05qSXOo8iZ70/Z+HQePEh/xZPIbImZV+CV8BMH87WPRPBzpY2gyCDCp84GKk5eXmDh0xGg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"fcc0fd71c378e34637968e1840161e54124d3a2489c6fac3b75898249c3b71b9","subject":{"common_name":["shirazfurniture.ir"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=shirazfurniture.ir","subject_key_info":{"fingerprint_sha256":"4bacb44f2c2ad52584109fc984995caa867ae805c02cf05cf03bdbfc2d67f98f","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"qdzcfUIxgbbCk2PC5Btj/Mo57k8EZYXpWo+305sEihhwcQM71RDq1PwPkYdag8ZGQqIFKnxdKGDTijhKezwmTq3JBthGvJDc6aaiZLkmKpfyPaaRh/utdrrYPB4oMMBOiTc37hjEK3iHnptip96MOTjD5W5zHFZzz/BN/aPO1+5F710qW29+FXqGViDVov71x6s3Wy51VHdESqJyjMvEZ/Tsx5gETvMDaMrxZs8W8DSTBpAYRiHSkS7FFjalPjyDTymEfx6ewgCeU37Ye8XdUjTwxb2yqBLxt1/nmkGx3tsZGajY/QDFvfQw5j3lyZqP7itfW/rl6RtcGu9awhYAUw=="}},"tbs_fingerprint":"2d578094b5fbbde62608c1485c05f44e86853524c4556e7714123c20be579a91","tbs_noct_fingerprint":"2d578094b5fbbde62608c1485c05f44e86853524c4556e7714123c20be579a91","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-12-26 02:01:48 UTC","length":"31536000","start":"2017-12-26 02:01:48 UTC"},"version":"3"},"precert":false,"raw":"MIIDWDCCAkCgAwIBAgIFAIklB8wwDQYJKoZIhvcNAQELBQAwHTEbMBkGA1UEAwwSc2hpcmF6ZnVybml0dXJlLmlyMB4XDTE3MTIyNjAyMDE0OFoXDTE4MTIyNjAyMDE0OFowHTEbMBkGA1UEAwwSc2hpcmF6ZnVybml0dXJlLmlyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqdzcfUIxgbbCk2PC5Btj/Mo57k8EZYXpWo+305sEihhwcQM71RDq1PwPkYdag8ZGQqIFKnxdKGDTijhKezwmTq3JBthGvJDc6aaiZLkmKpfyPaaRh/utdrrYPB4oMMBOiTc37hjEK3iHnptip96MOTjD5W5zHFZzz/BN/aPO1+5F710qW29+FXqGViDVov71x6s3Wy51VHdESqJyjMvEZ/Tsx5gETvMDaMrxZs8W8DSTBpAYRiHSkS7FFjalPjyDTymEfx6ewgCeU37Ye8XdUjTwxb2yqBLxt1/nmkGx3tsZGajY/QDFvfQw5j3lyZqP7itfW/rl6RtcGu9awhYAUwIDAQABo4GeMIGbMB0GA1UdDgQWBBQXNesB+85MXepaUJ2TNhR1LhdIwDAfBgNVHSMEGDAWgBQXNesB+85MXepaUJ2TNhR1LhdIwDAJBgNVHRMEAjAAME4GA1UdEQRHMEWCEnNoaXJhemZ1cm5pdHVyZS5pcoIXbWFpbC5zaGlyYXpmdXJuaXR1cmUuaXKCFnd3dy5zaGlyYXpmdXJuaXR1cmUuaXIwDQYJKoZIhvcNAQELBQADggEBAINv8JuqpprAsYme3IAMRditbr46kkjPsf4052ihfemjt2Y7ceTBu/0b9gH96YiXBUG1affmA7kIeDLq7tGqmBpaYhxZ815RNT2epIKZycvcCFcU2chPGeGXckyiiYt5jWkFp1FZNU/XLx6FX2RkLTjcpRuyvYcNKnqD65E0VawqtOdK+ZzQwqZvUm1AlSrm+ap5RCdKBmnmuS+XXEDP75nFQu30kTA/UV9TLZRe7e2FWLNeX9p42nFlnGdVki4DExbJmDxU8v+/IRY1lNOaklzqPIme9P2fh0HjxIf8WTyGyJmVfglfATB/O1j0Twc6WNoMggwqfOBipOXl5g4dMRo=","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:28:48 UTC","fingerprint_sha256":"63663230408e6e01bc6751385a59e905dd12bf6c3ff94738f161def1482f83b5","metadata":{"added_at":"2018-03-19 14:28:48 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-03-07 02:38:12 UTC","seen_in_scan":true,"source":"scan","updated_at":"2019-03-07 02:46:01 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"096f99f36f7924ffbda5540fa9b1ed76c36a5f74","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["wonmart.in","mail.wonmart.in","www.wonmart.in"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"096f99f36f7924ffbda5540fa9b1ed76c36a5f74"},"fingerprint_md5":"297565a2f2cf7950eb4fbd5eb1293c64","fingerprint_sha1":"18d6c6288ee2f01c62bb1d38c2d5cb0dd93d0bc5","fingerprint_sha256":"63663230408e6e01bc6751385a59e905dd12bf6c3ff94738f161def1482f83b5","issuer":{"common_name":["wonmart.in"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=wonmart.in","names":["www.wonmart.in","wonmart.in","mail.wonmart.in"],"redacted":false,"serial_number":"694483824","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"HO1cVfrOCAs6OmTNBlZNF8wcaZuCPdcRK2GneKjotqVRtfKhRWCVuoASD3/8lYy8yY3yol90xdKT45H1oZAeEWZMrYv/jZaWXwukUJOpusvGXOl2yKbuGJpTtwnRB6yjCUqbIOGnIXUz5BGZWn80nb91VEcTYAT/P6ClcBnUJ+xmOlbEopqQNQmlgEWkvqEOOf7jMXDIlbo+MBtQfiKzAF5wUDjtWcQ+7diLNvJsBy6CWeIQLoNJw2lnRb2+3lW1iKNHtXIQoqA5tHihR9DJhJuoNRJ6vIjx1tL6H6WeZqjE4GUcuRN+8q2wuKy7clsHS1JhLXCQk8qV7V3BVZTX1A=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"40959d2e7d356d193fbee22b782a4533c87c5ae7c55948e8b83a70331db1a65b","subject":{"common_name":["wonmart.in"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=wonmart.in","subject_key_info":{"fingerprint_sha256":"6998b7dad268a454ea3fb37e7f400f470f9893f79f381f8118c5d6fd7925a052","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vR38wSH03BXjhDQTv4Po5Y6wg71nWRTZlXOo5bPbvipuXYNXZd+X558WR1ds86J5wRUKHZEOmcPywY/Q7P0lD3c1G4MPhIVCOD3n4bmvBiTRwekiElAD56h+ehRvM+6carvmYp0JyUk4HPgBHIRMaHqU1oBQEehA4vBEjg4goJxt5zJYjWMnlzB78B6+97J8gzYTwBZWRUVDAI5tKwuGnwcq8vKiDc0JkGhejDQgPn/aaTdae0XC5vMOiu2f61c+7cp2GcAoD44W3CMh4Q0g1LS2RUCVXJNIoajtiwTpan7xidZCpK+BtHy8eM2VrP0I0dwhkWPVwaT1Cda73sUKFw=="}},"tbs_fingerprint":"7570797af60ec46b206d9c0639097ed48ecb36c8a469487075d5edc6734d5abf","tbs_noct_fingerprint":"7570797af60ec46b206d9c0639097ed48ecb36c8a469487075d5edc6734d5abf","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2019-03-06 11:20:20 UTC","length":"31536000","start":"2018-03-06 11:20:20 UTC"},"version":"3"},"precert":false,"raw":"MIIDLzCCAhegAwIBAgIEKWT7cDANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDAp3b25tYXJ0LmluMB4XDTE4MDMwNjExMjAyMFoXDTE5MDMwNjExMjAyMFowFTETMBEGA1UEAwwKd29ubWFydC5pbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0d/MEh9NwV44Q0E7+D6OWOsIO9Z1kU2ZVzqOWz274qbl2DV2Xfl+efFkdXbPOiecEVCh2RDpnD8sGP0Oz9JQ93NRuDD4SFQjg95+G5rwYk0cHpIhJQA+eofnoUbzPunGq75mKdCclJOBz4ARyETGh6lNaAUBHoQOLwRI4OIKCcbecyWI1jJ5cwe/AevveyfIM2E8AWVkVFQwCObSsLhp8HKvLyog3NCZBoXow0ID5/2mk3WntFwubzDortn+tXPu3KdhnAKA+OFtwjIeENINS0tkVAlVyTSKGo7YsE6Wp+8YnWQqSvgbR8vHjNlaz9CNHcIZFj1cGk9QnWu97FChcCAwEAAaOBhjCBgzAdBgNVHQ4EFgQUCW+Z8295JP+9pVQPqbHtdsNqX3QwHwYDVR0jBBgwFoAUCW+Z8295JP+9pVQPqbHtdsNqX3QwCQYDVR0TBAIwADA2BgNVHREELzAtggp3b25tYXJ0Lmlugg9tYWlsLndvbm1hcnQuaW6CDnd3dy53b25tYXJ0LmluMA0GCSqGSIb3DQEBCwUAA4IBAQAc7VxV+s4ICzo6ZM0GVk0XzBxpm4I91xErYad4qOi2pVG18qFFYJW6gBIPf/yVjLzJjfKiX3TF0pPjkfWhkB4RZkyti/+NlpZfC6RQk6m6y8Zc6XbIpu4YmlO3CdEHrKMJSpsg4achdTPkEZlafzSdv3VURxNgBP8/oKVwGdQn7GY6VsSimpA1CaWARaS+oQ45/uMxcMiVuj4wG1B+IrMAXnBQOO1ZxD7t2Is28mwHLoJZ4hAug0nDaWdFvb7eVbWIo0e1chCioDm0eKFH0MmEm6g1Enq8iPHW0vofpZ5mqMTgZRy5E37yrbC4rLtyWwdLUmEtcJCTypXtXcFVlNfU","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:23:58 UTC","fingerprint_sha256":"1572429e05603503b51e427a4c25e3bc8812d8984ed93c413a1c14eea3ee2ca1","metadata":{"added_at":"2018-03-19 14:23:58 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-03-17 01:51:59 UTC","seen_in_scan":true,"source":"scan","updated_at":"2019-03-17 01:52:00 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"b16ffaab3ced8b66da1dcb9c1241a599ae5bae91","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["flightglobal.ir","mail.flightglobal.ir","www.flightglobal.ir"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"b16ffaab3ced8b66da1dcb9c1241a599ae5bae91"},"fingerprint_md5":"675f2d8e4dc1bde427caf127ad085c40","fingerprint_sha1":"0aa6eb54ac6f62804c2ef278c1342fa5a17f03b8","fingerprint_sha256":"1572429e05603503b51e427a4c25e3bc8812d8984ed93c413a1c14eea3ee2ca1","issuer":{"common_name":["flightglobal.ir"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=flightglobal.ir","names":["www.flightglobal.ir","flightglobal.ir","mail.flightglobal.ir"],"redacted":false,"serial_number":"6238311351","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"i6IV6AwVpP7iNrDmr69eNtFVf0mbBAZF5rrPyK1erhR0YFArXotcsf89c54gR0VMq0Sms/qD420frkE5COczW/iLwk5sKfMsd42tftU/bPDhQEoZ+ZpEcDmhMfjYdqGLgfLRgLuP5qEBgDOp4UqO46ERkgPhFPx7C0i05lIbPCdmgYdwHaL0U0WOT730wrijb54p4RESJeJNQQFrrfAsgBmkKYGNV2ceW9cWf+MWfrRVik27ExFGhVHGNNx0w7N/ACjLQUCI763pPLO8+J2pETzqtidWxKUGy6FNObioop5ZKPTSDj1PinuSYqj0uzkXFO41rD/Qol0Fc/Jxo03DdA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"255435fa8d7bb212b26f31f6f8e5f551662dffba87541e1863352eca30b25ef8","subject":{"common_name":["flightglobal.ir"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=flightglobal.ir","subject_key_info":{"fingerprint_sha256":"267bf47a10eba15e874acde329cbd23a30e60b64c33905a2d063091201a56e70","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"yoE8loCeeqOayvUcIs4+rDBBboQNMabz50sd6PNKPQvYA66rBPnyw85sNVVTLJ2wxwrsUR0cj65hOJzywGejZWQbiDbSd4etWox8sn/yfGYhRfQA4xksMClvhs3omJBtMouHW2CVDHkgXyEDsMGJc/9s/On6pjp6rIh8hk6MXFUIEzk/9QrptLggTYW4FoxKK+Y213xzoFIhmYITcKhQsw2mKNJISByiFjqBeSXYbk6GgHzn8cX8TvtzIL6r12Hf56fBwNzVZ7kj0O8JcTJwdU8F8BSDKKKVrx9eHC9aMztcINyGOp7pWEdsKfYkJElHyephYOtW9OjY0m56UeEIVQ=="}},"tbs_fingerprint":"4f3bab4b32f5d5098dfad2c87db377a7651957cfe9656fc348749819e13b085d","tbs_noct_fingerprint":"4f3bab4b32f5d5098dfad2c87db377a7651957cfe9656fc348749819e13b085d","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2019-03-16 18:59:23 UTC","length":"31536000","start":"2018-03-16 18:59:23 UTC"},"version":"3"},"precert":false,"raw":"MIIDSTCCAjGgAwIBAgIFAXPVE7cwDQYJKoZIhvcNAQELBQAwGjEYMBYGA1UEAwwPZmxpZ2h0Z2xvYmFsLmlyMB4XDTE4MDMxNjE4NTkyM1oXDTE5MDMxNjE4NTkyM1owGjEYMBYGA1UEAwwPZmxpZ2h0Z2xvYmFsLmlyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyoE8loCeeqOayvUcIs4+rDBBboQNMabz50sd6PNKPQvYA66rBPnyw85sNVVTLJ2wxwrsUR0cj65hOJzywGejZWQbiDbSd4etWox8sn/yfGYhRfQA4xksMClvhs3omJBtMouHW2CVDHkgXyEDsMGJc/9s/On6pjp6rIh8hk6MXFUIEzk/9QrptLggTYW4FoxKK+Y213xzoFIhmYITcKhQsw2mKNJISByiFjqBeSXYbk6GgHzn8cX8TvtzIL6r12Hf56fBwNzVZ7kj0O8JcTJwdU8F8BSDKKKVrx9eHC9aMztcINyGOp7pWEdsKfYkJElHyephYOtW9OjY0m56UeEIVQIDAQABo4GVMIGSMB0GA1UdDgQWBBSxb/qrPO2LZtody5wSQaWZrluukTAfBgNVHSMEGDAWgBSxb/qrPO2LZtody5wSQaWZrluukTAJBgNVHRMEAjAAMEUGA1UdEQQ+MDyCD2ZsaWdodGdsb2JhbC5pcoIUbWFpbC5mbGlnaHRnbG9iYWwuaXKCE3d3dy5mbGlnaHRnbG9iYWwuaXIwDQYJKoZIhvcNAQELBQADggEBAIuiFegMFaT+4jaw5q+vXjbRVX9JmwQGRea6z8itXq4UdGBQK16LXLH/PXOeIEdFTKtEprP6g+NtH65BOQjnM1v4i8JObCnzLHeNrX7VP2zw4UBKGfmaRHA5oTH42Hahi4Hy0YC7j+ahAYAzqeFKjuOhEZID4RT8ewtItOZSGzwnZoGHcB2i9FNFjk+99MK4o2+eKeEREiXiTUEBa63wLIAZpCmBjVdnHlvXFn/jFn60VYpNuxMRRoVRxjTcdMOzfwAoy0FAiO+t6TyzvPidqRE86rYnVsSlBsuhTTm4qKKeWSj00g49T4p7kmKo9Ls5FxTuNaw/0KJdBXPycaNNw3Q=","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:26:34 UTC","fingerprint_sha256":"8b8e389723a7a49a0dac8d9ce324dec47fc832e1b05bfb85dbd94a9fdf67e0e7","metadata":{"added_at":"2018-03-19 14:26:34 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 15:38:57 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-30 06:13:28 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"86fa409e6d89d39908ac2aa751d4fddcd5455762","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["olecko.info","mail.olecko.info","www.olecko.info"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"86fa409e6d89d39908ac2aa751d4fddcd5455762"},"fingerprint_md5":"5402d5662265fd535c0d443ae48951fb","fingerprint_sha1":"33947d3b2fff33720a8e126ad41c266bfb0cbab3","fingerprint_sha256":"8b8e389723a7a49a0dac8d9ce324dec47fc832e1b05bfb85dbd94a9fdf67e0e7","issuer":{"common_name":["olecko.info"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=olecko.info","names":["olecko.info","mail.olecko.info","www.olecko.info"],"redacted":false,"serial_number":"9828839650","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"ibhnDoWIXPW0oabFueul696v6uMu1YoaHND1Q7FTbVdpq2uA0LN367X5tfgHETOsRECU2DcZNTiXWkcDiU0stU3Cn81MSdTGXHL+WnbjOOFeWI1fdFnPV8DZfUcP+f29jwcIrfJPkjsduHCHBjjHsDQXbZECw7tG5CTXWqF+0li3zfwch1i2TpOvQEI4XYZXsHCXPuyNevbfXL/Csit+GbCKaDCDiAt85Hr9PwEnVkSkPHv5O+B7+T/bIvaZtNLPpwceLVILFjria8/MejiqLC1euHbKUfdvqsAGhQ9OqlxLViisP88xE+xPvxu0eVYaLwWDqBGIS+vqmQibZ+LQ8w=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"30b2a038339cf97ea6df574b847513100c1f2db81cb5b5ddc86f7ed634734b40","subject":{"common_name":["olecko.info"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=olecko.info","subject_key_info":{"fingerprint_sha256":"5443df4e4d0bae3e0465c49c4a0e68753f30c38e4962a2a2e2ea3f5f8f901746","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"pYhQODahStRM5yObpw7gNHQcV/snskbrixmcS6f3rulgXTgflEpaOFSuHee1ghRlAhxij6hOfIOz3HJ76UfP6G7i/5GlymaUVDy7PWiWNT7Busaq6eB7kMg/lOysqXDMgxP5wkoXWfair9cMdyB2QyH25j7yZtHSMO8odOlSdfuBf47UuPK8Svu+A8++niVK2fUz38ZiKPGOvyfFiJIYq44C/hJPkK3YK4BjVAwAotkoZ57HIwnp5wNang/GQEr3oNGdru6xYmDnrvKGcPIOtGpE+1yO4zCX6w3u9CcJGDXGTPvfPU9JIASReCn1rvsDWHnPI+Gb7tY6C9wGNPQrEw=="}},"tbs_fingerprint":"7e08d7b7714b9097fc46f35c065c60a0e51c53da8a39f8d389c0fe67e8aade24","tbs_noct_fingerprint":"7e08d7b7714b9097fc46f35c065c60a0e51c53da8a39f8d389c0fe67e8aade24","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-06-10 01:46:04 UTC","length":"31536000","start":"2017-06-10 01:46:04 UTC"},"version":"3"},"precert":false,"raw":"MIIDNTCCAh2gAwIBAgIFAknYMOIwDQYJKoZIhvcNAQELBQAwFjEUMBIGA1UEAwwLb2xlY2tvLmluZm8wHhcNMTcwNjEwMDE0NjA0WhcNMTgwNjEwMDE0NjA0WjAWMRQwEgYDVQQDDAtvbGVja28uaW5mbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKWIUDg2oUrUTOcjm6cO4DR0HFf7J7JG64sZnEun967pYF04H5RKWjhUrh3ntYIUZQIcYo+oTnyDs9xye+lHz+hu4v+RpcpmlFQ8uz1oljU+wbrGqunge5DIP5TsrKlwzIMT+cJKF1n2oq/XDHcgdkMh9uY+8mbR0jDvKHTpUnX7gX+O1LjyvEr7vgPPvp4lStn1M9/GYijxjr8nxYiSGKuOAv4ST5Ct2CuAY1QMAKLZKGeexyMJ6ecDWp4PxkBK96DRna7usWJg567yhnDyDrRqRPtcjuMwl+sN7vQnCRg1xkz73z1PSSAEkXgp9a77A1h5zyPhm+7WOgvcBjT0KxMCAwEAAaOBiTCBhjAdBgNVHQ4EFgQUhvpAnm2J05kIrCqnUdT93NVFV2IwHwYDVR0jBBgwFoAUhvpAnm2J05kIrCqnUdT93NVFV2IwCQYDVR0TBAIwADA5BgNVHREEMjAwggtvbGVja28uaW5mb4IQbWFpbC5vbGVja28uaW5mb4IPd3d3Lm9sZWNrby5pbmZvMA0GCSqGSIb3DQEBCwUAA4IBAQCJuGcOhYhc9bShpsW566Xr3q/q4y7Vihoc0PVDsVNtV2mra4DQs3frtfm1+AcRM6xEQJTYNxk1OJdaRwOJTSy1TcKfzUxJ1MZccv5aduM44V5YjV90Wc9XwNl9Rw/5/b2PBwit8k+SOx24cIcGOMewNBdtkQLDu0bkJNdaoX7SWLfN/ByHWLZOk69AQjhdhlewcJc+7I169t9cv8KyK34ZsIpoMIOIC3zkev0/ASdWRKQ8e/k74Hv5P9si9pm00s+nBx4tUgsWOuJrz8x6OKosLV64dspR92+qwAaFD06qXEtWKKw/zzET7E+/G7R5VhovBYOoEYhL6+qZCJtn4tDz","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:24:52 UTC","fingerprint_sha256":"480ffbbfb50649e0bc9367bea9fe0944685b4a0aec5a0a7d02f2400834008c8c","metadata":{"added_at":"2018-03-19 14:24:52 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-01-31 01:45:14 UTC","seen_in_scan":true,"source":"scan","updated_at":"2019-01-31 01:45:14 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"e88d3517e8465fad8775af5f19b12117ee2317b8","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["fortniteandroid.gta5mobile.net","fortniteandroid.com","mail.fortniteandroid.com","www.fortniteandroid.com","www.fortniteandroid.gta5mobile.net"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"e88d3517e8465fad8775af5f19b12117ee2317b8"},"fingerprint_md5":"20b188a5e8ddd882b3fbdbb81ffb6e52","fingerprint_sha1":"21b650d5371b705774244d2bf074580c19d63dfa","fingerprint_sha256":"480ffbbfb50649e0bc9367bea9fe0944685b4a0aec5a0a7d02f2400834008c8c","issuer":{"common_name":["fortniteandroid.gta5mobile.net"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=fortniteandroid.gta5mobile.net","names":["fortniteandroid.gta5mobile.net","fortniteandroid.com","mail.fortniteandroid.com","www.fortniteandroid.com","www.fortniteandroid.gta5mobile.net"],"redacted":false,"serial_number":"2545649619","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"CzCpG5xfJIvXtt/w2K3cTiMLVMlfpHdG0qhRPmp/alN/QxPrk+XsvZy894m/c2Mxwa0MOQTHh3smJjusI9j53e90/UNql1r5EtWz435JysG7YNoyG9Z76mm2kU/44RhZsE3bfhAocSv/ecmAZic7FX88Ea4t9kgyszbeIJCRpK566Luh3liXTVMLfo87vMmhayDRD0/Y3/erKfurI47U4ZATggmPAqriwecQPM5Rj/2bJIDVzfK1+t/2jZNz51JTlFF//8SBl1F3yZrvq2uevR7zQwOr4TbOwrSW97aDrgd6BSKql5xi1pJtGB/uuE0rpLu874s46gIVirsyz7W3UQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"7d9272b40de8da3f7507e0d2fbf0cb5e5bed30a21123b47095c3a70b65b41390","subject":{"common_name":["fortniteandroid.gta5mobile.net"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=fortniteandroid.gta5mobile.net","subject_key_info":{"fingerprint_sha256":"514f9428efe409ab35074686dc0441db9a49a8ebc09ac819d10b95292d65b37f","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"5Fiqpgews28FTRReaNnVmLeY4Q7GtrejaejLlKsUcIr3Ni6kHwUP0306ytmbxnSRipbY+SVXyxKFaoM2E0fg8thTYaBxakYIsWGvV8iV7bzY8z2sgHDXR08hnLYyV0zgxvjuN4znnpYVLiM2e3yRhZMT9bPv0kJusgKTT5pGKWs4s/cOUnvJDxUW1wk600ut9s3pipmzVE0/ySsoGUOikcIKSlcpL+HG5egGmbJowLru7+MwGyAeaybxSRcWAU2lvqyq+xVl9+kFAXkR5sVXqVrzrMCyBFozHm6wyID+xrhtQzXzEZFwM58ZkQyS18J/w2TYCDiLgyp4ZrDNHO9RAw=="}},"tbs_fingerprint":"dcd99ca1fd17ca7740b0066f07045bcedb8130da4768d8a1a24bc67fe9589c36","tbs_noct_fingerprint":"dcd99ca1fd17ca7740b0066f07045bcedb8130da4768d8a1a24bc67fe9589c36","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2019-01-30 16:17:58 UTC","length":"31536000","start":"2018-01-30 16:17:58 UTC"},"version":"3"},"precert":false,"raw":"MIIDujCCAqKgAwIBAgIFAJe7h9MwDQYJKoZIhvcNAQELBQAwKTEnMCUGA1UEAwweZm9ydG5pdGVhbmRyb2lkLmd0YTVtb2JpbGUubmV0MB4XDTE4MDEzMDE2MTc1OFoXDTE5MDEzMDE2MTc1OFowKTEnMCUGA1UEAwweZm9ydG5pdGVhbmRyb2lkLmd0YTVtb2JpbGUubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5Fiqpgews28FTRReaNnVmLeY4Q7GtrejaejLlKsUcIr3Ni6kHwUP0306ytmbxnSRipbY+SVXyxKFaoM2E0fg8thTYaBxakYIsWGvV8iV7bzY8z2sgHDXR08hnLYyV0zgxvjuN4znnpYVLiM2e3yRhZMT9bPv0kJusgKTT5pGKWs4s/cOUnvJDxUW1wk600ut9s3pipmzVE0/ySsoGUOikcIKSlcpL+HG5egGmbJowLru7+MwGyAeaybxSRcWAU2lvqyq+xVl9+kFAXkR5sVXqVrzrMCyBFozHm6wyID+xrhtQzXzEZFwM58ZkQyS18J/w2TYCDiLgyp4ZrDNHO9RAwIDAQABo4HoMIHlMB0GA1UdDgQWBBTojTUX6EZfrYd1r18ZsSEX7iMXuDAfBgNVHSMEGDAWgBTojTUX6EZfrYd1r18ZsSEX7iMXuDAJBgNVHRMEAjAAMIGXBgNVHREEgY8wgYyCHmZvcnRuaXRlYW5kcm9pZC5ndGE1bW9iaWxlLm5ldIITZm9ydG5pdGVhbmRyb2lkLmNvbYIYbWFpbC5mb3J0bml0ZWFuZHJvaWQuY29tghd3d3cuZm9ydG5pdGVhbmRyb2lkLmNvbYIid3d3LmZvcnRuaXRlYW5kcm9pZC5ndGE1bW9iaWxlLm5ldDANBgkqhkiG9w0BAQsFAAOCAQEACzCpG5xfJIvXtt/w2K3cTiMLVMlfpHdG0qhRPmp/alN/QxPrk+XsvZy894m/c2Mxwa0MOQTHh3smJjusI9j53e90/UNql1r5EtWz435JysG7YNoyG9Z76mm2kU/44RhZsE3bfhAocSv/ecmAZic7FX88Ea4t9kgyszbeIJCRpK566Luh3liXTVMLfo87vMmhayDRD0/Y3/erKfurI47U4ZATggmPAqriwecQPM5Rj/2bJIDVzfK1+t/2jZNz51JTlFF//8SBl1F3yZrvq2uevR7zQwOr4TbOwrSW97aDrgd6BSKql5xi1pJtGB/uuE0rpLu874s46gIVirsyz7W3UQ==","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 02:26:09 UTC","fingerprint_sha256":"24c0585187f61eb8067d8ccbd9f75aa729ad2e354b01a76ff7f4b246a94f31e9","metadata":{"added_at":"2018-03-19 02:26:09 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 08:15:16 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-28 11:08:56 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"6bd5d034bb2662d3891433d8ed1fc6f6db36da5e","basic_constraints":{"is_ca":true},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_key_id":"6bd5d034bb2662d3891433d8ed1fc6f6db36da5e"},"fingerprint_md5":"352eb2e295ac585c9e045c01a97f7c42","fingerprint_sha1":"c6f2525caf3ea783e80b6632b96f94bb66c9fd58","fingerprint_sha256":"24c0585187f61eb8067d8ccbd9f75aa729ad2e354b01a76ff7f4b246a94f31e9","issuer":{"common_name":["mail.jaj.cz"],"country":["CZ"],"domain_component":[],"email_address":["webmaster@jaj.cz"],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Janovice nad Uhlavou"],"organization":["JaJ"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["Czech Republic"],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=CZ, ST=Czech Republic, L=Janovice nad Uhlavou, O=JaJ, CN=mail.jaj.cz, emailAddress=webmaster@jaj.cz","names":["mail.jaj.cz"],"redacted":false,"serial_number":"10088586713391443697","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"Wn5RN2FRfAzvOqRk8a34e7I9ljLQNfRAjKgR8WtKkp1QH8lsuISVRJJBwSFzuLajCMQBHxWS7zy0jPM1KJjBNLUWFEGWxm6PtqphE/QkwriIb0aF1PsWumI/DXwi3lmNZ/yPe5flKxjFZP6OF8dDxTdaA+zjrUhk7QNNMqYIHUC7bXl6HdqF+gGX0/eaHo4CFoMGtB+s4h9qDs29AQxxvg2SFV4QHF0LMHPcz2dvr9X606r0llR1WHw5oXQZ9DzGKMTQyxlLuTkB5FS/5DgawBykPWHpl4Vz3ZolElG8jP20HueTbBH5SC5dzLw/if8LnvbJwxb9DWCU9QKzZXwUZIgOGxHSplL5WyUUnHCd5zc9SNMt9ROWuz/t0ea9V6Gj/hfoujb5KwZCHRR0ICXdFnBUr2hS6wEzHb9oSLE04fGhwEiJFPIcic4FpDZLTxZFivxPkFdQpsPhHiC03HrD09SDE/K5bG5sTfLM3BRtpu0tvPa/iiZ+DrCwrbdxCXo6+odoxF+/s1E79C3vN8b40BpBQZJkIRpMGRHKhB5xrtA+pTo+XXnVoRFxot6A3f5n8eKJqsrurAKNaeZmqyhw01Hl0z7IRvC4h6i2GCOBzGR5MkMApp+197x0F+HQl7Ubo1tF/oWob299Rx5wWmekZptI5ypeEf8AyOrnqPkS/As="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"8ef98b2932c6519493e0c2cd6c055ee57fc24d818b38e417411a0dc38bf75f08","subject":{"common_name":["mail.jaj.cz"],"country":["CZ"],"domain_component":[],"email_address":["webmaster@jaj.cz"],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Janovice nad Uhlavou"],"organization":["JaJ"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["Czech Republic"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=CZ, ST=Czech Republic, L=Janovice nad Uhlavou, O=JaJ, CN=mail.jaj.cz, emailAddress=webmaster@jaj.cz","subject_key_info":{"fingerprint_sha256":"815b313950686917f503f5321ef419f749d2d37f642f02997dce24408ef47b82","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"qvyjVu7FMEYu0zS08C+wHMmRDRrAFDQIWuwsjwwkPw0l+LXae2+HdLmxFEt/XzzZgwWLJ5ah7UxgTEfO9c8DPvVpPmMy6OXZXegF5cFPh+y/JaPqLpMZrAOFNvVb700587WKPLUIY5sq4TUVekBk932Rkmxr37r7E/uvxmxZ8KSxJfyTBR4jwYZtAVcGlUYOOpoMPFT6LVbKOxGgBr5Zi4CzyBxMjDwmkiguOQ84m3J/YtwKgzCW91YphaqqGQ8mfpumKiCDsVmmwlYjeayvOxROBTCo1FaRZP8dJGMG5JFaDsFpr9YPTNUZ/lAPI/om+4ZGmlR1uaIXIVpOKgsR2fmfFTKkhy0SWqKtQzOAWCLVTZp+g44bfakOYOEOsMYCwH/1na4+KtySMQZ0mSDR4lS8YZt4UEDQe9nvuEgQZa8D9biGcWc83n+YDh16ZjhyHckJVlC7GxWNAe0BEKeAFFPYrJbesNkPoU6+TZVvvdncITVu5mzDZyHsnIZoxtgPNSig+MztfdP8WyhmaLNrIHkeAyg2bZbQveH615+PlBBdZ7Wzr3EDlPUs5Ez3aNoki253jSXZmMdO70hcSibwEUq1wtscYzE6Jbai3pCYJod7cw9puHM8M1Sw9+NXh4A8j3/LxRdpAUd0LUIG/0FsBVlzFwVJvjdBglg+PCruLok="}},"tbs_fingerprint":"71547b16d7e3408f89bc95601eb1e99bdb309e27445406876c39351526654fcc","tbs_noct_fingerprint":"71547b16d7e3408f89bc95601eb1e99bdb309e27445406876c39351526654fcc","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2028-03-11 20:40:18 UTC","length":"315360000","start":"2018-03-14 20:40:18 UTC"},"version":"3"},"precert":false,"raw":"MIIF6TCCA9GgAwIBAgIJAIwB3CoJbC7xMA0GCSqGSIb3DQEBCwUAMIGKMQswCQYDVQQGEwJDWjEXMBUGA1UECAwOQ3plY2ggUmVwdWJsaWMxHTAbBgNVBAcMFEphbm92aWNlIG5hZCBVaGxhdm91MQwwCgYDVQQKDANKYUoxFDASBgNVBAMMC21haWwuamFqLmN6MR8wHQYJKoZIhvcNAQkBFhB3ZWJtYXN0ZXJAamFqLmN6MB4XDTE4MDMxNDIwNDAxOFoXDTI4MDMxMTIwNDAxOFowgYoxCzAJBgNVBAYTAkNaMRcwFQYDVQQIDA5DemVjaCBSZXB1YmxpYzEdMBsGA1UEBwwUSmFub3ZpY2UgbmFkIFVobGF2b3UxDDAKBgNVBAoMA0phSjEUMBIGA1UEAwwLbWFpbC5qYWouY3oxHzAdBgkqhkiG9w0BCQEWEHdlYm1hc3RlckBqYWouY3owggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCq/KNW7sUwRi7TNLTwL7AcyZENGsAUNAha7CyPDCQ/DSX4tdp7b4d0ubEUS39fPNmDBYsnlqHtTGBMR871zwM+9Wk+YzLo5dld6AXlwU+H7L8lo+oukxmsA4U29VvvTTnztYo8tQhjmyrhNRV6QGT3fZGSbGvfuvsT+6/GbFnwpLEl/JMFHiPBhm0BVwaVRg46mgw8VPotVso7EaAGvlmLgLPIHEyMPCaSKC45Dzibcn9i3AqDMJb3VimFqqoZDyZ+m6YqIIOxWabCViN5rK87FE4FMKjUVpFk/x0kYwbkkVoOwWmv1g9M1Rn+UA8j+ib7hkaaVHW5ohchWk4qCxHZ+Z8VMqSHLRJaoq1DM4BYItVNmn6Djht9qQ5g4Q6wxgLAf/Wdrj4q3JIxBnSZINHiVLxhm3hQQNB72e+4SBBlrwP1uIZxZzzef5gOHXpmOHIdyQlWULsbFY0B7QEQp4AUU9islt6w2Q+hTr5NlW+92dwhNW7mbMNnIeychmjG2A81KKD4zO190/xbKGZos2sgeR4DKDZtltC94frXn4+UEF1ntbOvcQOU9SzkTPdo2iSLbneNJdmYx07vSFxKJvARSrXC2xxjMToltqLekJgmh3tzD2m4czwzVLD341eHgDyPf8vFF2kBR3QtQgb/QWwFWXMXBUm+N0GCWD48Ku4uiQIDAQABo1AwTjAdBgNVHQ4EFgQUa9XQNLsmYtOJFDPY7R/G9ts22l4wHwYDVR0jBBgwFoAUa9XQNLsmYtOJFDPY7R/G9ts22l4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAWn5RN2FRfAzvOqRk8a34e7I9ljLQNfRAjKgR8WtKkp1QH8lsuISVRJJBwSFzuLajCMQBHxWS7zy0jPM1KJjBNLUWFEGWxm6PtqphE/QkwriIb0aF1PsWumI/DXwi3lmNZ/yPe5flKxjFZP6OF8dDxTdaA+zjrUhk7QNNMqYIHUC7bXl6HdqF+gGX0/eaHo4CFoMGtB+s4h9qDs29AQxxvg2SFV4QHF0LMHPcz2dvr9X606r0llR1WHw5oXQZ9DzGKMTQyxlLuTkB5FS/5DgawBykPWHpl4Vz3ZolElG8jP20HueTbBH5SC5dzLw/if8LnvbJwxb9DWCU9QKzZXwUZIgOGxHSplL5WyUUnHCd5zc9SNMt9ROWuz/t0ea9V6Gj/hfoujb5KwZCHRR0ICXdFnBUr2hS6wEzHb9oSLE04fGhwEiJFPIcic4FpDZLTxZFivxPkFdQpsPhHiC03HrD09SDE/K5bG5sTfLM3BRtpu0tvPa/iiZ+DrCwrbdxCXo6+odoxF+/s1E79C3vN8b40BpBQZJkIRpMGRHKhB5xrtA+pTo+XXnVoRFxot6A3f5n8eKJqsrurAKNaeZmqyhw01Hl0z7IRvC4h6i2GCOBzGR5MkMApp+197x0F+HQl7Ubo1tF/oWob299Rx5wWmekZptI5ypeEf8AyOrnqPkS/As=","tags":["unexpired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"error","e_ca_common_name_missing":"pass","e_ca_country_name_invalid":"pass","e_ca_country_name_missing":"pass","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"error","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"pass","e_ca_subject_field_empty":"pass","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"na","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"na","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"pass","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"pass","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"error","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"na","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"na","e_sub_cert_cert_policy_empty":"na","e_sub_cert_certificate_policies_missing":"na","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"na","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"na","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"na","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"na","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"pass","w_root_ca_contains_cert_policy":"pass","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":false,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 14:24:08 UTC","fingerprint_sha256":"5583b5126289b6b402fee9c3d2e6d7a179cc76b65e2e0499731350bfb98bac10","metadata":{"added_at":"2018-03-19 14:24:08 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 14:05:43 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-30 04:14:39 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"7841a1fc8d21125a1a5461be0d8cbd2e844fd7dd","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["tedak.marketing","mail.tedak.marketing","www.tedak.marketing"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"7841a1fc8d21125a1a5461be0d8cbd2e844fd7dd"},"fingerprint_md5":"e05c6922582a8639d2297e56755e55b7","fingerprint_sha1":"5def798eef873b47dea58f2bbc0de8c83ff45058","fingerprint_sha256":"5583b5126289b6b402fee9c3d2e6d7a179cc76b65e2e0499731350bfb98bac10","issuer":{"common_name":["tedak.marketing"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=tedak.marketing","names":["mail.tedak.marketing","www.tedak.marketing","tedak.marketing"],"redacted":false,"serial_number":"185656592","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"HEaSWTmWswbZXOYstgMYov8p7hAw75u4v5+ZYynwVD0lVtlwQhJ4Wb+9ILJO5i5R3j8M7jdp3lBNj4Ho7tFz6ftD308KZ6s5WRJTfwCw5A2LoHa14rslGSTw/XL8ef0glvaKEnCGZLI5BYPdrhZisozaxSPN3vVKEzR7ZmA1V95IVv3FqzcjXf/VyNtqVy4NLlQymywry9JZtJyzC0Q13NVj3Rg6871y7rNOd9Be9ZG2ePrggy341r+ax8+tlAjxv58Y0GIWKDy+MssIvA8QxeBFd7WyOTbj/wgJ6YjUe2DuhVGaOY1KZQqNlGsG3Y7drWP0U69opbDJAwfYpuTerg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"286d641669f8871acdbfc994dc4626595210fafcc21aef68937149a4db2bef68","subject":{"common_name":["tedak.marketing"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=tedak.marketing","subject_key_info":{"fingerprint_sha256":"d0b674c0015dc8b410b4f048b31d54a93efe9038a466bcab048e184be0eb3431","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"o+UZTC7Mc9AFs0FipL5Nq1oC26QfpoM3YXhwsGwVasY0Q1T3gleSRqTtUQqhQaCQ2JzTLG3DQyQowBybUGKSeQvM/BDCLLMjddenkPp915XppNe9TzbB8SljdblVUt63xuGtZdBxsA0kt52YVGGzh/s4e6UgNQoT0PjEY58yuDu7+nR38DoqIpSFp7Kzqgo1Q8G4Ubd5C3v4xJlLvgBVbz8IarPn3d8kKTCHu99LzPZmb6PbSyudpKVOjTa6rsS86G4+WJkfRSUW77aPSr7UWetsd2JByzO4u/+0ZS19WlloLQSVpc/DehDYswY7yB2nzX2H0g4YEleODnGH9wD2OQ=="}},"tbs_fingerprint":"6051818d8434bb97bf40121db0d148e40b06f273e6dcfc99c3d317cb501c0055","tbs_noct_fingerprint":"6051818d8434bb97bf40121db0d148e40b06f273e6dcfc99c3d317cb501c0055","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2018-08-14 11:49:21 UTC","length":"31536000","start":"2017-08-14 11:49:21 UTC"},"version":"3"},"precert":false,"raw":"MIIDSDCCAjCgAwIBAgIECxDlEDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA90ZWRhay5tYXJrZXRpbmcwHhcNMTcwODE0MTE0OTIxWhcNMTgwODE0MTE0OTIxWjAaMRgwFgYDVQQDDA90ZWRhay5tYXJrZXRpbmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCj5RlMLsxz0AWzQWKkvk2rWgLbpB+mgzdheHCwbBVqxjRDVPeCV5JGpO1RCqFBoJDYnNMsbcNDJCjAHJtQYpJ5C8z8EMIssyN116eQ+n3Xlemk171PNsHxKWN1uVVS3rfG4a1l0HGwDSS3nZhUYbOH+zh7pSA1ChPQ+MRjnzK4O7v6dHfwOioilIWnsrOqCjVDwbhRt3kLe/jEmUu+AFVvPwhqs+fd3yQpMIe730vM9mZvo9tLK52kpU6NNrquxLzobj5YmR9FJRbvto9KvtRZ62x3YkHLM7i7/7RlLX1aWWgtBJWlz8N6ENizBjvIHafNfYfSDhgSV44OcYf3APY5AgMBAAGjgZUwgZIwHQYDVR0OBBYEFHhBofyNIRJaGlRhvg2MvS6ET9fdMB8GA1UdIwQYMBaAFHhBofyNIRJaGlRhvg2MvS6ET9fdMAkGA1UdEwQCMAAwRQYDVR0RBD4wPIIPdGVkYWsubWFya2V0aW5nghRtYWlsLnRlZGFrLm1hcmtldGluZ4ITd3d3LnRlZGFrLm1hcmtldGluZzANBgkqhkiG9w0BAQsFAAOCAQEAHEaSWTmWswbZXOYstgMYov8p7hAw75u4v5+ZYynwVD0lVtlwQhJ4Wb+9ILJO5i5R3j8M7jdp3lBNj4Ho7tFz6ftD308KZ6s5WRJTfwCw5A2LoHa14rslGSTw/XL8ef0glvaKEnCGZLI5BYPdrhZisozaxSPN3vVKEzR7ZmA1V95IVv3FqzcjXf/VyNtqVy4NLlQymywry9JZtJyzC0Q13NVj3Rg6871y7rNOd9Be9ZG2ePrggy341r+ax8+tlAjxv58Y0GIWKDy+MssIvA8QxeBFd7WyOTbj/wgJ6YjUe2DuhVGaOY1KZQqNlGsG3Y7drWP0U69opbDJAwfYpuTerg==","tags":["expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:29:06 UTC","fingerprint_sha256":"f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","metadata":{"added_at":"2018-03-19 14:29:06 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 07:46:22 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-28 10:33:31 UTC"},"parent_spki_subject_fingerprint":"969827ada86ca3937fbd175b784348ac242e9d64d2caaafd2ff432b65201f05c","parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.comodoca.com/cPanelIncCertificationAuthority.crt"],"ocsp_urls":["http://ocsp.comodoca.com"]},"authority_key_id":"7e035a65416ba77e0ae1b89d08ea1d8e1d6ac765","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://secure.comodo.com/CPS"],"id":"1.3.6.1.4.1.6449.1.2.2.52","user_notice":[]},{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]}],"crl_distribution_points":["http://crl.comodoca.com/cPanelIncCertificationAuthority.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["industrialstock.com","industrialstock.nepso.com.my","mail.industrialstock.com","webdisk.industrialstock.com","www.industrialstock.com","www.industrialstock.nepso.com.my"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"97fdf4d3a5370366faa0742b84e884ea69146fef"},"fingerprint_md5":"0e121af1e01b7a69e5f19b87b578d4fc","fingerprint_sha1":"378db2c5b23448ec17484d710b7b0a12b05dbedc","fingerprint_sha256":"f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","issuer":{"common_name":["cPanel, Inc. Certification Authority"],"country":["US"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Houston"],"organization":["cPanel, Inc."],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["TX"],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=US, ST=TX, L=Houston, O=cPanel, Inc., CN=cPanel, Inc. Certification Authority","names":["mail.industrialstock.com","webdisk.industrialstock.com","www.industrialstock.com","www.industrialstock.nepso.com.my","industrialstock.com","industrialstock.nepso.com.my"],"redacted":false,"serial_number":"153354952462140558398941816035815586752","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"HrICmXT94x/5EHDBSDrIQGs9erKFqeYnbLavpw9NsX71cliDZ7tAiETadxf0tOF7F6lygAPtlvzdTSdrL1N9kZpOUnWtuOdY/fOvDkTMNR1lt3gl3HAzx/VBPTX84gMgqAYdsTRYeAT71Hk992hAK7JX0Ak7yVGxpPxpNPbWK0AGvZS4gjgo/tp4ik1xRw9T1tc4vVb0UXMxNE1i2d5Dwh3TfwuEiYWqMoE0HfLimGrqG01HegliDpGsHptw9AhW1yOEFMlwtURZ/+f4ZkE+rwyHn2IuQNL9A0z+WOPtGIShvRSZOZMficJtAMR+leq8zhH6bN+LtUlc8ZArUp1APg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"a14d529d1ba3da6bb94d0a6371e3b0282010ca86cd8f1e2e736f44783094f272","subject":{"common_name":["industrialstock.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=industrialstock.com","subject_key_info":{"fingerprint_sha256":"0722cfcc50f6ee25dbe514674c8fb4574ab4ee5399e28a436b14070dce5e6087","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"pW+YY1Y/ifv0SdVwmCuQwZCRE6rC3hXvyIZVjrOHQSAqG9x21/w/FxKy0Nt7TEaQpzVQCXMG1YXzLG+kA/qWHwL1uM2EOyK0BX5GUQaQCDI0wj4eRr8CNjGOeut07kDqNc49l8WsJK7fRxxu+mmnJzq01mox9n+DfQLfrBNcUIIhCD+v4g9u3xRd9nCcAyFVtNSvyuFvWELp/Kzg4X1Oi6BSbLc0iX+zHpE9iU+KpGP8qxMy1HL3WVCxB524GRvMLRsvX1ODtXNEh36CoP9wMJIpzovSWzbEN5tB/6cxDHVP5/pqAxoFSKtdl0dFqglVEx8UwHRIY49SXpNM3hoXqw=="}},"tbs_fingerprint":"e86ef9dc0d4567ab908ccda0bf8c39d7e2812081ace809359b457d36423df5f1","tbs_noct_fingerprint":"e86ef9dc0d4567ab908ccda0bf8c39d7e2812081ace809359b457d36423df5f1","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2017-10-03 23:59:59 UTC","length":"7862399","start":"2017-07-05 00:00:00 UTC"},"version":"3"},"precert":false,"raw":"MIIFbjCCBFagAwIBAgIQc18W6ekZ3eEjzQSsDMX7wDANBgkqhkiG9w0BAQsFADByMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVFgxEDAOBgNVBAcTB0hvdXN0b24xFTATBgNVBAoTDGNQYW5lbCwgSW5jLjEtMCsGA1UEAxMkY1BhbmVsLCBJbmMuIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE3MDcwNTAwMDAwMFoXDTE3MTAwMzIzNTk1OVowHjEcMBoGA1UEAxMTaW5kdXN0cmlhbHN0b2NrLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKVvmGNWP4n79EnVcJgrkMGQkROqwt4V78iGVY6zh0EgKhvcdtf8PxcSstDbe0xGkKc1UAlzBtWF8yxvpAP6lh8C9bjNhDsitAV+RlEGkAgyNMI+Hka/AjYxjnrrdO5A6jXOPZfFrCSu30ccbvpppyc6tNZqMfZ/g30C36wTXFCCIQg/r+IPbt8UXfZwnAMhVbTUr8rhb1hC6fys4OF9TougUmy3NIl/sx6RPYlPiqRj/KsTMtRy91lQsQeduBkbzC0bL19Tg7VzRId+gqD/cDCSKc6L0ls2xDebQf+nMQx1T+f6agMaBUirXZdHRaoJVRMfFMB0SGOPUl6TTN4aF6sCAwEAAaOCAlIwggJOMB8GA1UdIwQYMBaAFH4DWmVBa6d+CuG4nQjqHY4dasdlMB0GA1UdDgQWBBSX/fTTpTcDZvqgdCuE6ITqaRRv7zAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwTwYDVR0gBEgwRjA6BgsrBgEEAbIxAQICNDArMCkGCCsGAQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8uY29tL0NQUzAIBgZngQwBAgEwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL2NybC5jb21vZG9jYS5jb20vY1BhbmVsSW5jQ2VydGlmaWNhdGlvbkF1dGhvcml0eS5jcmwwfQYIKwYBBQUHAQEEcTBvMEcGCCsGAQUFBzAChjtodHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9jUGFuZWxJbmNDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMIGwBgNVHREEgagwgaWCE2luZHVzdHJpYWxzdG9jay5jb22CHGluZHVzdHJpYWxzdG9jay5uZXBzby5jb20ubXmCGG1haWwuaW5kdXN0cmlhbHN0b2NrLmNvbYIbd2ViZGlzay5pbmR1c3RyaWFsc3RvY2suY29tghd3d3cuaW5kdXN0cmlhbHN0b2NrLmNvbYIgd3d3LmluZHVzdHJpYWxzdG9jay5uZXBzby5jb20ubXkwDQYJKoZIhvcNAQELBQADggEBAB6yApl0/eMf+RBwwUg6yEBrPXqyhanmJ2y2r6cPTbF+9XJYg2e7QIhE2ncX9LThexepcoAD7Zb83U0nay9TfZGaTlJ1rbjnWP3zrw5EzDUdZbd4JdxwM8f1QT01/OIDIKgGHbE0WHgE+9R5PfdoQCuyV9AJO8lRsaT8aTT21itABr2UuII4KP7aeIpNcUcPU9bXOL1W9FFzMTRNYtneQ8Id038LhImFqjKBNB3y4phq6htNR3oJYg6RrB6bcPQIVtcjhBTJcLVEWf/n+GZBPq8Mh59iLkDS/QNM/ljj7RiEob0UmTmTH4nCbQDEfpXqvM4R+mzfi7VJXPGQK1KdQD4=","tags":["expired","was-trusted"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba"],"paths":[{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","925e4b372ba32e5e87302284b2d7c9dfbf8200ffcba0d16603a1a06ff76cd353","85fb2f91dd12275a0145b636534f84024ad68b69b8ee88684ff711375805b348"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","52f0e1c4e58ec629291b60317f074671b85d7ea80d5b07273463534b32b40234"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","abc566bed75e481f8681c4408113eccf9f7b8e79091688c0b139d55058622311","6ea54741d004667eed1b4816634aa3a79e6e4b96950f8279dafc8d9bd8812137"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","6b87d15f4c5992c934b58a0ddfd5b75fd7d37e130982787ac250f633dcb26ffb","85fb2f91dd12275a0145b636534f84024ad68b69b8ee88684ff711375805b348"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","687fa451382278fff0c8b11f8d43d576671c6eb2bceab413fb83d965d06d2ff2"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba"],"paths":[{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","925e4b372ba32e5e87302284b2d7c9dfbf8200ffcba0d16603a1a06ff76cd353","85fb2f91dd12275a0145b636534f84024ad68b69b8ee88684ff711375805b348"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","52f0e1c4e58ec629291b60317f074671b85d7ea80d5b07273463534b32b40234"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","6b87d15f4c5992c934b58a0ddfd5b75fd7d37e130982787ac250f633dcb26ffb","85fb2f91dd12275a0145b636534f84024ad68b69b8ee88684ff711375805b348"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","cd9987eaaeb446853a9d6b0c69a19a9aa25546676de72e921154fbe067cfe1ab","6ea54741d004667eed1b4816634aa3a79e6e4b96950f8279dafc8d9bd8812137"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","687fa451382278fff0c8b11f8d43d576671c6eb2bceab413fb83d965d06d2ff2"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba"],"paths":[{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","abc566bed75e481f8681c4408113eccf9f7b8e79091688c0b139d55058622311","6ea54741d004667eed1b4816634aa3a79e6e4b96950f8279dafc8d9bd8812137"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","52f0e1c4e58ec629291b60317f074671b85d7ea80d5b07273463534b32b40234"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","cd9987eaaeb446853a9d6b0c69a19a9aa25546676de72e921154fbe067cfe1ab","6ea54741d004667eed1b4816634aa3a79e6e4b96950f8279dafc8d9bd8812137"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","687fa451382278fff0c8b11f8d43d576671c6eb2bceab413fb83d965d06d2ff2"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba"],"paths":[{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","abc566bed75e481f8681c4408113eccf9f7b8e79091688c0b139d55058622311","6ea54741d004667eed1b4816634aa3a79e6e4b96950f8279dafc8d9bd8812137"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","52f0e1c4e58ec629291b60317f074671b85d7ea80d5b07273463534b32b40234"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","cd9987eaaeb446853a9d6b0c69a19a9aa25546676de72e921154fbe067cfe1ab","6ea54741d004667eed1b4816634aa3a79e6e4b96950f8279dafc8d9bd8812137"]},{"path":["f16de7344cdad3f8685ee024414484a0e89ea07edf55c5eb19b74323014067aa","821cc55ce7ec5c74febb42f624eb6a36c478215a31ed67e3cf723a67e8c75eba","4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da","687fa451382278fff0c8b11f8d43d576671c6eb2bceab413fb83d965d06d2ff2"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"pass","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"pass","e_sub_cert_crl_distribution_points_marked_critical":"pass","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"pass","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"pass","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 05:03:50 UTC","ct":{"cloudflare_nimbus_2019":{"added_to_ct_at":"2018-03-19 04:43:35 UTC","ct_to_censys_at":"2018-07-30 05:03:26 UTC","index":"396194"},"google_argon_2019":{"added_to_ct_at":"2018-10-01 19:21:16 UTC","ct_to_censys_at":"2018-10-01 19:23:04 UTC","index":"13224559"}},"fingerprint_sha256":"d5535bace10b810ae04be44a4c3f225fac3109ec518b646f4174e60c8990a335","metadata":{"added_at":"2018-03-19 05:03:50 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-05-13 02:00:56 UTC","seen_in_scan":false,"source":"ct","updated_at":"2019-05-13 02:01:01 UTC"},"parent_spki_subject_fingerprint":"648de3b81b445341d18796394a19aaa1ba253f4f634923fc42883f77cfae7772","parents":[],"parsed":{"extensions":{"authority_key_id":"e93c04e1802fc284132d26709ef2fd1acfaafec6","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"server_auth":true,"unknown":[],"value":[]},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["flowers-to-the-world.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"e695526f03bba4e85b42e07c23a1f86829dbec9f"},"fingerprint_md5":"ea8d551f5c0d2c0b1c1d0d36f612e653","fingerprint_sha1":"8c4d9f01e9d9fa5ea1b03c38c60d067f061b6196","fingerprint_sha256":"d5535bace10b810ae04be44a4c3f225fac3109ec518b646f4174e60c8990a335","issuer":{"common_name":["Merge Delay Intermediate 1"],"country":["GB"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Google UK Ltd."],"organization_id":[],"organizational_unit":["Certificate Transparency"],"postal_code":[],"province":["London"],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=GB, ST=London, O=Google UK Ltd., OU=Certificate Transparency, CN=Merge Delay Intermediate 1","names":["flowers-to-the-world.com"],"redacted":false,"serial_number":"1521434614835228","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"CuZY5cB7oBPW7FMFlK7zKuwr/18id+QAGOQRIRa8YxltZTh7QlZ5ug9V2+MdIIAe1F/801+EAw2iMEW6Y4u+YFJH+pY6PAxN5FkuQw/45Lgb4am4gCyB15tQZ5ezlsR3cxKeD4oMPqcWWBYK7r40XaYhkgVOXfE5/tn+ul3Xu1xd8vvqTvkPtLtU52n0PG6I0WpMoS7SOqdok9P7iLqIR/Go14o76jCHR4GoeY23avB4u9sXJh1TVEvBct/mkmYbfhbhDtsMxkeZCCaBLHfgO1f0xc96wyjZ5K/ITE//i6BuXHGSx5boU6UYfgl3vOdioLAtzlXwUQsmNy3CeY5N1kpeyzx9h9KR+uIo0snmKg+/suxdccz5yS72wV9rl5gP2FJdt2gIsnr+QrpP2E8w2z+09yYfXi35Q+mnTvUgF73y/QMAppV0TS1jHaPG8RUgml24Bg5NHaxcyLNkTFXFswrn5xVE84KmtaODWLROfGBFtDWQkSlDg+V3vrF7j0Rq1BGVvJBW9AK4XW1EHNnZL2VG5g3No7/YfWWdxOtvb39pye4RNPtW2aqac/am+tyC4guPMEoqIIg+pH3IGg4ROFRWRmO7TtDJoaskg/CgcT2u/2xkkMxk/VZDRVzlctGjeEekDdzqoIBBHP2M+tcETXBj8vOHBNouOacAfk6h0jo="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"7b99c4db85a0953854d0425020948fcf3f5cbe908be2653b8c85f92c3dad9270","subject":{"common_name":[],"country":["GB"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["London"],"organization":["Google Certificate Transparency"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":["1521434614835228"],"street_address":[],"surname":[]},"subject_dn":"C=GB, L=London, O=Google Certificate Transparency, serialNumber=1521434614835228","subject_key_info":{"fingerprint_sha256":"232316ad028b5f41aef0698b06834b6a81c6ec887484cf1f4fd0ca03c012cccf","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"6FMXOSRzrQ5fEcRScnSqRXzPG/7cnj7VYXpETWtVwsEr43k/oL6U7rqrnu7IOlNXwaghUEk+z1N9dwv1yUazjag1akeDCjYpgpF3q4nypmUnvnrW6TPTxuvhHGPhq9R7dWC3UlilRp4mPIJzkCSWUIZcYiGspFhq+rDNfJvyypzyYe49LeASx/jmFsdbNWq2MJN50d+viuKw3DQ1TP5tu01clBlwWQvc0MG4gLkK5lhovHhsp1ahCsDSXMVVeRxJ7ty3H3WRr7ItoV6KrvohtLa7CRzVMeToLTWrJCNc5R9RwkG2p4IdwRGYUoxNctBu34XnKiK0vd4OOf3Z+OB/EQ=="}},"tbs_fingerprint":"ba77146bb5805474f12e67791a7ceeb6c0699e21143934b34302302f591e7e96","tbs_noct_fingerprint":"9a40db3986f58321ba01253bfad55ab2236c0aca80e8120443ac08e9c621e57b","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2019-05-12 10:20:44 UTC","length":"36221830","start":"2018-03-19 04:43:34 UTC"},"version":"3"},"precert":true,"raw":"MIIFBDCCAuygAwIBAgIHBWe8mcQoHDANBgkqhkiG9w0BAQsFADB/MQswCQYDVQQGEwJHQjEPMA0GA1UECAwGTG9uZG9uMRcwFQYDVQQKDA5Hb29nbGUgVUsgTHRkLjEhMB8GA1UECwwYQ2VydGlmaWNhdGUgVHJhbnNwYXJlbmN5MSMwIQYDVQQDDBpNZXJnZSBEZWxheSBJbnRlcm1lZGlhdGUgMTAeFw0xODAzMTkwNDQzMzRaFw0xOTA1MTIxMDIwNDRaMGMxCzAJBgNVBAYTAkdCMQ8wDQYDVQQHDAZMb25kb24xKDAmBgNVBAoMH0dvb2dsZSBDZXJ0aWZpY2F0ZSBUcmFuc3BhcmVuY3kxGTAXBgNVBAUTEDE1MjE0MzQ2MTQ4MzUyMjgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDoUxc5JHOtDl8RxFJydKpFfM8b/tyePtVhekRNa1XCwSvjeT+gvpTuuque7sg6U1fBqCFQST7PU313C/XJRrONqDVqR4MKNimCkXerifKmZSe+etbpM9PG6+EcY+Gr1Ht1YLdSWKVGniY8gnOQJJZQhlxiIaykWGr6sM18m/LKnPJh7j0t4BLH+OYWx1s1arYwk3nR36+K4rDcNDVM/m27TVyUGXBZC9zQwbiAuQrmWGi8eGynVqEKwNJcxVV5HEnu3LcfdZGvsi2hXoqu+iG0trsJHNUx5OgtNaskI1zlH1HCQbangh3BEZhSjE1y0G7fhecqIrS93g45/dn44H8RAgMBAAGjgaAwgZ0wEwYDVR0lBAwwCgYIKwYBBQUHAwEwIwYDVR0RBBwwGoIYZmxvd2Vycy10by10aGUtd29ybGQuY29tMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAU6TwE4YAvwoQTLSZwnvL9Gs+q/sYwHQYDVR0OBBYEFOaVUm8Du6ToW0LgfCOh+Ggp2+yfMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4ICAQAK5ljlwHugE9bsUwWUrvMq7Cv/XyJ35AAY5BEhFrxjGW1lOHtCVnm6D1Xb4x0ggB7UX/zTX4QDDaIwRbpji75gUkf6ljo8DE3kWS5DD/jkuBvhqbiALIHXm1Bnl7OWxHdzEp4Pigw+pxZYFgruvjRdpiGSBU5d8Tn+2f66Xde7XF3y++pO+Q+0u1TnafQ8bojRakyhLtI6p2iT0/uIuohH8ajXijvqMIdHgah5jbdq8Hi72xcmHVNUS8Fy3+aSZht+FuEO2wzGR5kIJoEsd+A7V/TFz3rDKNnkr8hMT/+LoG5ccZLHluhTpRh+CXe852KgsC3OVfBRCyY3LcJ5jk3WSl7LPH2H0pH64ijSyeYqD7+y7F1xzPnJLvbBX2uXmA/YUl23aAiyev5Cuk/YTzDbP7T3Jh9eLflD6adO9SAXvfL9AwCmlXRNLWMdo8bxFSCaXbgGDk0drFzIs2RMVcWzCufnFUTzgqa1o4NYtE58YEW0NZCRKUOD5Xe+sXuPRGrUEZW8kFb0ArhdbUQc2dkvZUbmDc2jv9h9ZZ3E629vf2nJ7hE0+1bZqppz9qb63ILiC48wSiogiD6kfcgaDhE4VFZGY7tO0MmhqySD8KBxPa7/bGSQzGT9VkNFXOVy0aN4R6QN3OqggEEc/Yz61wRNcGPy84cE2i45pwB+TqHSOg==","tags":["ct","expired","was-trusted","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["0ac607a81e0828b60dc88034cccafd982cddf95b3a0efd1f8cd59232e5fb754f","adb4a7e96552b132901fa13917b030bb8e0f9afe391416c4abd6598a63d09925"],"paths":[{"path":["d5535bace10b810ae04be44a4c3f225fac3109ec518b646f4174e60c8990a335","0ac607a81e0828b60dc88034cccafd982cddf95b3a0efd1f8cd59232e5fb754f","86d8219c7e2b6009e37eb14356268489b81379e076e8f372e3dde8c162a34134"]},{"path":["d5535bace10b810ae04be44a4c3f225fac3109ec518b646f4174e60c8990a335","adb4a7e96552b132901fa13917b030bb8e0f9afe391416c4abd6598a63d09925","86d8219c7e2b6009e37eb14356268489b81379e076e8f372e3dde8c162a34134"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"na","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"pass","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"warn","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":false,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 11:48:10 UTC","ct":{"cnnic_ctserver":{"added_to_ct_at":"2018-09-21 09:49:22 UTC","ct_to_censys_at":"2018-09-21 10:36:49 UTC","index":"50497"},"google_argon_2020":{"added_to_ct_at":"2018-03-24 05:34:33 UTC","ct_to_censys_at":"2018-07-30 06:22:30 UTC","index":"943919"}},"fingerprint_sha256":"3203db7a7448383e469670d0362ca079dd0d5bb5588ee1711090a50050761a10","metadata":{"added_at":"2018-03-19 11:48:10 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2020-09-24 08:02:40 UTC","seen_in_scan":false,"source":"ct_chain","updated_at":"2020-09-24 08:02:44 UTC"},"parent_spki_subject_fingerprint":"648de3b81b445341d18796394a19aaa1ba253f4f634923fc42883f77cfae7772","parents":[],"parsed":{"extensions":{"authority_key_id":"e93c04e1802fc284132d26709ef2fd1acfaafec6","basic_constraints":{"is_ca":true},"certificate_policies":[],"crl_distribution_points":[],"extended_key_usage":{"unknown":["1.3.6.1.4.1.11129.2.4.4"],"value":[]},"signed_certificate_timestamps":[],"subject_key_id":"78eb70f56076d750dc70e224b957927cd64a97d3"},"fingerprint_md5":"3f1e9286745819fea851f54eb3aa869a","fingerprint_sha1":"de09bcc1da832f383370495f3782d4b07409cba2","fingerprint_sha256":"3203db7a7448383e469670d0362ca079dd0d5bb5588ee1711090a50050761a10","issuer":{"common_name":["Merge Delay Intermediate 1"],"country":["GB"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Google UK Ltd."],"organization_id":[],"organizational_unit":["Certificate Transparency"],"postal_code":[],"province":["London"],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=GB, ST=London, O=Google UK Ltd., OU=Certificate Transparency, CN=Merge Delay Intermediate 1","names":[],"redacted":false,"serial_number":"1521456215585678","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA1-RSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"YplLbgmXFuEdjaZml6HXL8jCDefR0jYU7/e/KyURRCgk1Ym0b6DW8I3BDeW69p4obw+CqnuK0L3LCOT+9xY92sisMv2+yzBJ9I9HOdkTtRePChLBoiTB1px47u6Uh182gcAwEWnrnYhM//AJjr43yAHa73LAm3kPdGVAistE1jziZwwo4xbHs0sH2xs/+d7mpdTt3ZbmOr3ODYYYw+XVgGpxfnuWNldmGofyue44gYwuwb36Fg77NZCAXUsJZCQ5TWbDZXALm9ycq1QwhrApCNbQW5hzLeo4y7mXyjVzyJ4D41rNvpAoYF8FVcpbTB/fpy13eAJHpmLBvqxBC2lV6azrQKXo1sue2Qx1drKv131Z/CNKMIHrC78Q1xVl7SAPbOGB0JdqvsdIP86sc6oJYQBzVnpga5Jy7DBXYW7DsZYvx4wM5DbHQDTa7GqX0+QLddIyuWhOU44ro6xBzg8/O+X+dgYP5v16C20UZI1IjdVt4KwL+JoI1w+ob3AEnZ0HQDCXsKiTeTwopRkq/e2rQOAzM0vsSE47+V0/DZj1I4SPq8AOa83FoakPro2/59zoMzv5bTWtfwIb0ZUYJe3+aDDsUCTaRslj7lTOBvynmbqrqBWPSaSLbu0lMjxirGgiVq71YtJC2G5cooMG8PeOBCirSakDDxRNZRAYaQBUVk4="},"signature_algorithm":{"name":"SHA1-RSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"f61152206f87f2f6dee7d17f70713a5cb5f9c2476c234a86ce3963a4d8e7578a","subject":{"common_name":[],"country":["GB"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["London"],"organization":["Google Certificate Transparency (Precert Signing)"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":["1521456215585678"],"street_address":[],"surname":[]},"subject_dn":"C=GB, L=London, O=Google Certificate Transparency (Precert Signing), serialNumber=1521456215585678","subject_key_info":{"fingerprint_sha256":"cfbe7c58de0540b7c860daa8f13eda9aa306bb92741a936920c6185014dc3786","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"ykrCbM2yIbjPHzPJQKUTzVuE2On1g1/dXC4L/GATGpXzUn+vCXBlC3/Ks37OpAb8cceatsmZaR7gqpyprOaBn/PvKf0386cdlK+chx2iLvLrKUJDqkKiiZbECOZdoSayKI+usgEHezTeo5mZTEcB7UU/vc+WqRPI+e3DaGwpM3nF1HCpj+pxQFGf1hcY50D3ztxCY+aqC7oP7FQzMQPhzwJh2YdGoPTCtjvTwjsz84wH3+pJB1GV4gD27NSyQfDyEOJvOpiQOA1QPmnmk73kAMA2WGCiHZJ3i1pOvnC57cAOJ/OQqIRZUWVzGYm8+35F2Hf15iuQb+AVpPlPfrNX/Q=="}},"tbs_fingerprint":"87ba3cbccbe01bc8583f317a9f81597a31ac18b289099e4a1ccc90b0010d881b","tbs_noct_fingerprint":"87ba3cbccbe01bc8583f317a9f81597a31ac18b289099e4a1ccc90b0010d881b","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2020-09-24 04:36:18 UTC","length":"79465963","start":"2018-03-19 10:43:35 UTC"},"version":"3"},"precert":false,"raw":"MIIE4jCCAsqgAwIBAgIHBWfBoUVzjjANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEPMA0GA1UECAwGTG9uZG9uMRcwFQYDVQQKDA5Hb29nbGUgVUsgTHRkLjEhMB8GA1UECwwYQ2VydGlmaWNhdGUgVHJhbnNwYXJlbmN5MSMwIQYDVQQDDBpNZXJnZSBEZWxheSBJbnRlcm1lZGlhdGUgMTAeFw0xODAzMTkxMDQzMzVaFw0yMDA5MjQwNDM2MThaMHUxCzAJBgNVBAYTAkdCMQ8wDQYDVQQHDAZMb25kb24xOjA4BgNVBAoMMUdvb2dsZSBDZXJ0aWZpY2F0ZSBUcmFuc3BhcmVuY3kgKFByZWNlcnQgU2lnbmluZykxGTAXBgNVBAUTEDE1MjE0NTYyMTU1ODU2NzgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKSsJszbIhuM8fM8lApRPNW4TY6fWDX91cLgv8YBMalfNSf68JcGULf8qzfs6kBvxxx5q2yZlpHuCqnKms5oGf8+8p/Tfzpx2Ur5yHHaIu8uspQkOqQqKJlsQI5l2hJrIoj66yAQd7NN6jmZlMRwHtRT+9z5apE8j57cNobCkzecXUcKmP6nFAUZ/WFxjnQPfO3EJj5qoLug/sVDMxA+HPAmHZh0ag9MK2O9PCOzPzjAff6kkHUZXiAPbs1LJB8PIQ4m86mJA4DVA+aeaTveQAwDZYYKIdkneLWk6+cLntwA4n85CohFlRZXMZibz7fkXYd/XmK5Bv4BWk+U9+s1f9AgMBAAGjbTBrMBgGA1UdJQEB/wQOMAwGCisGAQQB1nkCBAQwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTpPAThgC/ChBMtJnCe8v0az6r+xjAdBgNVHQ4EFgQUeOtw9WB211DccOIkuVeSfNZKl9MwDQYJKoZIhvcNAQEFBQADggIBAGKZS24JlxbhHY2mZpeh1y/Iwg3n0dI2FO/3vyslEUQoJNWJtG+g1vCNwQ3luvaeKG8Pgqp7itC9ywjk/vcWPdrIrDL9vsswSfSPRznZE7UXjwoSwaIkwdaceO7ulIdfNoHAMBFp652ITP/wCY6+N8gB2u9ywJt5D3RlQIrLRNY84mcMKOMWx7NLB9sbP/ne5qXU7d2W5jq9zg2GGMPl1YBqcX57ljZXZhqH8rnuOIGMLsG9+hYO+zWQgF1LCWQkOU1mw2VwC5vcnKtUMIawKQjW0FuYcy3qOMu5l8o1c8ieA+Nazb6QKGBfBVXKW0wf36ctd3gCR6Ziwb6sQQtpVems60Cl6NbLntkMdXayr9d9WfwjSjCB6wu/ENcVZe0gD2zhgdCXar7HSD/OrHOqCWEAc1Z6YGuScuwwV2Fuw7GWL8eMDOQ2x0A02uxql9PkC3XSMrloTlOOK6OsQc4PPzvl/nYGD+b9egttFGSNSI3VbeCsC/iaCNcPqG9wBJ2dB0Awl7Cok3k8KKUZKv3tq0DgMzNL7EhOO/ldPw2Y9SOEj6vADmvNxaGpD66Nv+fc6DM7+W01rX8CG9GVGCXt/mgw7FAk2kbJY+5Uzgb8p5m6q6gVj0mki27tJTI8YqxoIlau9WLSQthuXKKDBvD3jgQoq0mpAw8UTWUQGGkAVFZO","tags":["ct","expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[{"path":["3203db7a7448383e469670d0362ca079dd0d5bb5588ee1711090a50050761a10","adb4a7e96552b132901fa13917b030bb8e0f9afe391416c4abd6598a63d09925","86d8219c7e2b6009e37eb14356268489b81379e076e8f372e3dde8c162a34134"]},{"path":["3203db7a7448383e469670d0362ca079dd0d5bb5588ee1711090a50050761a10","0ac607a81e0828b60dc88034cccafd982cddf95b3a0efd1f8cd59232e5fb754f","86d8219c7e2b6009e37eb14356268489b81379e076e8f372e3dde8c162a34134"]}],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"pass","e_ca_common_name_missing":"error","e_ca_country_name_invalid":"pass","e_ca_country_name_missing":"pass","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"error","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"pass","e_ca_subject_field_empty":"pass","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"na","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"pass","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"error","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"error","e_sub_ca_certificate_policies_missing":"error","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"error","e_sub_cert_aia_does_not_contain_ocsp_url":"na","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"na","e_sub_cert_cert_policy_empty":"na","e_sub_cert_certificate_policies_missing":"na","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"na","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"error","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"na","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"notice","n_subject_common_name_included":"na","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"na","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_sub_ca_aia_does_not_contain_issuing_ca_url":"warn","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"warn","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 07:47:50 UTC","ct":{"cloudflare_nimbus_2020":{"added_to_ct_at":"2018-03-19 06:43:35 UTC","ct_to_censys_at":"2018-07-30 04:26:20 UTC","index":"27691"},"google_argon_2020":{"added_to_ct_at":"2018-10-01 19:06:45 UTC","ct_to_censys_at":"2018-10-01 19:07:59 UTC","index":"2495350"}},"fingerprint_sha256":"5cb92715d594fa2a62eb01614fec953fc6648cada0797df1165b6e104e587fcf","metadata":{"added_at":"2018-03-19 07:47:50 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2020-07-24 14:50:24 UTC","seen_in_scan":false,"source":"ct","updated_at":"2020-07-24 14:50:25 UTC"},"parent_spki_subject_fingerprint":"648de3b81b445341d18796394a19aaa1ba253f4f634923fc42883f77cfae7772","parents":[],"parsed":{"extensions":{"authority_key_id":"e93c04e1802fc284132d26709ef2fd1acfaafec6","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"server_auth":true,"unknown":[],"value":[]},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["flowers-to-the-world.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"58834e047d2f1a6c60ede523cf4f8fbf48561a46"},"fingerprint_md5":"fd6b7c3154d1e4e3d4415ccdabdc86d5","fingerprint_sha1":"0c042bc3e6ed4c1d3cb31d34d22ec2674fd404e6","fingerprint_sha256":"5cb92715d594fa2a62eb01614fec953fc6648cada0797df1165b6e104e587fcf","issuer":{"common_name":["Merge Delay Intermediate 1"],"country":["GB"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Google UK Ltd."],"organization_id":[],"organizational_unit":["Certificate Transparency"],"postal_code":[],"province":["London"],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=GB, ST=London, O=Google UK Ltd., OU=Certificate Transparency, CN=Merge Delay Intermediate 1","names":["flowers-to-the-world.com"],"redacted":false,"serial_number":"1521441815647143","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"LvYwb21YJhQFxbwv2AiZt1qsJwjbwqc4lD+Ndn/fGczF1ybVKocVL7qy9m6JA/amASq9c7kV0w8kCFkFz25gJr2iIeQQ18h4SmOGGtX7nN9odGyIrn5vaGOki9bblC+9dSQj4Nhhl/EkxnVeRR3EpDRAMAjUSnWB1LpVweCESYVDo7oJrSnMIFhRQX8WpjWKD/Tm/Ffw5f94hNZTlD160cI04p0RA25XSvJwhM+mWGRRCaWIx2yVp4uI3/05lbrdwE+oCFVCszN5mSDlsebZqcWtk9vS71j1mgoQerE5XGOtG4LSjZLH49I0Jib9iC3Vg1xvflcplBziia6Y7OUzVYp8LqNipgGE4pkQKEG/HNcjTAi7XEeDHZzjqDnCFZqWH2vBKBm5rm0CvoSPZAXKQ5rfXE7zfML/EuWjoIQI0CfrH8LKr4kWZfLhmD/CYKJfzyaspDx1fNlt3mNcJwJTuCvAN6Mzbvgc3cZ89XR7wbvrDyOLrv/zmsJkiCBB3VslB97SOYGOW1rPVMpU+d9KEMCv63kCrorIL/q6mbfL3STf91u6mBrRbj/AugTYEibXEAswdkME4WziJHNeJ2+WxHg/Xas5et78fu2hldV5gkIR3U8JmIM27a1IMlffkmti7Z4XZ3kETT6SBRUsSmzQWzXkywihqCNGgG9jNw82TNc="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d862b5651a4eed092fc0fc767f3c51ff4940a441cc954de2edac2e61980a413a","subject":{"common_name":[],"country":["GB"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["London"],"organization":["Google Certificate Transparency"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":["1521441815647143"],"street_address":[],"surname":[]},"subject_dn":"C=GB, L=London, O=Google Certificate Transparency, serialNumber=1521441815647143","subject_key_info":{"fingerprint_sha256":"5d29ab776dac9ad73e0b6fc518b5c7ebd2d5b97d335f36dacc7dc3246ccd896b","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"6LAqw14q7V6YYEyJ7wXR5Xs22pOGpeBUev6i7OiVVBEf1eDa524AyYpxqXbf5YjHIUsu8vXe1nL13rXuNj9o6VQ3EAYOS8LC+Yp2dpFWKrpJd+pFlqMnQ6ZL/R0R69lUZiS0izxNeysP8Z6o1sSVDWsFwNjXx7pZNJAwrrOpTXqW+nSrfIEzDYindb4/+v8DSDMoV4QAdXlLbI7N+K1fbXRq28HllYcK4gFh9Dq5nBVw31Vvbzz5sN3glhdzEAKXzlXzk0dUJS2NjfFidJEPgxzpo2hZdK4zIpgV+h+a4kCU3UbOdcnJZw81G+pufF9Nsim3x6GulIgcaXUqvJSjEw=="}},"tbs_fingerprint":"b9b361c8440c4bfbfdd3d33fc9d8c722b1ecbe49154f1ae4e3b7ae9649313a74","tbs_noct_fingerprint":"4e7715cbb6444507743e70d459c5252e89047ec0d690d5a7c3cd57156beaf015","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2020-07-23 11:00:08 UTC","length":"74060193","start":"2018-03-19 06:43:35 UTC"},"version":"3"},"precert":true,"raw":"MIIFBDCCAuygAwIBAgIHBWe+RvfTpzANBgkqhkiG9w0BAQsFADB/MQswCQYDVQQGEwJHQjEPMA0GA1UECAwGTG9uZG9uMRcwFQYDVQQKDA5Hb29nbGUgVUsgTHRkLjEhMB8GA1UECwwYQ2VydGlmaWNhdGUgVHJhbnNwYXJlbmN5MSMwIQYDVQQDDBpNZXJnZSBEZWxheSBJbnRlcm1lZGlhdGUgMTAeFw0xODAzMTkwNjQzMzVaFw0yMDA3MjMxMTAwMDhaMGMxCzAJBgNVBAYTAkdCMQ8wDQYDVQQHDAZMb25kb24xKDAmBgNVBAoMH0dvb2dsZSBDZXJ0aWZpY2F0ZSBUcmFuc3BhcmVuY3kxGTAXBgNVBAUTEDE1MjE0NDE4MTU2NDcxNDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDosCrDXirtXphgTInvBdHlezbak4al4FR6/qLs6JVUER/V4NrnbgDJinGpdt/liMchSy7y9d7WcvXete42P2jpVDcQBg5LwsL5inZ2kVYqukl36kWWoydDpkv9HRHr2VRmJLSLPE17Kw/xnqjWxJUNawXA2NfHulk0kDCus6lNepb6dKt8gTMNiKd1vj/6/wNIMyhXhAB1eUtsjs34rV9tdGrbweWVhwriAWH0OrmcFXDfVW9vPPmw3eCWF3MQApfOVfOTR1QlLY2N8WJ0kQ+DHOmjaFl0rjMimBX6H5riQJTdRs51yclnDzUb6m58X02yKbfHoa6UiBxpdSq8lKMTAgMBAAGjgaAwgZ0wEwYDVR0lBAwwCgYIKwYBBQUHAwEwIwYDVR0RBBwwGoIYZmxvd2Vycy10by10aGUtd29ybGQuY29tMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAU6TwE4YAvwoQTLSZwnvL9Gs+q/sYwHQYDVR0OBBYEFFiDTgR9LxpsYO3lI89Pj79IVhpGMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4ICAQAu9jBvbVgmFAXFvC/YCJm3WqwnCNvCpziUP412f98ZzMXXJtUqhxUvurL2bokD9qYBKr1zuRXTDyQIWQXPbmAmvaIh5BDXyHhKY4Ya1fuc32h0bIiufm9oY6SL1tuUL711JCPg2GGX8STGdV5FHcSkNEAwCNRKdYHUulXB4IRJhUOjugmtKcwgWFFBfxamNYoP9Ob8V/Dl/3iE1lOUPXrRwjTinREDbldK8nCEz6ZYZFEJpYjHbJWni4jf/TmVut3AT6gIVUKzM3mZIOWx5tmpxa2T29LvWPWaChB6sTlcY60bgtKNksfj0jQmJv2ILdWDXG9+VymUHOKJrpjs5TNVinwuo2KmAYTimRAoQb8c1yNMCLtcR4MdnOOoOcIVmpYfa8EoGbmubQK+hI9kBcpDmt9cTvN8wv8S5aOghAjQJ+sfwsqviRZl8uGYP8Jgol/PJqykPHV82W3eY1wnAlO4K8A3ozNu+Bzdxnz1dHvBu+sPI4uu//OawmSIIEHdWyUH3tI5gY5bWs9UylT530oQwK/reQKuisgv+rqZt8vdJN/3W7qYGtFuP8C6BNgSJtcQCzB2QwThbOIkc14nb5bEeD9dqzl63vx+7aGV1XmCQhHdTwmYgzbtrUgyV9+Sa2LtnhdneQRNPpIFFSxKbNBbNeTLCKGoI0aAb2M3DzZM1w==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[{"path":["5cb92715d594fa2a62eb01614fec953fc6648cada0797df1165b6e104e587fcf","0ac607a81e0828b60dc88034cccafd982cddf95b3a0efd1f8cd59232e5fb754f","86d8219c7e2b6009e37eb14356268489b81379e076e8f372e3dde8c162a34134"]},{"path":["5cb92715d594fa2a62eb01614fec953fc6648cada0797df1165b6e104e587fcf","adb4a7e96552b132901fa13917b030bb8e0f9afe391416c4abd6598a63d09925","86d8219c7e2b6009e37eb14356268489b81379e076e8f372e3dde8c162a34134"]}],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"na","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"pass","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"warn","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":false,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 08:59:36 UTC","ct":{"nordu_ct_plausible":{"added_to_ct_at":"2018-03-19 08:50:02 UTC","ct_to_censys_at":"2018-07-30 20:51:41 UTC","index":"6094389"}},"fingerprint_sha256":"f8cfe11f1dc4f38d82471d943fa6833d6b1a851cd2ba5c2fb61789ce181f5bef","metadata":{"added_at":"2018-03-19 08:59:36 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-03-20 01:01:49 UTC","seen_in_scan":false,"source":"ct","updated_at":"2019-03-20 01:03:43 UTC"},"parents":[],"parsed":{"extensions":{"authority_key_id":"35fb97777cf04a351b806232b7019469c6058f80","basic_constraints":{"is_ca":false},"certificate_policies":[],"crl_distribution_points":[],"signed_certificate_timestamps":[],"subject_key_id":"7e665ce0df2eea1ca05bd8a9e8e6c4f205d8e3f0"},"fingerprint_md5":"893aa7ae99561d2e25ce6a7aecf93190","fingerprint_sha1":"01fd11335b062d36e246a0712e786c315a2c5ec8","fingerprint_sha256":"f8cfe11f1dc4f38d82471d943fa6833d6b1a851cd2ba5c2fb61789ce181f5bef","issuer":{"common_name":["Plausible CT Test CA"],"country":["SE"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["NORDUnet","NORDUnet"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["Stockholm"],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=SE, ST=Stockholm, O=NORDUnet, O=NORDUnet, CN=Plausible CT Test CA","names":[],"redacted":false,"serial_number":"58536","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"cI/RuAUHAtttAc+B8ig088ftOOv5LctEz3wZRlFz5iz2MochDY73e6bQOfsP5d/miasi/enGFbNrwmHaQ+JII2P6GdFmbqLK7REmuT6V0p6XqLqBkXYI8W1XxVnzYijtdSP2MNdb20b0il+/TWuxKw0Qz4La0TsRD9d//3ZXT67IOraCvu/XM925l/diKlKYQLNgZayiDc01c3DET7xB8VSKqHoC0DumoJDJ5n1nlvlkzbcyPoQell+a8xBV+rbXzm/pdfVktccxQAg828/rl2F+LAyXyt/uwuGvZ/sn2AQug8+vVjjEmT6wevbfn4e9HIXGGzW2UpJ7v99TlT2/Sg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"59057d05f4ece49495b84d2a4d343dec47808ae388211fc61aae8141b3296c9a","subject":{"common_name":["Plausible Test Cert 58540"],"country":["SE"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["NORDUnet"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["Stockholm"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=SE, ST=Stockholm, O=NORDUnet, CN=Plausible Test Cert 58540","subject_key_info":{"fingerprint_sha256":"db093ccafd90f2dc922a8b07d6b210e5c42d8e8316cfbdfe44163686b13f76b2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"2JBKNFVxqHK5XPGS8gyOFOVXvO6CvOTp//p3LA8O4X11G4y/6Vj5E6Uh2e6aadXFhtpA9hf/nl8a2fOWPb/Y3v1yBQyi8KgalhuP8grHSGCKPPUyhjlBWjOfelnNM+3ZR+MM4Oh6K1VKGf5UwJGF1Hsrft0x+xR7A3rPpI7ilxT7s/QzVujg4q7Rw5Jjn00MnS2J7Nm/SswnQHPzZNwLcP79XdeYCogupaID/flkuROTkW8E6ZyHsY/wsgIUa8a4iN7BFk2uk/w/is1Rzo0TVvDp7+ut0DrsanERi2AWq++BICqRlPv4ePzC3JX1MVLZe9qNFHf5+taSZn1LufKQ4Q=="}},"tbs_fingerprint":"daa868af10ddeb6c12663f6ff0eb70689992c9237c9633cc1726ef9cce741929","tbs_noct_fingerprint":"daa868af10ddeb6c12663f6ff0eb70689992c9237c9633cc1726ef9cce741929","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.13","value":"Fh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZQ=="}],"validation_level":"unknown","validity":{"end":"2019-03-19 08:50:01 UTC","length":"31536000","start":"2018-03-19 08:50:01 UTC"},"version":"3"},"precert":false,"raw":"MIIDtjCCAp6gAwIBAgIDAOSoMA0GCSqGSIb3DQEBCwUAMGYxCzAJBgNVBAYTAlNFMRIwEAYDVQQIDAlTdG9ja2hvbG0xETAPBgNVBAoMCE5PUkRVbmV0MREwDwYDVQQKDAhOT1JEVW5ldDEdMBsGA1UEAwwUUGxhdXNpYmxlIENUIFRlc3QgQ0EwHhcNMTgwMzE5MDg1MDAxWhcNMTkwMzE5MDg1MDAxWjBYMQswCQYDVQQGEwJTRTESMBAGA1UECAwJU3RvY2tob2xtMREwDwYDVQQKDAhOT1JEVW5ldDEiMCAGA1UEAwwZUGxhdXNpYmxlIFRlc3QgQ2VydCA1ODU0MDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANiQSjRVcahyuVzxkvIMjhTlV7zugrzk6f/6dywPDuF9dRuMv+lY+ROlIdnummnVxYbaQPYX/55fGtnzlj2/2N79cgUMovCoGpYbj/IKx0hgijz1MoY5QVozn3pZzTPt2UfjDODoeitVShn+VMCRhdR7K37dMfsUewN6z6SO4pcU+7P0M1bo4OKu0cOSY59NDJ0tiezZv0rMJ0Bz82TcC3D+/V3XmAqILqWiA/35ZLkTk5FvBOmch7GP8LICFGvGuIjewRZNrpP8P4rNUc6NE1bw6e/rrdA67GpxEYtgFqvvgSAqkZT7+Hj8wtyV9TFS2XvajRR3+frWkmZ9S7nykOECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFH5mXODfLuocoFvYqejmxPIF2OPwMB8GA1UdIwQYMBaAFDX7l3d88Eo1G4BiMrcBlGnGBY+AMA0GCSqGSIb3DQEBCwUAA4IBAQBwj9G4BQcC220Bz4HyKDTzx+046/kty0TPfBlGUXPmLPYyhyENjvd7ptA5+w/l3+aJqyL96cYVs2vCYdpD4kgjY/oZ0WZuosrtESa5PpXSnpeouoGRdgjxbVfFWfNiKO11I/Yw11vbRvSKX79Na7ErDRDPgtrROxEP13//dldPrsg6toK+79cz3bmX92IqUphAs2BlrKINzTVzcMRPvEHxVIqoegLQO6agkMnmfWeW+WTNtzI+hB6WX5rzEFX6ttfOb+l19WS1xzFACDzbz+uXYX4sDJfK3+7C4a9n+yfYBC6Dz69WOMSZPrB69t+fh70chcYbNbZSknu/31OVPb9K","tags":["ct","expired"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"error","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"error","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"error","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"error","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"error","e_sub_cert_cert_policy_empty":"error","e_sub_cert_certificate_policies_missing":"error","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"error","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"error","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"na","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"warn","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 12:35:25 UTC","ct":{"cnnic_ctserver":{"added_to_ct_at":"2018-07-24 09:43:00 UTC","ct_to_censys_at":"2018-07-30 04:33:21 UTC","index":"45624"},"google_argon_2021":{"added_to_ct_at":"2018-03-24 05:34:30 UTC","ct_to_censys_at":"2018-07-30 04:37:11 UTC","index":"141407"}},"fingerprint_sha256":"5aebd7cb74560edce13c02ae4bb2795d5c3f2d61cb1ff618c9bcc94f8a32f6d5","metadata":{"added_at":"2018-03-19 12:35:25 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 20:26:33 UTC","seen_in_scan":false,"source":"ct_chain","updated_at":"2018-08-29 04:08:39 UTC"},"parent_spki_subject_fingerprint":"648de3b81b445341d18796394a19aaa1ba253f4f634923fc42883f77cfae7772","parents":[],"parsed":{"extensions":{"authority_key_id":"e93c04e1802fc284132d26709ef2fd1acfaafec6","basic_constraints":{"is_ca":true},"certificate_policies":[],"crl_distribution_points":[],"extended_key_usage":{"unknown":["1.3.6.1.4.1.11129.2.4.4"],"value":[]},"signed_certificate_timestamps":[],"subject_key_id":"2cba859012ecb316db72b980f58c67763553514d"},"fingerprint_md5":"fb6583c02578d25a753dc923d5acc263","fingerprint_sha1":"1d34f77b6060b81138165baf3bff9f486b8ada76","fingerprint_sha256":"5aebd7cb74560edce13c02ae4bb2795d5c3f2d61cb1ff618c9bcc94f8a32f6d5","issuer":{"common_name":["Merge Delay Intermediate 1"],"country":["GB"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Google UK Ltd."],"organization_id":[],"organizational_unit":["Certificate Transparency"],"postal_code":[],"province":["London"],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=GB, ST=London, O=Google UK Ltd., OU=Certificate Transparency, CN=Merge Delay Intermediate 1","names":[],"redacted":false,"serial_number":"1521462800931047","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA1-RSA","oid":"1.3.14.3.2.29"},"valid":false,"value":"kkhxHaVV26om5arsKnDlOOjDaatYejrAQILNtUCOzshDPe52FpfOQKJpk3LpAEm6taW7czXUjFSYmtvFHYqeQ1RuqikqfW48/GJLqqhfPGaBB+HYByxSEYiKfYJdX8NHVSFylhTs3UuK+qolFzRFvJo/TNc31q3hpPxvFFVOqzRM2naJqLpcNw3NLAw1+xzlTI6nSekXpbmcPJgAOwCxA6/YqaAW63k4BrHW0ZsMa3BJ2Ax1L+Xa6NzM/Cloob1X/eChK4trAIg6CY9k45pp0pRlgjv0jn1QqW6JLz3GjGjbHdfl0+3wxenJQfbgn8jdjcAqbqKR9qIl+5DqpEfFR4jWbp2gj87+H5uuohetsDlcl4WJJO2sa5xBi91n2ZM+bQlHdbGWRZaow45sXjEpg90aeWyiaX72PUaGOl0Z29lFLBp8zZQXDDL8AIIphxnARvnIGX8+20SP7D2VIphcmvBWN+7OCTVo4FG2kgqy78DVDblBNMbNXjXS5uE53gGQLMKxiafInHGxN0w1jyy3hjarG7N5MI+8nxbheZXKNhZlTE7HAKsaySk15jnYtwACzPS/5zZMsAIt4aXHaUnj3GnLqObOW0Yi48xvtebK9SU0AKwAMwqRI6Pj/WzmI4JnezjB8p/3t4ATRaFLhV75/SdZpZP5a2qIZrCezbyx/TY="},"signature_algorithm":{"name":"SHA1-RSA","oid":"1.3.14.3.2.29"},"spki_subject_fingerprint":"fcf194840f6f7f378ea497c7083be10917ff0a6f148d4a126cf8f862444db0e2","subject":{"common_name":[],"country":["GB"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["London"],"organization":["Google Certificate Transparency (Precert Signing)"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":["1521462800931047"],"street_address":[],"surname":[]},"subject_dn":"C=GB, L=London, O=Google Certificate Transparency (Precert Signing), serialNumber=1521462800931047","subject_key_info":{"fingerprint_sha256":"d23868712e38775ee62963da78fae5a85a77bf053e654a6353d1c6ea1f199f31","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"hBads3GVm2d6dZvmI8NPkyw2yheDxzT6J4BKPhagYVGlval3fqAi5unfCtDuuGigIxx0wVazcJZORNGRxaRNYB+q8OGQRaYyxpvQYatjm8C45gIxE1/djM2zvVzHy/u8XUn23Fatgw4T/pIR3l7MtAIjezRoP194jzz8LtL1T9BBxNatKObRdXK7AwNicl1wWb0gMvpCIpiatOQo4jypP30pd9TXxEXfwpcEJlBx7fHOiXart+J40rnSsg0cBpxnNG05x9h1UWqu24hA6NTLsY/hF9sM7MhkRFnT30cDC+oqQ+/1auhjA9GWq6TE/BzAu+/DpeOjqEOwjqlv9oi5Ew=="}},"tbs_fingerprint":"ebc721768c1527577b871cbad3f996f6d2e1f0f7bae5618e04059cc67651cc85","tbs_noct_fingerprint":"ebc721768c1527577b871cbad3f996f6d2e1f0f7bae5618e04059cc67651cc85","unknown_extensions":[],"validation_level":"unknown","validity":{"end":"2021-08-21 01:37:32 UTC","length":"108047052","start":"2018-03-19 12:33:20 UTC"},"version":"3"},"precert":false,"raw":"MIIE4jCCAsqgAwIBAgIHBWfDKcnY5zANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEPMA0GA1UECAwGTG9uZG9uMRcwFQYDVQQKDA5Hb29nbGUgVUsgTHRkLjEhMB8GA1UECwwYQ2VydGlmaWNhdGUgVHJhbnNwYXJlbmN5MSMwIQYDVQQDDBpNZXJnZSBEZWxheSBJbnRlcm1lZGlhdGUgMTAeFw0xODAzMTkxMjMzMjBaFw0yMTA4MjEwMTM3MzJaMHUxCzAJBgNVBAYTAkdCMQ8wDQYDVQQHDAZMb25kb24xOjA4BgNVBAoMMUdvb2dsZSBDZXJ0aWZpY2F0ZSBUcmFuc3BhcmVuY3kgKFByZWNlcnQgU2lnbmluZykxGTAXBgNVBAUTEDE1MjE0NjI4MDA5MzEwNDcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCEFp2zcZWbZ3p1m+Yjw0+TLDbKF4PHNPongEo+FqBhUaW9qXd+oCLm6d8K0O64aKAjHHTBVrNwlk5E0ZHFpE1gH6rw4ZBFpjLGm9Bhq2ObwLjmAjETX92MzbO9XMfL+7xdSfbcVq2DDhP+khHeXsy0AiN7NGg/X3iPPPwu0vVP0EHE1q0o5tF1crsDA2JyXXBZvSAy+kIimJq05CjiPKk/fSl31NfERd/ClwQmUHHt8c6Jdqu34njSudKyDRwGnGc0bTnH2HVRaq7biEDo1Muxj+EX2wzsyGREWdPfRwML6ipD7/Vq6GMD0ZarpMT8HMC778Ol46OoQ7COqW/2iLkTAgMBAAGjbTBrMBgGA1UdJQEB/wQOMAwGCisGAQQB1nkCBAQwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTpPAThgC/ChBMtJnCe8v0az6r+xjAdBgNVHQ4EFgQULLqFkBLssxbbcrmA9YxndjVTUU0wDQYJKoZIhvcNAQEFBQADggIBAJJIcR2lVduqJuWq7Cpw5Tjow2mrWHo6wECCzbVAjs7IQz3udhaXzkCiaZNy6QBJurWlu3M11IxUmJrbxR2KnkNUbqopKn1uPPxiS6qoXzxmgQfh2AcsUhGIin2CXV/DR1UhcpYU7N1LivqqJRc0RbyaP0zXN9at4aT8bxRVTqs0TNp2iai6XDcNzSwMNfsc5UyOp0npF6W5nDyYADsAsQOv2KmgFut5OAax1tGbDGtwSdgMdS/l2ujczPwpaKG9V/3goSuLawCIOgmPZOOaadKUZYI79I59UKluiS89xoxo2x3X5dPt8MXpyUH24J/I3Y3AKm6ikfaiJfuQ6qRHxUeI1m6doI/O/h+brqIXrbA5XJeFiSTtrGucQYvdZ9mTPm0JR3WxlkWWqMOObF4xKYPdGnlsoml+9j1GhjpdGdvZRSwafM2UFwwy/ACCKYcZwEb5yBl/PttEj+w9lSKYXJrwVjfuzgk1aOBRtpIKsu/A1Q25QTTGzV410ubhOd4BkCzCsYmnyJxxsTdMNY8st4Y2qxuzeTCPvJ8W4XmVyjYWZUxOxwCrGskpNeY52LcAAsz0v+c2TLACLeGlx2lJ49xpy6jmzltGIuPMb7XmyvUlNACsADMKkSOj4/1s5iOCZ3s4wfKf97eAE0WhS4Ve+f0nWaWT+WtqiGawns28sf02","tags":["ct","unexpired","was-trusted","trusted"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["0ac607a81e0828b60dc88034cccafd982cddf95b3a0efd1f8cd59232e5fb754f","adb4a7e96552b132901fa13917b030bb8e0f9afe391416c4abd6598a63d09925"],"paths":[{"path":["5aebd7cb74560edce13c02ae4bb2795d5c3f2d61cb1ff618c9bcc94f8a32f6d5","0ac607a81e0828b60dc88034cccafd982cddf95b3a0efd1f8cd59232e5fb754f","86d8219c7e2b6009e37eb14356268489b81379e076e8f372e3dde8c162a34134"]},{"path":["5aebd7cb74560edce13c02ae4bb2795d5c3f2d61cb1ff618c9bcc94f8a32f6d5","adb4a7e96552b132901fa13917b030bb8e0f9afe391416c4abd6598a63d09925","86d8219c7e2b6009e37eb14356268489b81379e076e8f372e3dde8c162a34134"]}],"trusted_path":true,"type":"intermediate","valid":true,"was_valid":true,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":true,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"pass","e_ca_common_name_missing":"error","e_ca_country_name_invalid":"pass","e_ca_country_name_missing":"pass","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"error","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"pass","e_ca_subject_field_empty":"pass","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"na","e_dnsname_contains_bare_iana_suffix":"na","e_dnsname_empty_label":"na","e_dnsname_hyphen_in_sld":"na","e_dnsname_label_too_long":"na","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"na","e_dnsname_underscore_in_sld":"na","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"na","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"na","e_ext_cert_policy_duplicate":"na","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"na","e_ext_san_dns_name_too_long":"na","e_ext_san_dns_not_ia5_string":"na","e_ext_san_edi_party_name_present":"na","e_ext_san_empty_name":"na","e_ext_san_missing":"na","e_ext_san_no_entries":"na","e_ext_san_not_critical_without_subject":"na","e_ext_san_other_name_present":"na","e_ext_san_registered_id_present":"na","e_ext_san_rfc822_format_invalid":"na","e_ext_san_rfc822_name_present":"na","e_ext_san_space_dns_name":"na","e_ext_san_uniform_resource_identifier_present":"na","e_ext_san_uri_format_invalid":"na","e_ext_san_uri_host_not_fqdn_or_ip":"na","e_ext_san_uri_not_ia5":"na","e_ext_san_uri_relative":"na","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"pass","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"na","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"na","e_san_dns_name_includes_null_char":"na","e_san_dns_name_starts_with_period":"na","e_san_wildcard_not_first":"na","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"error","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"error","e_sub_ca_certificate_policies_missing":"error","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"error","e_sub_cert_aia_does_not_contain_ocsp_url":"na","e_sub_cert_aia_marked_critical":"na","e_sub_cert_aia_missing":"na","e_sub_cert_cert_policy_empty":"na","e_sub_cert_certificate_policies_missing":"na","e_sub_cert_country_name_must_appear":"na","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"na","e_sub_cert_eku_server_auth_client_auth_missing":"na","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"na","e_sub_cert_locality_name_must_not_appear":"na","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"error","e_sub_cert_postal_code_must_not_appear":"na","e_sub_cert_province_must_appear":"na","e_sub_cert_province_must_not_appear":"na","e_sub_cert_street_address_should_not_exist":"na","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"na","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"na","n_sub_ca_eku_not_technically_constrained":"notice","n_subject_common_name_included":"na","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"na","w_dnsname_wildcard_left_of_public_suffix":"na","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"na","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"na","w_ext_subject_key_identifier_missing_sub_cert":"na","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"na","w_serial_number_low_entropy":"warn","w_sub_ca_aia_does_not_contain_issuing_ca_url":"warn","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"warn","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"na","w_sub_cert_certificate_policies_marked_critical":"na","w_sub_cert_eku_extra_values":"na","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 07:37:43 UTC","ct":{"google_argon_2019":{"added_to_ct_at":"2018-05-24 15:48:52 UTC","ct_to_censys_at":"2018-07-30 11:17:32 UTC","index":"2704381"},"google_pilot":{"added_to_ct_at":"2018-03-19 07:32:37 UTC","ct_to_censys_at":"2018-08-04 06:46:02 UTC","index":"235673221"},"google_rocketeer":{"added_to_ct_at":"2018-03-19 06:43:05 UTC","ct_to_censys_at":"2018-08-07 09:49:39 UTC","index":"229939829"}},"fingerprint_sha256":"761b1fb82b6a3c968321561dff4e38286df7556874baa3bc5f2c7b48fe246c9a","metadata":{"added_at":"2018-03-19 07:37:43 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-03-07 00:50:09 UTC","seen_in_scan":true,"source":"ct","updated_at":"2019-03-07 01:21:56 UTC"},"parent_spki_subject_fingerprint":"577cebcb95a07720ef2e1f8976273b96fdccfac6c10c9fe00a2f7b8d356f4ace","parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":[],"ocsp_urls":["http://kddiweb.ocsp.secomtrust.net"]},"authority_key_id":"6d9d1f00111a4d00aab44a446022caeef25debf2","certificate_policies":[{"cps":["https://repo1.secomtrust.net/sppca/kddiweb/"],"id":"1.2.392.200091.110.141.2","user_notice":[]}],"crl_distribution_points":["http://repo1.secomtrust.net/sppca/kddiweb/fullCRL.crl"],"extended_key_usage":{"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["www.technosmile.co.jp"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"c0b15f4fa723862ed3ccb67c8c4fca4ed3467d07"},"fingerprint_md5":"dbdcb171287bc69b932a8654a0c3c425","fingerprint_sha1":"500f3fddb57acf3169704869c5022b7bc57bc659","fingerprint_sha256":"761b1fb82b6a3c968321561dff4e38286df7556874baa3bc5f2c7b48fe246c9a","issuer":{"common_name":["KDDI Web Communications Certification Authority"],"country":["JP"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["KDDI Web Communications Inc."],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=JP, O=KDDI Web Communications Inc., CN=KDDI Web Communications Certification Authority","names":["www.technosmile.co.jp"],"redacted":false,"serial_number":"9086509095238096249","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"JChlb+WE5yQ5+wLw/LydAfCBbrgZxaHeIpuKlEiA7Ae59uvSR9HH8rn9aCDrWVDyC9KbIqyQrMUWqeH5ahz6PqKCIcw+knrXbsMDJbP+2LCV+BkLFE9mvE9rRh6AGM+VEcnyHonGgKfDUGzrcMZSlNmqXmmaU1IVTo6bEqyf1pyRXfVU4jlpuh1KtNhLxvLG+qzToAf1opCrpNr6FDJ+UMim0KhQKQRL0h1ofxFGNxHSSMzKkvc72z8uDhtaP50TCS3monVNMe/kmx1XqvVgHc7NAomEZbSsffBiyxhR0ZylBbTcGWFF3i+mvws0ZC0FHSPXhyoUdtMvR6WV4lMBlg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"c64a31f53b4b4d997e2aad7c9547efa8d04d1f07890380225ed484e0db9d89fb","subject":{"common_name":["www.technosmile.co.jp"],"country":["JP"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Instant CPI SSL"],"organization":["TECHNOSMILE,INC."],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["Hosting Service"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=JP, ST=Hosting Service, L=Instant CPI SSL, O=TECHNOSMILE,INC., CN=www.technosmile.co.jp","subject_key_info":{"fingerprint_sha256":"3ecb796b544b664f89307978b3d7e16a97db5d1b73fd59637251face6e2cd851","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"0aQGLOXl3QEpaVpUDNOjVFTbKbtfAE9Tx61co7w5iB/K6WFVRe0I7ZvMg2tETFE/Dah+ca6EId7ySKkSDazmsxeai4R0IzNy1ofWvL4FZt9pM0yoHCmeRwyBH0PxBNeaFjeF0Vx6x3w9DmFacftMhZ4Ad9uOlLgeWC1J9SZlfUZwPA0Vk2z6UcaZTm15KHGhqTA4QbPtJOC4RRG+Ap6eOrTz6Iwy+slmGMqwzr+4ArJuqwDHXbJKIGS+6eArxM2j/haxH4b9nKdniqzyZBpmYo7zSJGmB+oOpvVcCu2PvBwva1wbHRNspHBQ2R4vq5P+3G5nrkdzTpkjVrQ8Svx3ww=="}},"tbs_fingerprint":"77f23bbfbd28e4e4e902e996816ee42e4658e0cc86eb5eb3923e1f700513c83c","tbs_noct_fingerprint":"77f23bbfbd28e4e4e902e996816ee42e4658e0cc86eb5eb3923e1f700513c83c","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGQA=="}],"validation_level":"unknown","validity":{"end":"2019-03-06 14:59:59 UTC","length":"31584609","start":"2018-03-06 01:29:50 UTC"},"version":"3"},"precert":false,"raw":"MIIE6DCCA9CgAwIBAgIIfhnD4TYF1XkwDQYJKoZIhvcNAQELBQAwbjELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHEtEREkgV2ViIENvbW11bmljYXRpb25zIEluYy4xODA2BgNVBAMTL0tEREkgV2ViIENvbW11bmljYXRpb25zIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE4MDMwNjAxMjk1MFoXDTE5MDMwNjE0NTk1OVowfDELMAkGA1UEBhMCSlAxGDAWBgNVBAgTD0hvc3RpbmcgU2VydmljZTEYMBYGA1UEBxMPSW5zdGFudCBDUEkgU1NMMRkwFwYDVQQKExBURUNITk9TTUlMRSxJTkMuMR4wHAYDVQQDExV3d3cudGVjaG5vc21pbGUuY28uanAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDRpAYs5eXdASlpWlQM06NUVNspu18AT1PHrVyjvDmIH8rpYVVF7Qjtm8yDa0RMUT8NqH5xroQh3vJIqRINrOazF5qLhHQjM3LWh9a8vgVm32kzTKgcKZ5HDIEfQ/EE15oWN4XRXHrHfD0OYVpx+0yFngB3246UuB5YLUn1JmV9RnA8DRWTbPpRxplObXkocaGpMDhBs+0k4LhFEb4Cnp46tPPojDL6yWYYyrDOv7gCsm6rAMddskogZL7p4CvEzaP+FrEfhv2cp2eKrPJkGmZijvNIkaYH6g6m9VwK7Y+8HC9rXBsdE2ykcFDZHi+rk/7cbmeuR3NOmSNWtDxK/HfDAgMBAAGjggF6MIIBdjAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYDVR0OBBYEFMCxX0+nI4Yu08y2fIxPyk7TRn0HMB8GA1UdIwQYMBaAFG2dHwARGk0AqrRKRGAiyu7yXevyMCAGA1UdEQQZMBeCFXd3dy50ZWNobm9zbWlsZS5jby5qcDBSBgNVHSAESzBJMEcGCiqDCIybG26BDQIwOTA3BggrBgEFBQcCARYraHR0cHM6Ly9yZXBvMS5zZWNvbXRydXN0Lm5ldC9zcHBjYS9rZGRpd2ViLzBGBgNVHR8EPzA9MDugOaA3hjVodHRwOi8vcmVwbzEuc2Vjb210cnVzdC5uZXQvc3BwY2Eva2RkaXdlYi9mdWxsQ1JMLmNybDA+BggrBgEFBQcBAQQyMDAwLgYIKwYBBQUHMAGGImh0dHA6Ly9rZGRpd2ViLm9jc3Auc2Vjb210cnVzdC5uZXQwEQYJYIZIAYb4QgEBBAQDAgZAMA0GCSqGSIb3DQEBCwUAA4IBAQAkKGVv5YTnJDn7AvD8vJ0B8IFuuBnFod4im4qUSIDsB7n269JH0cfyuf1oIOtZUPIL0psirJCsxRap4flqHPo+ooIhzD6SetduwwMls/7YsJX4GQsUT2a8T2tGHoAYz5URyfIeicaAp8NQbOtwxlKU2apeaZpTUhVOjpsSrJ/WnJFd9VTiOWm6HUq02EvG8sb6rNOgB/WikKuk2voUMn5QyKbQqFApBEvSHWh/EUY3EdJIzMqS9zvbPy4OG1o/nRMJLeaidU0x7+SbHVeq9WAdzs0CiYRltKx98GLLGFHRnKUFtNwZYUXeL6a/CzRkLQUdI9eHKhR20y9HpZXiUwGW","tags":["ct","expired","was-trusted"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448"],"paths":[{"path":["761b1fb82b6a3c968321561dff4e38286df7556874baa3bc5f2c7b48fe246c9a","655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448","c415cebfa3fc2ef3c74092b84265bad64c3fc9994c91177965667d7abee90588","e75e72ed9f560eec6eb4800073a43fc3ad19195a392282017895974a99026b6c"]},{"path":["761b1fb82b6a3c968321561dff4e38286df7556874baa3bc5f2c7b48fe246c9a","655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448","513b2cecb810d4cde5dd85391adfc6c2dd60d87bb736d2b521484aa47a0ebef6"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448"],"paths":[{"path":["761b1fb82b6a3c968321561dff4e38286df7556874baa3bc5f2c7b48fe246c9a","655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448","c415cebfa3fc2ef3c74092b84265bad64c3fc9994c91177965667d7abee90588","e75e72ed9f560eec6eb4800073a43fc3ad19195a392282017895974a99026b6c"]},{"path":["761b1fb82b6a3c968321561dff4e38286df7556874baa3bc5f2c7b48fe246c9a","655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448","513b2cecb810d4cde5dd85391adfc6c2dd60d87bb736d2b521484aa47a0ebef6"]},{"path":["761b1fb82b6a3c968321561dff4e38286df7556874baa3bc5f2c7b48fe246c9a","655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448","c415cebfa3fc2ef3c74092b84265bad64c3fc9994c91177965667d7abee90588","df74d3cd28650e2b06757b76ab216781c3d4be781b45555dc69bc1b0b46ae7a7","f4c149551a3013a35bc7bffe17a7f3449bc1ab5b5a0ae74b06c23b90004c0104"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448"],"paths":[{"path":["761b1fb82b6a3c968321561dff4e38286df7556874baa3bc5f2c7b48fe246c9a","655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448","c415cebfa3fc2ef3c74092b84265bad64c3fc9994c91177965667d7abee90588","e75e72ed9f560eec6eb4800073a43fc3ad19195a392282017895974a99026b6c"]},{"path":["761b1fb82b6a3c968321561dff4e38286df7556874baa3bc5f2c7b48fe246c9a","655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448","513b2cecb810d4cde5dd85391adfc6c2dd60d87bb736d2b521484aa47a0ebef6"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448"],"paths":[{"path":["761b1fb82b6a3c968321561dff4e38286df7556874baa3bc5f2c7b48fe246c9a","655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448","c415cebfa3fc2ef3c74092b84265bad64c3fc9994c91177965667d7abee90588","e75e72ed9f560eec6eb4800073a43fc3ad19195a392282017895974a99026b6c"]},{"path":["761b1fb82b6a3c968321561dff4e38286df7556874baa3bc5f2c7b48fe246c9a","655010377e23e4cdfe2e52caf58ce30c5c0395cc6046f813bddbe07b2f385448","513b2cecb810d4cde5dd85391adfc6c2dd60d87bb736d2b521484aa47a0ebef6"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"pass","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"na","e_path_len_constraint_zero_or_less":"na","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"pass","e_sub_cert_crl_distribution_points_marked_critical":"pass","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"pass","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"na","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"pass","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"warn","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 19:24:34 UTC","ct":{"google_argon_2018":{"added_to_ct_at":"2018-03-19 23:33:01 UTC","ct_to_censys_at":"2018-08-04 15:33:03 UTC","index":"101011612"},"google_pilot":{"added_to_ct_at":"2018-03-19 19:05:18 UTC","ct_to_censys_at":"2018-08-04 06:51:15 UTC","index":"235861935"},"google_rocketeer":{"added_to_ct_at":"2018-03-19 18:16:13 UTC","ct_to_censys_at":"2018-08-07 10:00:44 UTC","index":"230156464"}},"fingerprint_sha256":"be47e9a94bd175d5f4513f095bb0b69daf1d905578582fc83feb97708e4f9e4e","metadata":{"added_at":"2018-03-19 19:24:34 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-11-21 02:12:05 UTC","seen_in_scan":true,"source":"ct","updated_at":"2018-11-21 02:31:57 UTC"},"parent_spki_subject_fingerprint":"6771ba2070d51e78406f5191fca0cc6dc06088da6c81ef7353e034e5eb44c94c","parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://gj.symcb.com/gj.crt"],"ocsp_urls":["http://gj.symcd.com"]},"authority_key_id":"14678eed834fd61e9d40040c0446a17034b20f72","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.geotrust.com/resources/repository/legal"],"id":"2.23.140.1.2.2","user_notice":[{"explicit_text":"https://www.geotrust.com/resources/repository/legal","notice_reference":[]}]}],"crl_distribution_points":["http://gj.symcb.com/gj.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"3esdK3oNT6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvsw=","signature":"BAMARjBEAiALkQA66CKmtrL/zYUWMnWik9wNdpaVkFd+5j2BjLfsIgIgGahJlrb4RGCRcxBxIaCrrXEZaLO9LzgNZs6eTEIbPaE=","timestamp":"2017-11-20 09:15:08 UTC","version":"0"},{"log_id":"pLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BA=","signature":"BAMARjBEAiB+hx1gPaR+6ATK0BcPcxa+y2pa/BxfPnkGj13KJ2ewoQIgVXzflJtGpUyIjUgQHkz6W2Rrc7U4GpzJIGBEJmhZt94=","timestamp":"2017-11-20 09:15:08 UTC","version":"0"}],"subject_alt_name":{"directory_names":[],"dns_names":["www.agence-newic.com","agence-newic.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]}},"fingerprint_md5":"06d13a67c1ede0f750b8861086418155","fingerprint_sha1":"9f12db17395766e49cf7c765ab1777678d221fd5","fingerprint_sha256":"be47e9a94bd175d5f4513f095bb0b69daf1d905578582fc83feb97708e4f9e4e","issuer":{"common_name":["GeoTrust SHA256 SSL CA"],"country":["US"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["GeoTrust Inc."],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=US, O=GeoTrust Inc., CN=GeoTrust SHA256 SSL CA","names":["www.agence-newic.com","agence-newic.com"],"redacted":false,"serial_number":"145669374501439496692693623060412118405","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"galk8JLBolziQUdCt3IIUcqEFxPCKB4TL4zTzcq1Cir4FzIv2sH+WgA0S5L3X42FACcazbHTjC3BTGBstFR1duG706ZqOFHxbyVG0mlxzg0oz3PfBEhVEZlpWJXrn7Adr1gNNtVsPCJBcq9TSs9bI8o/VF6d6/6B/U/SipdOKb+4w46S/vL1IoyRfyHoWz8Ct/4uDt0k880N4EHb97p03FmWxoYkTpFKT912NbUGi8AKuMJ2NVw8A1AaBB1QtjU8IxvlOdCG9ktcG1Vf+GpdbZe3wF3JNknG5eqJ9kDCK+C56nMNBVSNGL+KYF9uxVWVyd1OXkB1V0ZQZF7c19GPbw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"e69fd28591fb4ca43580d4b44757d15b6139cf1fb722d620cf6d09a468e6aa4e","subject":{"common_name":["www.agence-newic.com"],"country":["FR"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Lyon"],"organization":["AGENCE NEWIC"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["Rhône"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=FR, ST=Rhône, L=Lyon, O=AGENCE NEWIC, CN=www.agence-newic.com","subject_key_info":{"fingerprint_sha256":"1e1900f10fee1584fcf67739209bd3179cfbfd8d166d0d5983c700ec55bf6078","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"nK6oXJsKbqiCvPLkft8o2m8gC7i4uLfVwm0GfZfDPadSsFFal5/ietj5/s2cjzJT2zpxhE+LXx2skwolZQd5ukcdpTClE9C42nDso6pdwBDpBLIF0f+pVy4UR14Pr6fz3/AbiDpfzbFsWn/6/KknfyppLiKtbxd/ROJHNQw8LtGdnZE71eTBaHuQ6zbI3v1ufbZ7JQ5t0mx3icPxW86GB6Uw1+4gcahHP8je95VD+N6/VkEhYp4eVx8Rw/p77Y2mZ9qaShgV0+Z5S8gzbWvJDYpmUFMbbYVU/4q27wZlir+PsTIoki68j38aDGG14i2BtazpHgBf44QwQoEGqwFXhw=="}},"tbs_fingerprint":"513825a00146961187ac3142b010eba34538115f8b05db6b1d8d4d9866d88e8d","tbs_noct_fingerprint":"331896823ee177222271a80a6e067bbf8343e52a24538906f44b0e5464001145","unknown_extensions":[],"validation_level":"OV","validity":{"end":"2018-11-20 23:59:59 UTC","length":"31622399","start":"2017-11-20 00:00:00 UTC"},"version":"3"},"precert":false,"raw":"MIIF8zCCBNugAwIBAgIQbZbmqh1tHP0EbsOcCzI1hTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEfMB0GA1UEAxMWR2VvVHJ1c3QgU0hBMjU2IFNTTCBDQTAeFw0xNzExMjAwMDAwMDBaFw0xODExMjAyMzU5NTlaMGMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIDAZSaMO0bmUxDTALBgNVBAcMBEx5b24xFTATBgNVBAoMDEFHRU5DRSBORVdJQzEdMBsGA1UEAwwUd3d3LmFnZW5jZS1uZXdpYy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCcrqhcmwpuqIK88uR+3yjabyALuLi4t9XCbQZ9l8M9p1KwUVqXn+J62Pn+zZyPMlPbOnGET4tfHayTCiVlB3m6Rx2lMKUT0LjacOyjql3AEOkEsgXR/6lXLhRHXg+vp/Pf8BuIOl/NsWxaf/r8qSd/KmkuIq1vF39E4kc1DDwu0Z2dkTvV5MFoe5DrNsje/W59tnslDm3SbHeJw/FbzoYHpTDX7iBxqEc/yN73lUP43r9WQSFinh5XHxHD+nvtjaZn2ppKGBXT5nlLyDNta8kNimZQUxtthVT/irbvBmWKv4+xMiiSLryPfxoMYbXiLYG1rOkeAF/jhDBCgQarAVeHAgMBAAGjggK+MIICujAxBgNVHREEKjAoghR3d3cuYWdlbmNlLW5ld2ljLmNvbYIQYWdlbmNlLW5ld2ljLmNvbTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDArBgNVHR8EJDAiMCCgHqAchhpodHRwOi8vZ2ouc3ltY2IuY29tL2dqLmNybDCBnQYDVR0gBIGVMIGSMIGPBgZngQwBAgIwgYQwPwYIKwYBBQUHAgEWM2h0dHBzOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9sZWdhbDBBBggrBgEFBQcCAjA1DDNodHRwczovL3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL3JlcG9zaXRvcnkvbGVnYWwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFBRnju2DT9YenUAEDARGoXA0sg9yMFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL2dqLnN5bWNkLmNvbTAmBggrBgEFBQcwAoYaaHR0cDovL2dqLnN5bWNiLmNvbS9nai5jcnQwggECBgorBgEEAdZ5AgQCBIHzBIHwAO4AdQDd6x0reg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+zAAAAV/YtbijAAAEAwBGMEQCIAuRADroIqa2sv/NhRYydaKT3A12lpWQV37mPYGMt+wiAiAZqEmWtvhEYJFzEHEhoKutcRlos70vOA1mzp5MQhs9oQB1AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABX9i1uOQAAAQDAEYwRAIgfocdYD2kfugEytAXD3MWvstqWvwcXz55Bo9dyidnsKECIFV835SbRqVMiI1IEB5M+ltka3O1OBqcySBgRCZoWbfeMA0GCSqGSIb3DQEBCwUAA4IBAQCBqWTwksGiXOJBR0K3cghRyoQXE8IoHhMvjNPNyrUKKvgXMi/awf5aADRLkvdfjYUAJxrNsdOMLcFMYGy0VHV24bvTpmo4UfFvJUbSaXHODSjPc98ESFURmWlYleufsB2vWA021Ww8IkFyr1NKz1sjyj9UXp3r/oH9T9KKl04pv7jDjpL+8vUijJF/IehbPwK3/i4O3STzzQ3gQdv3unTcWZbGhiROkUpP3XY1tQaLwAq4wnY1XDwDUBoEHVC2NTwjG+U50Ib2S1wbVV/4al1tl7fAXck2Scbl6on2QMIr4Lnqcw0FVI0Yv4pgX27FVZXJ3U5eQHVXRlBkXtzX0Y9v","tags":["ct","expired","was-trusted"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["d9e0c64ab27a64d79cccf42a34ec75a251a7e543353c19e984a70eb2f546cdff"],"paths":[{"path":["be47e9a94bd175d5f4513f095bb0b69daf1d905578582fc83feb97708e4f9e4e","d9e0c64ab27a64d79cccf42a34ec75a251a7e543353c19e984a70eb2f546cdff","b478b812250df878635c2aa7ec7d155eaa625ee82916e2cd294361886cd1fbd4"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["d9e0c64ab27a64d79cccf42a34ec75a251a7e543353c19e984a70eb2f546cdff"],"paths":[{"path":["be47e9a94bd175d5f4513f095bb0b69daf1d905578582fc83feb97708e4f9e4e","d9e0c64ab27a64d79cccf42a34ec75a251a7e543353c19e984a70eb2f546cdff","b478b812250df878635c2aa7ec7d155eaa625ee82916e2cd294361886cd1fbd4"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["d9e0c64ab27a64d79cccf42a34ec75a251a7e543353c19e984a70eb2f546cdff"],"paths":[{"path":["be47e9a94bd175d5f4513f095bb0b69daf1d905578582fc83feb97708e4f9e4e","d9e0c64ab27a64d79cccf42a34ec75a251a7e543353c19e984a70eb2f546cdff","b478b812250df878635c2aa7ec7d155eaa625ee82916e2cd294361886cd1fbd4"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["d9e0c64ab27a64d79cccf42a34ec75a251a7e543353c19e984a70eb2f546cdff"],"paths":[{"path":["be47e9a94bd175d5f4513f095bb0b69daf1d905578582fc83feb97708e4f9e4e","d9e0c64ab27a64d79cccf42a34ec75a251a7e543353c19e984a70eb2f546cdff","b478b812250df878635c2aa7ec7d155eaa625ee82916e2cd294361886cd1fbd4"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"pass","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"pass","e_cert_policy_ov_requires_province_or_locality":"pass","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"pass","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"pass","e_sub_cert_crl_distribution_points_marked_critical":"pass","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"pass","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"pass","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 00:11:37 UTC","ct":{"google_pilot":{"added_to_ct_at":"2018-03-19 05:10:59 UTC","ct_to_censys_at":"2018-08-04 06:42:56 UTC","index":"235559843"},"google_rocketeer":{"added_to_ct_at":"2018-03-18 23:33:14 UTC","ct_to_censys_at":"2018-08-07 09:44:25 UTC","index":"229833933"}},"fingerprint_sha256":"2ddbf5bdf452c82ff758e686f1b772684eb6405e53bbd2726ff4b332fc2cbea8","metadata":{"added_at":"2018-03-19 00:11:37 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 21:53:49 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 05:52:58 UTC"},"parent_spki_subject_fingerprint":"1c893a8e5d1e3110e7b23d526cf7c5655dbe5dcd88bf0b7a594b0a3eafaeb38a","parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://gp.symcb.com/gp.crt"],"ocsp_urls":["http://gp.symcd.com"]},"authority_key_id":"97c227509ec2c9ec0c8832c87cade2a6014fda6f","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.rapidssl.com/legal"],"id":"2.23.140.1.2.1","user_notice":[{"explicit_text":"https://www.rapidssl.com/legal","notice_reference":[]}]}],"crl_distribution_points":["http://gp.symcb.com/gp.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"3esdK3oNT6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvsw=","signature":"BAMARzBFAiEA/R+bTQi0rqrU3t43ls0QWuvPaf5ZD08o2EHFlVX2qUwCIFLnR1CQBsNl2OWwj8FhOmoiQ2IGFxr7/GK2HnzeSPPN","timestamp":"2017-04-14 02:55:37 UTC","version":"0"},{"log_id":"pLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BA=","signature":"BAMARzBFAiEAw5Kc9k8MIcoeGGfysrF2yddWKBdX6Yys28OpcfjRwpUCIF0NBmfQwz+EH3fzk2Mhxbt2euh0wfSKrJ1fgi7djGH6","timestamp":"2017-04-14 02:55:37 UTC","version":"0"}],"subject_alt_name":{"directory_names":[],"dns_names":["satorikoubou.com","www.satorikoubou.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]}},"fingerprint_md5":"c81e52d6dd6c9437c3648992bdc22786","fingerprint_sha1":"c9a784f62084cd1dff756684a15e1e8b4dde6c4a","fingerprint_sha256":"2ddbf5bdf452c82ff758e686f1b772684eb6405e53bbd2726ff4b332fc2cbea8","issuer":{"common_name":["RapidSSL SHA256 CA"],"country":["US"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["GeoTrust Inc."],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=US, O=GeoTrust Inc., CN=RapidSSL SHA256 CA","names":["satorikoubou.com","www.satorikoubou.com"],"redacted":false,"serial_number":"8791515693322077527271359643668735873","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"I+CfwOVwBzuIVE2BFWNbgTfjbgGROtXuzJL2W7Tn39opWajLeoqE/uCTcAB2aGsBg+lok1jSTqRqteQ4tRp9h6ry7kH1AO+nkmhaiqAlo1SOoIaS1bnIaB3exoPA6aggIWK6QcPVlFc71wRo/dIFy3Yz1kI2pFb5d/T2E3KcoT+yXLDS0VxeMv8QHo6op7iWJU8R/V7Vfn758yWKZItzCgNcHJroOqFWU9P6UfS3KE5Qi7/FKGZW6UvlhnQjDZOQH+5046AegQl379CUWVfVcOAK7WqCuuo1Ukb904IPVm1BNhP1lLp5gCPkwxrZfyDEKcO/cWk5wleTycsN+kb4Xg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"81e1cd1aabbf4a5ed09a76ae9b9d6c1a887f4dfc8b7e0e7f39416d0bb095121d","subject":{"common_name":["satorikoubou.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=satorikoubou.com","subject_key_info":{"fingerprint_sha256":"82ee7833ed47dc9eb832f39aff27afee9698ab1952482950d85c58bc20cbbe01","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"ullF51gJOFGv1tvNlwYXzi2R8fZjyPIwtN1Tgk6Ojmg8B/wakNoJLt4c88Y8LZpW91Z00qClPEks1vF/bdjqPQuVpDFrnR9hTedszTkwxoYK2iFgLAmbU1vomoPkcU3vH3ij0zL+f7TtblLyL0kHkWssTW0FfU0taSG1piT2uRAG3+atxPIXg85pymt75fV3h1VVTI0mxN2O0NaYlLO5Wzn3bI/LtDG02aun4Up81NH8G4zGRFleU7lPNXB61XSJFqfmlA3rPH46g0PfJFCjZjScoDnkKV1LcEpshzu1f57yiuO+ZzF41BptFigDxzjLhW+NXEzvSIqM07WpMRnJWw=="}},"tbs_fingerprint":"71a2e4840044941c2ff1c3d3eb5c6068fad15e57bc0862a604fc58e7435660c6","tbs_noct_fingerprint":"7ac2112753a8a94e4977bf0459a2fb4e29cfb47f1ae3f7f0e0922ac381f603d1","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-04-14 23:59:59 UTC","length":"31622399","start":"2017-04-14 00:00:00 UTC"},"version":"3"},"precert":false,"raw":"MIIFejCCBGKgAwIBAgIQBp0vMHMXtj4RljrrVjxngTANBgkqhkiG9w0BAQsFADBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSUmFwaWRTU0wgU0hBMjU2IENBMB4XDTE3MDQxNDAwMDAwMFoXDTE4MDQxNDIzNTk1OVowGzEZMBcGA1UEAwwQc2F0b3Jpa291Ym91LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALpZRedYCThRr9bbzZcGF84tkfH2Y8jyMLTdU4JOjo5oPAf8GpDaCS7eHPPGPC2aVvdWdNKgpTxJLNbxf23Y6j0LlaQxa50fYU3nbM05MMaGCtohYCwJm1Nb6JqD5HFN7x94o9My/n+07W5S8i9JB5FrLE1tBX1NLWkhtaYk9rkQBt/mrcTyF4POacpre+X1d4dVVUyNJsTdjtDWmJSzuVs592yPy7QxtNmrp+FKfNTR/BuMxkRZXlO5TzVwetV0iRan5pQN6zx+OoND3yRQo2Y0nKA55CldS3BKbIc7tX+e8orjvmcxeNQabRYoA8c4y4VvjVxM70iKjNO1qTEZyVsCAwEAAaOCApEwggKNMDEGA1UdEQQqMCiCEHNhdG9yaWtvdWJvdS5jb22CFHd3dy5zYXRvcmlrb3Vib3UuY29tMAkGA1UdEwQCMAAwKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL2dwLnN5bWNiLmNvbS9ncC5jcmwwbwYDVR0gBGgwZjBkBgZngQwBAgEwWjAqBggrBgEFBQcCARYeaHR0cHM6Ly93d3cucmFwaWRzc2wuY29tL2xlZ2FsMCwGCCsGAQUFBwICMCAMHmh0dHBzOi8vd3d3LnJhcGlkc3NsLmNvbS9sZWdhbDAfBgNVHSMEGDAWgBSXwidQnsLJ7AyIMsh8reKmAU/abzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL2dwLnN5bWNkLmNvbTAmBggrBgEFBQcwAoYaaHR0cDovL2dwLnN5bWNiLmNvbS9ncC5jcnQwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdgDd6x0reg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+zAAAAVtqYzIkAAAEAwBHMEUCIQD9H5tNCLSuqtTe3jeWzRBa689p/lkPTyjYQcWVVfapTAIgUudHUJAGw2XY5bCPwWE6aiJDYgYXGvv8YrYefN5I880AdgCkuQmQtBhYFIe7E6LMZ3AKPDWYBPkb37jjd80OyA3cEAAAAVtqYzJTAAAEAwBHMEUCIQDDkpz2Twwhyh4YZ/KysXbJ11YoF1fpjKzbw6lx+NHClQIgXQ0GZ9DDP4Qfd/OTYyHFu3Z66HTB9IqsnV+CLt2MYfowDQYJKoZIhvcNAQELBQADggEBACPgn8DlcAc7iFRNgRVjW4E3424BkTrV7syS9lu059/aKVmoy3qKhP7gk3AAdmhrAYPpaJNY0k6karXkOLUafYeq8u5B9QDvp5JoWoqgJaNUjqCGktW5yGgd3saDwOmoICFiukHD1ZRXO9cEaP3SBct2M9ZCNqRW+Xf09hNynKE/slyw0tFcXjL/EB6OqKe4liVPEf1e1X5++fMlimSLcwoDXBya6DqhVlPT+lH0tyhOUIu/xShmVulL5YZ0Iw2TkB/udOOgHoEJd+/QlFlX1XDgCu1qgrrqNVJG/dOCD1ZtQTYT9ZS6eYAj5MMa2X8gxCnDv3FpOcJXk8nLDfpG+F4=","tags":["ct","expired","was-trusted"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["e6683e88315cd1cb403c0cea490f7c4b4c82c91cd485037489aadbaa90839f61"],"paths":[{"path":["2ddbf5bdf452c82ff758e686f1b772684eb6405e53bbd2726ff4b332fc2cbea8","e6683e88315cd1cb403c0cea490f7c4b4c82c91cd485037489aadbaa90839f61","ff856a2d251dcd88d36656f450126798cfabaade40799c722de4d2b5db36a73a"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["e6683e88315cd1cb403c0cea490f7c4b4c82c91cd485037489aadbaa90839f61"],"paths":[{"path":["2ddbf5bdf452c82ff758e686f1b772684eb6405e53bbd2726ff4b332fc2cbea8","e6683e88315cd1cb403c0cea490f7c4b4c82c91cd485037489aadbaa90839f61","4507f600308cabe10dc1d3f676d281f217ed37d7e62a23654ddef0d09cbf019b","08297a4047dba23680c731db6e317653ca7848e1bebd3a0b0179a707f92cf178"]},{"path":["2ddbf5bdf452c82ff758e686f1b772684eb6405e53bbd2726ff4b332fc2cbea8","e6683e88315cd1cb403c0cea490f7c4b4c82c91cd485037489aadbaa90839f61","ff856a2d251dcd88d36656f450126798cfabaade40799c722de4d2b5db36a73a"]},{"path":["2ddbf5bdf452c82ff758e686f1b772684eb6405e53bbd2726ff4b332fc2cbea8","e6683e88315cd1cb403c0cea490f7c4b4c82c91cd485037489aadbaa90839f61","3c35cc963eb004451323d3275d05b353235053490d9cd83729a2faf5e7ca1cc0","08297a4047dba23680c731db6e317653ca7848e1bebd3a0b0179a707f92cf178"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["e6683e88315cd1cb403c0cea490f7c4b4c82c91cd485037489aadbaa90839f61"],"paths":[{"path":["2ddbf5bdf452c82ff758e686f1b772684eb6405e53bbd2726ff4b332fc2cbea8","e6683e88315cd1cb403c0cea490f7c4b4c82c91cd485037489aadbaa90839f61","4507f600308cabe10dc1d3f676d281f217ed37d7e62a23654ddef0d09cbf019b","08297a4047dba23680c731db6e317653ca7848e1bebd3a0b0179a707f92cf178"]},{"path":["2ddbf5bdf452c82ff758e686f1b772684eb6405e53bbd2726ff4b332fc2cbea8","e6683e88315cd1cb403c0cea490f7c4b4c82c91cd485037489aadbaa90839f61","ff856a2d251dcd88d36656f450126798cfabaade40799c722de4d2b5db36a73a"]},{"path":["2ddbf5bdf452c82ff758e686f1b772684eb6405e53bbd2726ff4b332fc2cbea8","e6683e88315cd1cb403c0cea490f7c4b4c82c91cd485037489aadbaa90839f61","3c35cc963eb004451323d3275d05b353235053490d9cd83729a2faf5e7ca1cc0","08297a4047dba23680c731db6e317653ca7848e1bebd3a0b0179a707f92cf178"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["e6683e88315cd1cb403c0cea490f7c4b4c82c91cd485037489aadbaa90839f61"],"paths":[{"path":["2ddbf5bdf452c82ff758e686f1b772684eb6405e53bbd2726ff4b332fc2cbea8","e6683e88315cd1cb403c0cea490f7c4b4c82c91cd485037489aadbaa90839f61","ff856a2d251dcd88d36656f450126798cfabaade40799c722de4d2b5db36a73a"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"pass","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"pass","e_sub_cert_crl_distribution_points_marked_critical":"pass","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"pass","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"pass","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 14:13:05 UTC","ct":{"google_argon_2018":{"added_to_ct_at":"2018-03-24 03:44:14 UTC","ct_to_censys_at":"2018-08-04 18:44:34 UTC","index":"104011187"}},"fingerprint_sha256":"8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","metadata":{"added_at":"2018-03-19 14:13:05 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 09:31:19 UTC","seen_in_scan":true,"source":"scan","updated_at":"2018-08-28 12:38:18 UTC"},"parent_spki_subject_fingerprint":"9d925570dead69e10b5eb5d03b543a6ca814a5e5783556b29ce34efc6e56086e","parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://hd.symcb.com/hd.crt"],"ocsp_urls":["http://hd.symcd.com"]},"authority_key_id":"caac5de1902ff1ef8cd49f3501e1013ba0cec177","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://d.symcb.com/cps"],"id":"2.23.140.1.2.1","user_notice":[{"explicit_text":"https://d.symcb.com/rpa","notice_reference":[]}]}],"crl_distribution_points":[],"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"3esdK3oNT6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvsw=","signature":"BAMASDBGAiEA9baE512hx+FUCCzb67rCeYEWeFjS2nIEsr4wISzhA/oCIQCewV0fzO2gOwu8tz7rVzbHKgIzVU6MxapDbW6pNqbh7g==","timestamp":"2017-05-30 12:45:42 UTC","version":"0"},{"log_id":"pLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BA=","signature":"BAMASDBGAiEA5xi07hZUBQ1gbNJGNuRJC9FAHORasaE3MzrcUOlcWu4CIQDk1L1DANx6G62RtztGzfk//IJRnjSpFzUL1AS78TOfAg==","timestamp":"2017-05-30 12:45:43 UTC","version":"0"}],"subject_alt_name":{"directory_names":[],"dns_names":["www.choreoscope.com","choreoscope.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]}},"fingerprint_md5":"44a7bc96d3c1de4434d8677def9bac11","fingerprint_sha1":"28f3e1ea3cd47ba7967e53214951937c472532c1","fingerprint_sha256":"8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","issuer":{"common_name":["Symantec Basic DV SSL CA - G2"],"country":["US"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Symantec Corporation"],"organization_id":[],"organizational_unit":["Symantec Trust Network","Domain Validated SSL"],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=US, O=Symantec Corporation, OU=Symantec Trust Network, OU=Domain Validated SSL, CN=Symantec Basic DV SSL CA - G2","names":["www.choreoscope.com","choreoscope.com"],"redacted":false,"serial_number":"146506963739342817134349381055940213539","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"IePq5nY1Ei88+x1blOPt9hsIknMO2IKwiu/aF6uEJkeBIr8Ivj/btTz6QcLcqLaCH92t4hJLG3wV8K7X+0/BxDIxGrmrgDD5/EdLSx6bwlRoU/r5XY6zMvlDCDJKX9Xh+b59hxaEiLcwvf3Aga1fWXSb8Me1KTUvx3qx9X5NB9n7tLrqRnQ0eptLp3IqRW0OH+yspbNkzOQjydHkLDmoSyoM7YEHF41sLJXZf6TyAK6zD/VmigTmwuRMpFFxOa0A94JKqQWg2851jtWRzDZiBjSv8J73tV13t5mv6/BJWhpHkBMXDXMBlRylK+vw8jYW5PElO/lyLImE9pakJol/4g=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"88356ebcaa0c497dd6e164df3c354fb2158f35b96a1ada3918000b51abc6b3ea","subject":{"common_name":["www.choreoscope.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=www.choreoscope.com","subject_key_info":{"fingerprint_sha256":"41875c0e577dee59369aa601fa930bd7d43308d8bb7944b87d6a95653cfcadcb","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"r2gZDoNgX8PVLZPBAwyRrP/jMTk+eVs72JrE4So+gpBKA2DGsHmhNPS70hkfearaCuETAsf+hfsQDIImFJ5y7lLfawIClFMJFZAjFvJhGjLcPJJiBEoPi67dWk3GJgVdaagqLix35Frjc2RDbolwBet/UAeq0JeZJ25zJ10CGItP893YPxX9FxiF4VpLi3X+jgZJa8+IU2iKlwPHjHjpKYUob1uFkTg2PeWhvmRhl7bzsbYF93Do1Nx2zxlHipDlajp5hejd7KKf/lRYDDetRfu/Pfxtq5FWFCAFkS8giy072z4v2B+Vjk7Wmgs66zJTgDsDqyPlTBBaFwTw/KyW5Q=="}},"tbs_fingerprint":"2abff5b9d9adf9189543294ca8e7746ad69506b71e0f632fcb1225d2ed4f107c","tbs_noct_fingerprint":"b2416f1079eb7196bce85906a625f8a8b4b1335c556bd8fcb963a20441cba5ba","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-05-30 23:59:59 UTC","length":"31622399","start":"2017-05-30 00:00:00 UTC"},"version":"3"},"precert":false,"raw":"MIIFlTCCBH2gAwIBAgIQbjg3AJXpzjLnbg0Wy4k7IzANBgkqhkiG9w0BAQsFADCBlDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEmMCQGA1UEAxMdU3ltYW50ZWMgQmFzaWMgRFYgU1NMIENBIC0gRzIwHhcNMTcwNTMwMDAwMDAwWhcNMTgwNTMwMjM1OTU5WjAeMRwwGgYDVQQDDBN3d3cuY2hvcmVvc2NvcGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr2gZDoNgX8PVLZPBAwyRrP/jMTk+eVs72JrE4So+gpBKA2DGsHmhNPS70hkfearaCuETAsf+hfsQDIImFJ5y7lLfawIClFMJFZAjFvJhGjLcPJJiBEoPi67dWk3GJgVdaagqLix35Frjc2RDbolwBet/UAeq0JeZJ25zJ10CGItP893YPxX9FxiF4VpLi3X+jgZJa8+IU2iKlwPHjHjpKYUob1uFkTg2PeWhvmRhl7bzsbYF93Do1Nx2zxlHipDlajp5hejd7KKf/lRYDDetRfu/Pfxtq5FWFCAFkS8giy072z4v2B+Vjk7Wmgs66zJTgDsDqyPlTBBaFwTw/KyW5QIDAQABo4ICVjCCAlIwLwYDVR0RBCgwJoITd3d3LmNob3Jlb3Njb3BlLmNvbYIPY2hvcmVvc2NvcGUuY29tMAkGA1UdEwQCMAAwYQYDVR0gBFowWDBWBgZngQwBAgEwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGQwXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwHwYDVR0jBBgwFoAUyqxd4ZAv8e+M1J81AeEBO6DOwXcwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9oZC5zeW1jZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9oZC5zeW1jYi5jb20vaGQuY3J0MIIBBgYKKwYBBAHWeQIEAgSB9wSB9ADyAHcA3esdK3oNT6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvswAAAFcWWP4WwAABAMASDBGAiEA9baE512hx+FUCCzb67rCeYEWeFjS2nIEsr4wISzhA/oCIQCewV0fzO2gOwu8tz7rVzbHKgIzVU6MxapDbW6pNqbh7gB3AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABXFlj+Q0AAAQDAEgwRgIhAOcYtO4WVAUNYGzSRjbkSQvRQBzkWrGhNzM63FDpXFruAiEA5NS9QwDcehutkbc7Rs35P/yCUZ40qRc1C9QEu/EznwIwDQYJKoZIhvcNAQELBQADggEBACHj6uZ2NRIvPPsdW5Tj7fYbCJJzDtiCsIrv2herhCZHgSK/CL4/27U8+kHC3Ki2gh/dreISSxt8FfCu1/tPwcQyMRq5q4Aw+fxHS0sem8JUaFP6+V2OszL5QwgySl/V4fm+fYcWhIi3ML39wIGtX1l0m/DHtSk1L8d6sfV+TQfZ+7S66kZ0NHqbS6dyKkVtDh/srKWzZMzkI8nR5Cw5qEsqDO2BBxeNbCyV2X+k8gCusw/1ZooE5sLkTKRRcTmtAPeCSqkFoNvOdY7Vkcw2YgY0r/Ce97Vdd7eZr+vwSVoaR5ATFw1zAZUcpSvr8PI2FuTxJTv5ciyJhPaWpCaJf+I=","tags":["ct","expired","was-trusted"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db"],"paths":[{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","c9d89ec4fc9cac1e49432294e8a7aa30117ab3e4e0199b9e297d6be10fc6e2df","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","fb2bd3598144356dcbd2b259e8f3ebd0b0f6ee180c15ef553b82d199ef07f39a","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","2399561127a57125de8cefea610ddf2fa078b5c8067f4e828290bfb860e84b3c"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","1512dfaedf9153ffacb70bc805ba32cb6f9cb3d095b64e6659e652c3ca335a32","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","fb2bd3598144356dcbd2b259e8f3ebd0b0f6ee180c15ef553b82d199ef07f39a","d9bc973f88909696da10833197944ca58ac4a88847779c9133374267100eec58","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db"],"paths":[{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","c9d89ec4fc9cac1e49432294e8a7aa30117ab3e4e0199b9e297d6be10fc6e2df","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","fb2bd3598144356dcbd2b259e8f3ebd0b0f6ee180c15ef553b82d199ef07f39a","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","c9d89ec4fc9cac1e49432294e8a7aa30117ab3e4e0199b9e297d6be10fc6e2df","aed50fff622cca42314d02e5886f82348fec2efd2f7abde92f84b6611b1f4461","a4b6b3996fc2f306b3fd8681bd63413d8c5009cc4fa329c2ccf0e2fa1b140305"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","2399561127a57125de8cefea610ddf2fa078b5c8067f4e828290bfb860e84b3c"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","1512dfaedf9153ffacb70bc805ba32cb6f9cb3d095b64e6659e652c3ca335a32","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db"],"paths":[{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","c9d89ec4fc9cac1e49432294e8a7aa30117ab3e4e0199b9e297d6be10fc6e2df","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","fb2bd3598144356dcbd2b259e8f3ebd0b0f6ee180c15ef553b82d199ef07f39a","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","2399561127a57125de8cefea610ddf2fa078b5c8067f4e828290bfb860e84b3c"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","1512dfaedf9153ffacb70bc805ba32cb6f9cb3d095b64e6659e652c3ca335a32","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","fb2bd3598144356dcbd2b259e8f3ebd0b0f6ee180c15ef553b82d199ef07f39a","d9bc973f88909696da10833197944ca58ac4a88847779c9133374267100eec58","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db"],"paths":[{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","c9d89ec4fc9cac1e49432294e8a7aa30117ab3e4e0199b9e297d6be10fc6e2df","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","fb2bd3598144356dcbd2b259e8f3ebd0b0f6ee180c15ef553b82d199ef07f39a","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","2399561127a57125de8cefea610ddf2fa078b5c8067f4e828290bfb860e84b3c"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","1512dfaedf9153ffacb70bc805ba32cb6f9cb3d095b64e6659e652c3ca335a32","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["8d9a7fdfe83a8afa2a676d3c91755c93a8fc939453599e532cf30fe542b3db04","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","c9d89ec4fc9cac1e49432294e8a7aa30117ab3e4e0199b9e297d6be10fc6e2df","d9bc973f88909696da10833197944ca58ac4a88847779c9133374267100eec58","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 07:36:16 UTC","ct":{"google_argon_2018":{"added_to_ct_at":"2018-06-13 01:05:09 UTC","ct_to_censys_at":"2018-08-10 15:31:34 UTC","index":"219517788"},"google_pilot":{"added_to_ct_at":"2018-03-19 06:43:24 UTC","ct_to_censys_at":"2018-08-04 06:44:37 UTC","index":"235621976"},"google_rocketeer":{"added_to_ct_at":"2018-03-19 06:26:28 UTC","ct_to_censys_at":"2018-08-07 09:48:51 UTC","index":"229923219"}},"fingerprint_sha256":"31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","metadata":{"added_at":"2018-03-19 07:36:16 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-12-12 02:00:18 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-12-12 02:01:15 UTC"},"parent_spki_subject_fingerprint":"9d925570dead69e10b5eb5d03b543a6ca814a5e5783556b29ce34efc6e56086e","parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://hd.symcb.com/hd.crt"],"ocsp_urls":["http://hd.symcd.com"]},"authority_key_id":"caac5de1902ff1ef8cd49f3501e1013ba0cec177","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://d.symcb.com/cps"],"id":"2.23.140.1.2.1","user_notice":[{"explicit_text":"https://d.symcb.com/rpa","notice_reference":[]}]}],"crl_distribution_points":[],"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"3esdK3oNT6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvsw=","signature":"BAMARjBEAiBeUH/02v41DfIVcb2jipNgWdTBU/keXu3yVIjFhnY8RwIgCVRivs3bp1B3EA7e6sqrXNjNbD5xXYXBqcO8raIqIDs=","timestamp":"2017-11-11 00:50:49 UTC","version":"0"},{"log_id":"pLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BA=","signature":"BAMASDBGAiEA7H5y7lXCpwrxBvkN1uzsKRinL5AlPyczohdiZ9K8zHoCIQC+5CeqoYEHaB7V+cyekvzEyfm4zRepCeWXs15gFRHaXw==","timestamp":"2017-11-11 00:50:49 UTC","version":"0"}],"subject_alt_name":{"directory_names":[],"dns_names":["www.gorenc.de","gorenc.de"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]}},"fingerprint_md5":"35b29243fc210b9593f14e8e5622aa4c","fingerprint_sha1":"3bdc3202e500af79cadb35ee6e262aed8967d515","fingerprint_sha256":"31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","issuer":{"common_name":["Symantec Basic DV SSL CA - G2"],"country":["US"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Symantec Corporation"],"organization_id":[],"organizational_unit":["Symantec Trust Network","Domain Validated SSL"],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=US, O=Symantec Corporation, OU=Symantec Trust Network, OU=Domain Validated SSL, CN=Symantec Basic DV SSL CA - G2","names":["www.gorenc.de","gorenc.de"],"redacted":false,"serial_number":"76163983498981967239997717946715816731","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"M3NbUYgXxd0E9626MotUWzXK7RldzexYOxnwGxef3eu87mpSckAZ027xU7b9P/+dxkgOrYZYtwRiWs3N8eZpGqAWr5IMcjVrfm0pZ+qCFlANGpxdAKQde/aGoBnsNoT1JGn+MaIa/xFEjZCTAATaCe/J8vfmnP6iWzouvOkHuV8G4Vq27SeuHWvuxK3VgNlfyGABK8Egb1AzBkhPfNjx59jy2Zy4V3Czu4h3j2+Z+UBHKODT/7jczV6aSDfTIUdXY52tRG7kpOmi1GwH8qNLWJXIQdH8uu6JaIccaiJgAsU6mK59U3vmwJX/rUtvZ31na45Gc3ETaraOKmyj6cJ39w=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b65e174e08f4d37ebca2376da48c5353775f2b6547e1bdaa47b8e3febf1c510a","subject":{"common_name":["www.gorenc.de"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=www.gorenc.de","subject_key_info":{"fingerprint_sha256":"bbce4e67c913a8f6bfb992f48b63403ebbc5f477759f2bc406ef730a43fcb39f","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"qyueiQQ4n9Rq76P5N3InA6d1DlG/NtQNIlP5XhB6przyxI6Nl92iOnpAtjO5mHLJNssHNYPgURQKPRbMjYd+hazKS4GzhREG1+gHs33VUxHn0qVehxfi34uzVgSR1sbSjIkT96DK3wUElSc2LsC01yf8smrHadp5q8rkICQV89y3KhPwuAbwGu9IFUIT5YcVs1BRlxDHA+Xwhwt/NJhVaJ6ZiZJHkel8D77R0QETtTiWpeCIVskyHoy9WBPqlqTL18G4JUtGeQKkUbs7SMLUdvHkZWV7+uYJw250mAv4OeNFZslJLAkc/uufy1Elzg4QTzPJTBysbzvaFLTpccGtow=="}},"tbs_fingerprint":"27559a8c13d3eec1a275748034678445d2db7f98771fc6b6ae320b7b260b4ee7","tbs_noct_fingerprint":"d5978f760ef45efd2cd641a44b494a0698399cd85329bac3bb840b0bf9b4bb03","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-12-11 23:59:59 UTC","length":"34214399","start":"2017-11-11 00:00:00 UTC"},"version":"3"},"precert":false,"raw":"MIIFgTCCBGmgAwIBAgIQOUymT33umIKLERMD8cNDGzANBgkqhkiG9w0BAQsFADCBlDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEmMCQGA1UEAxMdU3ltYW50ZWMgQmFzaWMgRFYgU1NMIENBIC0gRzIwHhcNMTcxMTExMDAwMDAwWhcNMTgxMjExMjM1OTU5WjAYMRYwFAYDVQQDDA13d3cuZ29yZW5jLmRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqyueiQQ4n9Rq76P5N3InA6d1DlG/NtQNIlP5XhB6przyxI6Nl92iOnpAtjO5mHLJNssHNYPgURQKPRbMjYd+hazKS4GzhREG1+gHs33VUxHn0qVehxfi34uzVgSR1sbSjIkT96DK3wUElSc2LsC01yf8smrHadp5q8rkICQV89y3KhPwuAbwGu9IFUIT5YcVs1BRlxDHA+Xwhwt/NJhVaJ6ZiZJHkel8D77R0QETtTiWpeCIVskyHoy9WBPqlqTL18G4JUtGeQKkUbs7SMLUdvHkZWV7+uYJw250mAv4OeNFZslJLAkc/uufy1Elzg4QTzPJTBysbzvaFLTpccGtowIDAQABo4ICSDCCAkQwIwYDVR0RBBwwGoINd3d3LmdvcmVuYy5kZYIJZ29yZW5jLmRlMAkGA1UdEwQCMAAwYQYDVR0gBFowWDBWBgZngQwBAgEwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGQwXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwHwYDVR0jBBgwFoAUyqxd4ZAv8e+M1J81AeEBO6DOwXcwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9oZC5zeW1jZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9oZC5zeW1jYi5jb20vaGQuY3J0MIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHUA3esdK3oNT6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvswAAAFfqI7C/wAABAMARjBEAiBeUH/02v41DfIVcb2jipNgWdTBU/keXu3yVIjFhnY8RwIgCVRivs3bp1B3EA7e6sqrXNjNbD5xXYXBqcO8raIqIDsAdwCkuQmQtBhYFIe7E6LMZ3AKPDWYBPkb37jjd80OyA3cEAAAAV+ojsM/AAAEAwBIMEYCIQDsfnLuVcKnCvEG+Q3W7OwpGKcvkCU/JzOiF2Jn0rzMegIhAL7kJ6qhgQdoHtX5zJ6S/MTJ+bjNF6kJ5ZezXmAVEdpfMA0GCSqGSIb3DQEBCwUAA4IBAQAzc1tRiBfF3QT3rboyi1RbNcrtGV3N7Fg7GfAbF5/d67zualJyQBnTbvFTtv0//53GSA6thli3BGJazc3x5mkaoBavkgxyNWt+bSln6oIWUA0anF0ApB179oagGew2hPUkaf4xohr/EUSNkJMABNoJ78ny9+ac/qJbOi686Qe5XwbhWrbtJ64da+7ErdWA2V/IYAErwSBvUDMGSE982PHn2PLZnLhXcLO7iHePb5n5QEco4NP/uNzNXppIN9MhR1djna1EbuSk6aLUbAfyo0tYlchB0fy67olohxxqImACxTqYrn1Te+bAlf+tS29nfWdrjkZzcRNqto4qbKPpwnf3","tags":["ct","expired","was-trusted"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db"],"paths":[{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","fb2bd3598144356dcbd2b259e8f3ebd0b0f6ee180c15ef553b82d199ef07f39a","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","c9d89ec4fc9cac1e49432294e8a7aa30117ab3e4e0199b9e297d6be10fc6e2df","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","2399561127a57125de8cefea610ddf2fa078b5c8067f4e828290bfb860e84b3c"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","fb2bd3598144356dcbd2b259e8f3ebd0b0f6ee180c15ef553b82d199ef07f39a","d9bc973f88909696da10833197944ca58ac4a88847779c9133374267100eec58","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","1512dfaedf9153ffacb70bc805ba32cb6f9cb3d095b64e6659e652c3ca335a32","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db"],"paths":[{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","fb2bd3598144356dcbd2b259e8f3ebd0b0f6ee180c15ef553b82d199ef07f39a","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","c9d89ec4fc9cac1e49432294e8a7aa30117ab3e4e0199b9e297d6be10fc6e2df","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","2399561127a57125de8cefea610ddf2fa078b5c8067f4e828290bfb860e84b3c"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","1512dfaedf9153ffacb70bc805ba32cb6f9cb3d095b64e6659e652c3ca335a32","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","1512dfaedf9153ffacb70bc805ba32cb6f9cb3d095b64e6659e652c3ca335a32","0081c4e7d8fd3fcf1fe8917c23efcd93674f85f13615d6cb2c3546533bf59180","a4b6b3996fc2f306b3fd8681bd63413d8c5009cc4fa329c2ccf0e2fa1b140305"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db"],"paths":[{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","fb2bd3598144356dcbd2b259e8f3ebd0b0f6ee180c15ef553b82d199ef07f39a","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","c9d89ec4fc9cac1e49432294e8a7aa30117ab3e4e0199b9e297d6be10fc6e2df","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","2399561127a57125de8cefea610ddf2fa078b5c8067f4e828290bfb860e84b3c"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","1512dfaedf9153ffacb70bc805ba32cb6f9cb3d095b64e6659e652c3ca335a32","1619e3ec381421b29587a67fa63e06938c191374b30714264659e2c7101aacc5","83ce3c1229688a593d485f81973c0f9195431eda37cc5e36430e79c7a888638b"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","1512dfaedf9153ffacb70bc805ba32cb6f9cb3d095b64e6659e652c3ca335a32","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db"],"paths":[{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","c9d89ec4fc9cac1e49432294e8a7aa30117ab3e4e0199b9e297d6be10fc6e2df","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","fb2bd3598144356dcbd2b259e8f3ebd0b0f6ee180c15ef553b82d199ef07f39a","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","2399561127a57125de8cefea610ddf2fa078b5c8067f4e828290bfb860e84b3c"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","fb2bd3598144356dcbd2b259e8f3ebd0b0f6ee180c15ef553b82d199ef07f39a","d9bc973f88909696da10833197944ca58ac4a88847779c9133374267100eec58","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]},{"path":["31d92531b3e56344113b2754b1765a97357582396d6a0a8119765a4eeae65d40","dff583e3a1ed35e57d95104817ad823c055fb9071cd400435b5fc74e692081db","1512dfaedf9153ffacb70bc805ba32cb6f9cb3d095b64e6659e652c3ca335a32","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 15:35:03 UTC","ct":{"google_pilot":{"added_to_ct_at":"2018-03-19 14:44:00 UTC","ct_to_censys_at":"2018-08-04 06:49:30 UTC","index":"235798390"},"symantec_ws_ct":{"added_to_ct_at":"2018-03-19 14:43:59 UTC","ct_to_censys_at":"2018-07-31 01:45:23 UTC","index":"7470548"}},"fingerprint_sha256":"fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","metadata":{"added_at":"2018-03-19 15:35:03 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-10-09 03:51:49 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-10-09 09:30:40 UTC"},"parent_spki_subject_fingerprint":"4c2768f71dd5dfea6695756d1784bcd309a5aa53ca45fb29b46de78999eacc1f","parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://ss.symcb.com/ss.crt"],"ocsp_urls":["http://ss.symcd.com"]},"authority_key_id":"5f60cf619055df8443148a602ab2f57af44318ef","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://d.symcb.com/cps"],"id":"2.23.140.1.2.2","user_notice":[{"explicit_text":"https://d.symcb.com/rpa","notice_reference":[]}]}],"crl_distribution_points":["http://ss.symcb.com/ss.crl"],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["zlp07898.vci.att.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]}},"fingerprint_md5":"3ad2a5d3f66885ac31c7d1f3841fc9d2","fingerprint_sha1":"25a1d1b5552435c08b7f5ad7275d0ef7380cbbff","fingerprint_sha256":"fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","issuer":{"common_name":["Symantec Class 3 Secure Server CA - G4"],"country":["US"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Symantec Corporation"],"organization_id":[],"organizational_unit":["Symantec Trust Network"],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=US, O=Symantec Corporation, OU=Symantec Trust Network, CN=Symantec Class 3 Secure Server CA - G4","names":["zlp07898.vci.att.com"],"redacted":false,"serial_number":"65761655390316859546679841280231086762","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"A2UXtzqEKPSDkzzjFz0ZNJV4KDzTnTuK80Akv2sdnPuaDNFu3gn67AM3xldd9ZkZpt0uefxJHCfSMc96NAEG3kHPl84wNbyzcASSDJJ11CMk1VoUwqFTjc6LU5NX/sYbNVOPAkNL7d8KBhJf9couZ5NymhRpoyZTXpnrWj5gundbE92Pm4PTVG71FJ9v3k05GqbO2yXMpZcLUI7tw4Ug+/J7NxrWN8HAedO/uQl6rbfogLl0ZC0fpO9JZ2C1g+M6bgNGQ0hQXSZNPVzlIlRxgw/2gg7wYkmdXErh6s68xnJpfbxzoOMLHUya9NDBb6jFKDVtk3TZBvl+Ay6p13WqEw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"551b570d2705268c8c24bf7f226decda6ed34eadffab70e1cd67b9ca074416be","subject":{"common_name":["zlp07898.vci.att.com"],"country":["US"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Southfield"],"organization":["AT\u0026T Services, Inc."],"organization_id":[],"organizational_unit":["MQSUPT/ZLP07898/LSOMSPRD"],"postal_code":[],"province":["Michigan"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=US, ST=Michigan, L=Southfield, O=AT\u0026T Services, Inc., OU=MQSUPT/ZLP07898/LSOMSPRD, CN=zlp07898.vci.att.com","subject_key_info":{"fingerprint_sha256":"d574cf207b7b1fb8799ce86a1f72eeb73db10c7fa0174bea23ae575c2d2b2c3e","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"j2P43IHVwF+/S2M3m02+qvXqBudX1Dj4mbU2GrGBiS5JJAgGxeeaSg5KwUxWHKx7Ewu/lo7jWG4bVMvN02WZAMISKm5GIutI1V68vk5WYZa3nDAtHMuP7GV8kHKr38rbHVroGWkLF0rJiI4HeJAmfMLrUVUqk8EtBg5GTbzwE5KcpiChgauuT4z1fJdymgttk/b3mSLNwAN2F+8/fH2L9JqROI1n7/0kKD/7+JsdihVnxOWih7MPKNL/ZOOcefFx/cPqyH8O7jcnoyaiLX1wpPCozDoHSSGoAQ7J1xiGUzKiNJjwC0rpd4VsaiEgRJpCuSxtvzbKlXbn97VsCjQ5sw=="}},"tbs_fingerprint":"4d287bcb5d427edba4070309cbdbd348de1e91d4610bc2301f8e924d61307326","tbs_noct_fingerprint":"19023a99b21a95a01fd18514c28b5396b67d40941b677b2e1fa10d331c4a5d18","unknown_extensions":[],"validation_level":"OV","validity":{"end":"2018-08-31 23:59:59 UTC","length":"14342399","start":"2018-03-19 00:00:00 UTC"},"version":"3"},"precert":true,"raw":"MIIFHjCCBAagAwIBAgIQMXk78AAnagRrfxpnzfoaqjANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVjIENsYXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MB4XDTE4MDMxOTAwMDAwMFoXDTE4MDgzMTIzNTk1OVowgZUxCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhNaWNoaWdhbjETMBEGA1UEBwwKU291dGhmaWVsZDEcMBoGA1UECgwTQVQmVCBTZXJ2aWNlcywgSW5jLjEhMB8GA1UECwwYTVFTVVBUL1pMUDA3ODk4L0xTT01TUFJEMR0wGwYDVQQDDBR6bHAwNzg5OC52Y2kuYXR0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI9j+NyB1cBfv0tjN5tNvqr16gbnV9Q4+Jm1NhqxgYkuSSQIBsXnmkoOSsFMVhysexMLv5aO41huG1TLzdNlmQDCEipuRiLrSNVevL5OVmGWt5wwLRzLj+xlfJByq9/K2x1a6BlpCxdKyYiOB3iQJnzC61FVKpPBLQYORk288BOSnKYgoYGrrk+M9XyXcpoLbZP295kizcADdhfvP3x9i/SakTiNZ+/9JCg/+/ibHYoVZ8TlooezDyjS/2TjnHnxcf3D6sh/Du43J6Mmoi19cKTwqMw6B0khqAEOydcYhlMyojSY8AtK6XeFbGohIESaQrksbb82ypV25/e1bAo0ObMCAwEAAaOCAX4wggF6MB8GA1UdEQQYMBaCFHpscDA3ODk4LnZjaS5hdHQuY29tMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBhBgNVHSAEWjBYMFYGBmeBDAECAjBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29tL2NwczAlBggrBgEFBQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAfBgNVHSMEGDAWgBRfYM9hkFXfhEMUimAqsvV69EMY7zArBgNVHR8EJDAiMCCgHqAchhpodHRwOi8vc3Muc3ltY2IuY29tL3NzLmNybDBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zcy5zeW1jZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zcy5zeW1jYi5jb20vc3MuY3J0MBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQADZRe3OoQo9IOTPOMXPRk0lXgoPNOdO4rzQCS/ax2c+5oM0W7eCfrsAzfGV131mRmm3S55/EkcJ9Ixz3o0AQbeQc+XzjA1vLNwBJIMknXUIyTVWhTCoVONzotTk1f+xhs1U48CQ0vt3woGEl/1yi5nk3KaFGmjJlNemetaPmC6d1sT3Y+bg9NUbvUUn2/eTTkaps7bJcyllwtQju3DhSD78ns3GtY3wcB507+5CXqtt+iAuXRkLR+k70lnYLWD4zpuA0ZDSFBdJk09XOUiVHGDD/aCDvBiSZ1cSuHqzrzGcml9vHOg4wsdTJr00MFvqMUoNW2TdNkG+X4DLqnXdaoT","tags":["ct","expired","was-trusted","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916"],"paths":[{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","d9bc973f88909696da10833197944ca58ac4a88847779c9133374267100eec58","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916"],"paths":[{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","4cd802cfde204d5447430b1442c38e8a579b4f5c35f1b961f776410c2a58e313","a4b6b3996fc2f306b3fd8681bd63413d8c5009cc4fa329c2ccf0e2fa1b140305"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916"],"paths":[{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916","d9bc973f88909696da10833197944ca58ac4a88847779c9133374267100eec58","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916"],"paths":[{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","d9bc973f88909696da10833197944ca58ac4a88847779c9133374267100eec58","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["fc536626efbd7a8cabc71aaf4ae36bd45808f732462ba999f48bad1faf667436","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"pass","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"pass","e_cert_policy_ov_requires_province_or_locality":"pass","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"pass","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"pass","e_sub_cert_crl_distribution_points_marked_critical":"pass","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"pass","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"pass","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 00:34:19 UTC","ct":{"google_pilot":{"added_to_ct_at":"2018-03-18 23:30:58 UTC","ct_to_censys_at":"2018-08-04 06:39:54 UTC","index":"235447659"},"symantec_ws_ct":{"added_to_ct_at":"2018-03-18 23:30:58 UTC","ct_to_censys_at":"2018-07-31 01:45:10 UTC","index":"7469486"}},"fingerprint_sha256":"3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","metadata":{"added_at":"2018-03-19 00:34:19 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2019-03-20 01:43:29 UTC","seen_in_scan":false,"source":"ct","updated_at":"2019-03-20 01:43:29 UTC"},"parent_spki_subject_fingerprint":"4c2768f71dd5dfea6695756d1784bcd309a5aa53ca45fb29b46de78999eacc1f","parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://ss.symcb.com/ss.crt"],"ocsp_urls":["http://ss.symcd.com"]},"authority_key_id":"5f60cf619055df8443148a602ab2f57af44318ef","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://d.symcb.com/cps"],"id":"2.23.140.1.2.2","user_notice":[{"explicit_text":"https://d.symcb.com/rpa","notice_reference":[]}]}],"crl_distribution_points":["http://ss.symcb.com/ss.crl"],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["vsmart-b88fa4b2-12a8-4283-8581-9e55d7f2fda9-0.viptela.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]}},"fingerprint_md5":"01347ebc5c13adcb494e87fa0c1a69aa","fingerprint_sha1":"5ce1b2ed178e568c4f21e96bd322107006cdb9b3","fingerprint_sha256":"3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","issuer":{"common_name":["Symantec Class 3 Secure Server CA - G4"],"country":["US"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Symantec Corporation"],"organization_id":[],"organizational_unit":["Symantec Trust Network"],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=US, O=Symantec Corporation, OU=Symantec Trust Network, CN=Symantec Class 3 Secure Server CA - G4","names":["vsmart-b88fa4b2-12a8-4283-8581-9e55d7f2fda9-0.viptela.com"],"redacted":false,"serial_number":"121924211102074767803542823248712385164","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"RnKLBVGAKVjKmdFimfmAPTsR+I1jCtLfx6bltH8XccGlSQM8xO43D9jYmlYa60twyjCSVUTL3OhQk7hUE/sAUj6trKin8cJ/mSSG2i4qzTRpiJZ6CD92q5uknoX/iECj1X7xLk9MXV+W7Dsmy10hPHtgKBnWWiMlkxBAYdKmfgXlat0qMdBUOOAChfYtNSxPn3L9a7h5cpG43K+AtoCJxy7Zv6YeBmTir3dk4wsyrp9Ko5UrKa/oWBNni3XYlDJeacQnZBoeLkLeCwlo1U0X4GJVCbVL/W/T0Si4c2dbbr1Dzcgd1Q7ehwIBukD7vq2DrGfGCK/1xCekd/5Mi+KjEg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"eb420e606ab2983aedddbe0df632349cb326fcd7ad05c2048be1caf6aa927a4e","subject":{"common_name":["vsmart-b88fa4b2-12a8-4283-8581-9e55d7f2fda9-0.viptela.com"],"country":["US"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["San Jose"],"organization":["vIPtela Inc"],"organization_id":[],"organizational_unit":["senthil11 - 19251"],"postal_code":[],"province":["California"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=US, ST=California, L=San Jose, O=vIPtela Inc, OU=senthil11 - 19251, CN=vsmart-b88fa4b2-12a8-4283-8581-9e55d7f2fda9-0.viptela.com","subject_key_info":{"fingerprint_sha256":"dee162a2dcb8426d6a358de1659bfb0275a9eced66b18c03982cf543e9121fd3","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"ye3Cfm1T1DuubZvu6w5r04fPBlYR1ed7dFoUYmf+BRa/wM6J0ZfUJfyup86CWta/xrwbBFOuug2xSUk83Aywn1cMFrLd4RkAF2jnRxEoeOBLrmCE7RLbm5Gs79a5f71OOFV34TNvdgQggqjmDIEbi0oydBr2FTZiM2MxMllGSbwrr2Yfs1iW+KRMgaTMJFeJaXPveqy9LZCSxvg93ozuO27Vk99HvOi1PwM6Y0+iEGLL6KlylxMUYjDu/WvnSP7bVuNUjW8bzO7U4FhBQ7Fc9c+FuOmWst59x9ytTU6Xk8vIeEWvlDfVrww5/e14BoxC/j3xy/r2ebrVNTffg6T6zQ=="}},"tbs_fingerprint":"35b9f02c5f13f9e44819e7049d7e5c97e5dc781bb0b0eeff1f456ed50038bada","tbs_noct_fingerprint":"7631d996a38de28187614eb1759a9084025297a34997583310b0ae83c67e97fb","unknown_extensions":[],"validation_level":"OV","validity":{"end":"2019-03-19 23:59:59 UTC","length":"31708799","start":"2018-03-18 00:00:00 UTC"},"version":"3"},"precert":true,"raw":"MIIFWTCCBEGgAwIBAgIQW7m/uJ0K3ScYgmvqLV9CjDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVjIENsYXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MB4XDTE4MDMxODAwMDAwMFoXDTE5MDMxOTIzNTk1OVowgasxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMREwDwYDVQQHDAhTYW4gSm9zZTEUMBIGA1UECgwLdklQdGVsYSBJbmMxGjAYBgNVBAsMEXNlbnRoaWwxMSAtIDE5MjUxMUIwQAYDVQQDDDl2c21hcnQtYjg4ZmE0YjItMTJhOC00MjgzLTg1ODEtOWU1NWQ3ZjJmZGE5LTAudmlwdGVsYS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJ7cJ+bVPUO65tm+7rDmvTh88GVhHV53t0WhRiZ/4FFr/AzonRl9Ql/K6nzoJa1r/GvBsEU666DbFJSTzcDLCfVwwWst3hGQAXaOdHESh44EuuYITtEtubkazv1rl/vU44VXfhM292BCCCqOYMgRuLSjJ0GvYVNmIzYzEyWUZJvCuvZh+zWJb4pEyBpMwkV4lpc+96rL0tkJLG+D3ejO47btWT30e86LU/AzpjT6IQYsvoqXKXExRiMO79a+dI/ttW41SNbxvM7tTgWEFDsVz1z4W46Zay3n3H3K1NTpeTy8h4Ra+UN9WvDDn97XgGjEL+PfHL+vZ5utU1N9+DpPrNAgMBAAGjggGjMIIBnzBEBgNVHREEPTA7gjl2c21hcnQtYjg4ZmE0YjItMTJhOC00MjgzLTg1ODEtOWU1NWQ3ZjJmZGE5LTAudmlwdGVsYS5jb20wCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMGEGA1UdIARaMFgwVgYGZ4EMAQICMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkMF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMB8GA1UdIwQYMBaAFF9gz2GQVd+EQxSKYCqy9Xr0QxjvMCsGA1UdHwQkMCIwIKAeoByGGmh0dHA6Ly9zcy5zeW1jYi5jb20vc3MuY3JsMFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3NzLnN5bWNkLmNvbTAmBggrBgEFBQcwAoYaaHR0cDovL3NzLnN5bWNiLmNvbS9zcy5jcnQwEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAEZyiwVRgClYypnRYpn5gD07EfiNYwrS38em5bR/F3HBpUkDPMTuNw/Y2JpWGutLcMowklVEy9zoUJO4VBP7AFI+rayop/HCf5kkhtouKs00aYiWegg/dqubpJ6F/4hAo9V+8S5PTF1fluw7JstdITx7YCgZ1lojJZMQQGHSpn4F5WrdKjHQVDjgAoX2LTUsT59y/Wu4eXKRuNyvgLaAiccu2b+mHgZk4q93ZOMLMq6fSqOVKymv6FgTZ4t12JQyXmnEJ2QaHi5C3gsJaNVNF+BiVQm1S/1v09EouHNnW269Q83IHdUO3ocCAbpA+76tg6xnxgiv9cQnpHf+TIvioxI=","tags":["ct","expired","was-trusted","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916"],"paths":[{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916","d9bc973f88909696da10833197944ca58ac4a88847779c9133374267100eec58","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916"],"paths":[{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916","8420dfbe376f414bf4c0a81e6936d24ccc03f304835b86c7a39142fca723a689","a4b6b3996fc2f306b3fd8681bd63413d8c5009cc4fa329c2ccf0e2fa1b140305"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916"],"paths":[{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916","d9bc973f88909696da10833197944ca58ac4a88847779c9133374267100eec58","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916"],"paths":[{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","d9bc973f88909696da10833197944ca58ac4a88847779c9133374267100eec58","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","102c2374a203df9e55d34100b2458c89acb34e6e49bbbb0a8d9e0efa4af4a4ce","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","59f8cb7d7e9e13cb778ff62198ebe05551b515a58bbba2ef19c33c760c823916","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17","9acfab7e43c8d880d06b262a94deeee4b4659989c3d0caf19baf6405e41ab7df"]},{"path":["3ed4aa4cf57b4c745361c5d0f5d08514414c8c66462b01d3aaa32be222d13dba","564dbc6a76550fd2d4f4bac6448a1157b33cbd8e0b3fd76d72107540964a85b5","eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"pass","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"pass","e_cert_policy_ov_requires_province_or_locality":"pass","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"pass","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"na","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"pass","e_sub_cert_crl_distribution_points_marked_critical":"pass","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"pass","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"pass","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"warn","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":true}} +{"added_at":"2018-03-19 07:10:21 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 06:34:32 UTC","ct_to_censys_at":"2018-07-30 22:10:17 UTC","index":"15563389"}},"fingerprint_sha256":"1272e4ecf3be35071d8578ef3c16ac6f3ebf1df7dcbb06d0ec17be79a0406553","metadata":{"added_at":"2018-03-19 07:10:21 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 21:45:42 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 05:42:57 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://pki.goog/test/TestGTS1O1.crt"],"ocsp_urls":["http://ocsp.pki.goog/testgts1o1"]},"authority_key_id":"6ec3c47ee011c43ff25493d91ae9917c5ee724cb","certificate_policies":[{"cps":[],"id":"2.23.140.1.2.2","user_notice":[]}],"crl_distribution_points":["http://crl.pki.goog/test/TestGTS1O1.crl"],"ct_poison":true,"extended_key_usage":{"server_auth":true,"unknown":[],"value":[]},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["haplorrhini.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"4b042acb9155022a9c09ab6ba2407afe2e97804b"},"fingerprint_md5":"496495b234b93e04568f8d8b76c2f4a9","fingerprint_sha1":"1d388d7a5e09c8eda72f1a7ca33b55006681df37","fingerprint_sha256":"1272e4ecf3be35071d8578ef3c16ac6f3ebf1df7dcbb06d0ec17be79a0406553","issuer":{"common_name":["Test GTS CA 1O1"],"country":["US"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["Google Trust Services"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Test GTS CA 1O1, O=Google Trust Services, C=US","names":["haplorrhini.com"],"redacted":false,"serial_number":"159649562372928414591475155939744604918","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"Rq4va4+tRR+oGYPlqLF0qZ3Ux/TZFDFnscvjX0JbhTgH/FAPiyCS/EA8lcXXeWXXovlubamiMEC45mXLCgkB5OODbOm4+D8O7fNYAhn6SPFHSKm3/PgIvHfHfAmuwmw4IQDdthD0iOAIgrZnJq/0iG4W5jz10DYnV5QpxKG0CF/5t6788PhCHTCgYfOu8GhUXghVJq2b78pTwqrM580qIb8RfouRVeGhGq2JvWDgNhRA1AreWc/2PXW5IcdRKnBJJDwcpxuKXqtbZ0rwiP3KHvES8UPPr2Q513V1svBzEXzUa2a4JhYedcD1fhePiKeC6OdB0GS7qtd8uUEkaB00Ug=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"2221927fb845a370a12d00d6e59338956221da743ee13e1f25d0bce9d9269571","subject":{"common_name":["haplorrhini.com"],"country":["US"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Mountain View"],"organization":["Google Inc"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["California"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=US, ST=California, L=Mountain View, O=Google Inc, CN=haplorrhini.com","subject_key_info":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","pub":"BH9P4hbWIWlZerhmbZtxA9APSOEmdnDyn+fGkh8tQRea4PVgWVeMZxHK/xEOufezRDWrXlx6wZfTMpr/QyCK4Eg=","x":"f0/iFtYhaVl6uGZtm3ED0A9I4SZ2cPKf58aSHy1BF5o=","y":"4PVgWVeMZxHK/xEOufezRDWrXlx6wZfTMpr/QyCK4Eg="},"fingerprint_sha256":"d626438de048d8ab8ad831e30219ce86c22d2ecd54b4caa0be601ad139233363","key_algorithm":{"name":"ECDSA"}},"tbs_fingerprint":"8b9d5d92a3602ecf2093f56fcc6ff14433e09b6a856ec56453848c40444c3c2f","tbs_noct_fingerprint":"051350e94adca9f4f486795ef8ae7f5102cfcdfb4fa4d3fc53eee12cdd839dda","unknown_extensions":[],"validation_level":"OV","validity":{"end":"2018-03-20 05:34:31 UTC","length":"86400","start":"2018-03-19 05:34:31 UTC"},"version":"3"},"precert":true,"raw":"MIIDuDCCAqCgAwIBAgIQeBtjJKqVuXgAAAAAAADi9jANBgkqhkiG9w0BAQsFADBHMRgwFgYDVQQDEw9UZXN0IEdUUyBDQSAxTzExHjAcBgNVBAoTFUdvb2dsZSBUcnVzdCBTZXJ2aWNlczELMAkGA1UEBhMCVVMwHhcNMTgwMzE5MDUzNDMxWhcNMTgwMzIwMDUzNDMxWjBpMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzETMBEGA1UEChMKR29vZ2xlIEluYzEYMBYGA1UEAxMPaGFwbG9ycmhpbmkuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEf0/iFtYhaVl6uGZtm3ED0A9I4SZ2cPKf58aSHy1BF5rg9WBZV4xnEcr/EQ6597NENateXHrBl9Mymv9DIIrgSKOCAUcwggFDMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1UdDgQWBBRLBCrLkVUCKpwJq2uiQHr+LpeASzAfBgNVHSMEGDAWgBRuw8R+4BHEP/JUk9ka6ZF8XuckyzBsBggrBgEFBQcBAQRgMF4wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vY3NwLnBraS5nb29nL3Rlc3RndHMxbzEwLwYIKwYBBQUHMAKGI2h0dHA6Ly9wa2kuZ29vZy90ZXN0L1Rlc3RHVFMxTzEuY3J0MBoGA1UdEQQTMBGCD2hhcGxvcnJoaW5pLmNvbTATBgNVHSAEDDAKMAgGBmeBDAECAjA4BgNVHR8EMTAvMC2gK6AphidodHRwOi8vY3JsLnBraS5nb29nL3Rlc3QvVGVzdEdUUzFPMS5jcmwwEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAEauL2uPrUUfqBmD5aixdKmd1Mf02RQxZ7HL419CW4U4B/xQD4sgkvxAPJXF13ll16L5bm2pojBAuOZlywoJAeTjg2zpuPg/Du3zWAIZ+kjxR0ipt/z4CLx3x3wJrsJsOCEA3bYQ9IjgCIK2Zyav9IhuFuY89dA2J1eUKcShtAhf+beu/PD4Qh0woGHzrvBoVF4IVSatm+/KU8KqzOfNKiG/EX6LkVXhoRqtib1g4DYUQNQK3lnP9j11uSHHUSpwSSQ8HKcbil6rW2dK8Ij9yh7xEvFDz69kOdd1dbLwcxF81GtmuCYWHnXA9X4Xj4ingujnQdBku6rXfLlBJGgdNFI=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"pass","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"pass","e_cert_policy_ov_requires_province_or_locality":"pass","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"pass","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"pass","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"na","e_ext_key_usage_without_bits":"na","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"na","e_path_len_constraint_zero_or_less":"na","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"na","e_rsa_mod_less_than_2048_bits":"na","e_rsa_no_public_key":"na","e_rsa_public_exponent_not_odd":"na","e_rsa_public_exponent_too_small":"na","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"pass","e_sub_cert_crl_distribution_points_marked_critical":"pass","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"na","e_sub_cert_key_usage_crl_sign_bit_set":"na","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"na","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"pass","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"pass","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"na","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"na","w_rsa_mod_not_odd":"na","w_rsa_public_exponent_not_in_range":"na","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 18:53:00 UTC","ct":{"comodo_mammoth":{"added_to_ct_at":"2018-03-19 18:34:12 UTC","ct_to_censys_at":"2018-08-03 07:43:50 UTC","index":"49474035"},"digicert_ct1":{"added_to_ct_at":"2018-03-19 18:34:12 UTC","ct_to_censys_at":"2018-07-30 20:13:19 UTC","index":"4808826"},"google_pilot":{"added_to_ct_at":"2018-03-19 18:34:13 UTC","ct_to_censys_at":"2018-08-04 06:50:20 UTC","index":"235828760"},"google_rocketeer":{"added_to_ct_at":"2018-03-19 18:34:11 UTC","ct_to_censys_at":"2018-08-07 10:01:31 UTC","index":"230173137"}},"fingerprint_sha256":"006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","metadata":{"added_at":"2018-03-19 18:53:00 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2020-03-20 02:34:29 UTC","seen_in_scan":false,"source":"ct","updated_at":"2020-03-20 08:39:33 UTC"},"parent_spki_subject_fingerprint":"dacb6668080ab331e03651a4ca0910d2be1df0d451696967626c99b66dc5b311","parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://aia.affirmtrust.com/aftov1ca.crt"],"ocsp_urls":["http://ocsp.affirmtrust.com"]},"authority_key_id":"fe60c30da4a29d214f7a784c62c5db14fc3978c4","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.affirmtrust.com/repository"],"id":"1.3.6.1.4.1.34697.2.5","user_notice":[]},{"cps":[],"id":"2.23.140.1.2.2","user_notice":[]}],"crl_distribution_points":["http://crl.affirmtrust.com/crl/aftov1ca.crl"],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["cltfoa001.cokeonena.com","cltfoa002.cokeonena.com","cltfoa003.cokeonena.com","cltfoc001.cokeonena.com","tn9.cokeonena.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"1f12832a8531eccd5afffe65ffe5f9b7d59af43c"},"fingerprint_md5":"4c10f055123b170fad6be52ce6a9f466","fingerprint_sha1":"2dd8528bfea67ca2f1d6d2f197253d2179a50899","fingerprint_sha256":"006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","issuer":{"common_name":["AffirmTrust Certificate Authority - OV1"],"country":["CA"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":["AffirmTrust"],"organization_id":[],"organizational_unit":["See www.affirmtrust.com/repository"],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"C=CA, O=AffirmTrust, OU=See www.affirmtrust.com/repository, CN=AffirmTrust Certificate Authority - OV1","names":["cltfoc001.cokeonena.com","tn9.cokeonena.com","cltfoa001.cokeonena.com","cltfoa002.cokeonena.com","cltfoa003.cokeonena.com"],"redacted":false,"serial_number":"46846643698921748503752482223475410861","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"mcWeSqhE51xZcOAr2a0fKQkRhD8BKvmNNTNJ6Ed9xdE6XAdBtwl6cp47EDB/g24A85Z6TqWocO5DeoFOgD91wRHhiGNhq+YKP42X6BLK1Y2nU15I0ci2hcCtRVSQ4FlIbiYFacBSWRCYR4G674nKPz2M8N57kFlXpCQy3936cF/D+4lZQ0YHK0iBY4N/b8QUn1+rv/NZnFwtveAMQr329r514eShJGQwSAFSDTB1Cp8QCmLwX7cCzziD+ceGC9oN1dEB8zjmE8nvkPSUNrYylt0fWK6XZ2kFHGhvgxg4Th86lG73fZJcc0JBTv5pSQfwF/+KG3s0jg1JH2keHoXK+g=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"df238857cdb76c412cd1b615b113fe124fe3531cb0cd380a98ff83d59d87f865","subject":{"common_name":["tn9.cokeonena.com"],"country":["US"],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":["Atlanta"],"organization":["CONA"],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":["Georgia"],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"C=US, ST=Georgia, L=Atlanta, O=CONA, CN=tn9.cokeonena.com","subject_key_info":{"fingerprint_sha256":"52300f030c24657b5d98b07712a29057762e853ec79df19b9e8107e34b4c7a64","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"2BmEsrcJNlbQB3r/Z0qRJAiKMeBbNPn9K+RyuoYzzqQdpvfmzM55nUHjfuZF/UGSmgPZPJGhsS5lkkxNpkfOJN0zymQYpbbcXSQACiidnYweJoYKn87wN4wadlqLohHOhSJHYEbJGNnNrNsR5C7ZNi2vTn4+JQ3/fVMwPPTEZwIKMNhAQuRtsLUNvjqIPaXwpAOqK1ljsE4d/GsC9wBi0t4t0piETpqiExT2Tm+FECH/cRi5RlfgGXMcvnf4vwqinPAOT8lrWbZ49iDf/kbZjfgkMMktaEeWjomvr2rO9bun55FY3nULDH0KH+EswcsPGVeWWyRN+yLatIAuHTirUQ=="}},"tbs_fingerprint":"6d0864dc4d74c045b0021d7b852af8d64500c4c29feeca5cf034f00d11274ad1","tbs_noct_fingerprint":"60c5b044882b0cbdb5e349732aeefcca7102d7ea44133467f79914fd301ba916","unknown_extensions":[],"validation_level":"OV","validity":{"end":"2020-03-19 18:34:10 UTC","length":"63160199","start":"2018-03-19 18:04:11 UTC"},"version":"3"},"precert":true,"raw":"MIIFhjCCBG6gAwIBAgIQIz5V3BQPhq8AAAAAWAhHrTANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCQ0ExFDASBgNVBAoTC0FmZmlybVRydXN0MSswKQYDVQQLEyJTZWUgd3d3LmFmZmlybXRydXN0LmNvbS9yZXBvc2l0b3J5MTAwLgYDVQQDEydBZmZpcm1UcnVzdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBPVjEwHhcNMTgwMzE5MTgwNDExWhcNMjAwMzE5MTgzNDEwWjBcMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHR2VvcmdpYTEQMA4GA1UEBxMHQXRsYW50YTENMAsGA1UEChMEQ09OQTEaMBgGA1UEAxMRdG45LmNva2VvbmVuYS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYGYSytwk2VtAHev9nSpEkCIox4Fs0+f0r5HK6hjPOpB2m9+bMznmdQeN+5kX9QZKaA9k8kaGxLmWSTE2mR84k3TPKZBilttxdJAAKKJ2djB4mhgqfzvA3jBp2WouiEc6FIkdgRskY2c2s2xHkLtk2La9Ofj4lDf99UzA89MRnAgow2EBC5G2wtQ2+Oog9pfCkA6orWWOwTh38awL3AGLS3i3SmIROmqITFPZOb4UQIf9xGLlGV+AZcxy+d/i/CqKc8A5PyWtZtnj2IN/+RtmN+CQwyS1oR5aOia+vas71u6fnkVjedQsMfQof4SzByw8ZV5ZbJE37Itq0gC4dOKtRAgMBAAGjggIbMIICFzATBgorBgEEAdZ5AgQDAQH/BAIFADCBgAYDVR0RBHkwd4IXY2x0Zm9hMDAxLmNva2VvbmVuYS5jb22CF2NsdGZvYTAwMi5jb2tlb25lbmEuY29tghdjbHRmb2EwMDMuY29rZW9uZW5hLmNvbYIXY2x0Zm9jMDAxLmNva2VvbmVuYS5jb22CEXRuOS5jb2tlb25lbmEuY29tMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwCQYDVR0TBAIwADBsBggrBgEFBQcBAQRgMF4wJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLmFmZmlybXRydXN0LmNvbTAzBggrBgEFBQcwAoYnaHR0cDovL2FpYS5hZmZpcm10cnVzdC5jb20vYWZ0b3YxY2EuY3J0MFcGA1UdIARQME4wQgYKKwYBBAGCjwkCBTA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5hZmZpcm10cnVzdC5jb20vcmVwb3NpdG9yeTAIBgZngQwBAgIwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5hZmZpcm10cnVzdC5jb20vY3JsL2FmdG92MWNhLmNybDAfBgNVHSMEGDAWgBT+YMMNpKKdIU96eExixdsU/Dl4xDAdBgNVHQ4EFgQUHxKDKoUx7M1a//5l/+X5t9Wa9DwwDQYJKoZIhvcNAQELBQADggEBAJnFnkqoROdcWXDgK9mtHykJEYQ/ASr5jTUzSehHfcXROlwHQbcJenKeOxAwf4NuAPOWek6lqHDuQ3qBToA/dcER4YhjYavmCj+Nl+gSytWNp1NeSNHItoXArUVUkOBZSG4mBWnAUlkQmEeBuu+Jyj89jPDee5BZV6QkMt/d+nBfw/uJWUNGBytIgWODf2/EFJ9fq7/zWZxcLb3gDEK99va+deHkoSRkMEgBUg0wdQqfEApi8F+3As84g/nHhgvaDdXRAfM45hPJ75D0lDa2MpbdH1iul2dpBRxob4MYOE4fOpRu932SXHNCQU7+aUkH8Bf/iht7NI4NSR9pHh6Fyvo=","tags":["ct","expired","was-trusted","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["ea4ee2faa57ae4b539b63977fe5bb205b6afb32f7a73b2b363e4be02cd8a91e9","b5fd6f800334f565036b0999f8310b5b0bd7268395d8b267005697af7301c5e8"],"paths":[{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","b5fd6f800334f565036b0999f8310b5b0bd7268395d8b267005697af7301c5e8","b102959f862b71b78efdc7fa9f43b3afd7e52312a07493a752835b991d840f4c","62dd0be9b9f50a163ea0f8e75c053b1eca57ea55c8688f647c6881f2c8357b95"]},{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","ea4ee2faa57ae4b539b63977fe5bb205b6afb32f7a73b2b363e4be02cd8a91e9","b102959f862b71b78efdc7fa9f43b3afd7e52312a07493a752835b991d840f4c","62dd0be9b9f50a163ea0f8e75c053b1eca57ea55c8688f647c6881f2c8357b95"]},{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","b5fd6f800334f565036b0999f8310b5b0bd7268395d8b267005697af7301c5e8","0376ab1d54c5f9803ce4b2e201a0ee7eef7b57b636e8a93c9b8d4860c96f5fa7"]},{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","ea4ee2faa57ae4b539b63977fe5bb205b6afb32f7a73b2b363e4be02cd8a91e9","0376ab1d54c5f9803ce4b2e201a0ee7eef7b57b636e8a93c9b8d4860c96f5fa7"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["ea4ee2faa57ae4b539b63977fe5bb205b6afb32f7a73b2b363e4be02cd8a91e9","b5fd6f800334f565036b0999f8310b5b0bd7268395d8b267005697af7301c5e8"],"paths":[{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","b5fd6f800334f565036b0999f8310b5b0bd7268395d8b267005697af7301c5e8","b102959f862b71b78efdc7fa9f43b3afd7e52312a07493a752835b991d840f4c","62dd0be9b9f50a163ea0f8e75c053b1eca57ea55c8688f647c6881f2c8357b95"]},{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","ea4ee2faa57ae4b539b63977fe5bb205b6afb32f7a73b2b363e4be02cd8a91e9","b102959f862b71b78efdc7fa9f43b3afd7e52312a07493a752835b991d840f4c","62dd0be9b9f50a163ea0f8e75c053b1eca57ea55c8688f647c6881f2c8357b95"]},{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","b5fd6f800334f565036b0999f8310b5b0bd7268395d8b267005697af7301c5e8","0376ab1d54c5f9803ce4b2e201a0ee7eef7b57b636e8a93c9b8d4860c96f5fa7"]},{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","ea4ee2faa57ae4b539b63977fe5bb205b6afb32f7a73b2b363e4be02cd8a91e9","0376ab1d54c5f9803ce4b2e201a0ee7eef7b57b636e8a93c9b8d4860c96f5fa7"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["ea4ee2faa57ae4b539b63977fe5bb205b6afb32f7a73b2b363e4be02cd8a91e9","b5fd6f800334f565036b0999f8310b5b0bd7268395d8b267005697af7301c5e8"],"paths":[{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","b5fd6f800334f565036b0999f8310b5b0bd7268395d8b267005697af7301c5e8","b102959f862b71b78efdc7fa9f43b3afd7e52312a07493a752835b991d840f4c","62dd0be9b9f50a163ea0f8e75c053b1eca57ea55c8688f647c6881f2c8357b95"]},{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","ea4ee2faa57ae4b539b63977fe5bb205b6afb32f7a73b2b363e4be02cd8a91e9","b102959f862b71b78efdc7fa9f43b3afd7e52312a07493a752835b991d840f4c","62dd0be9b9f50a163ea0f8e75c053b1eca57ea55c8688f647c6881f2c8357b95"]},{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","b5fd6f800334f565036b0999f8310b5b0bd7268395d8b267005697af7301c5e8","0376ab1d54c5f9803ce4b2e201a0ee7eef7b57b636e8a93c9b8d4860c96f5fa7"]},{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","ea4ee2faa57ae4b539b63977fe5bb205b6afb32f7a73b2b363e4be02cd8a91e9","0376ab1d54c5f9803ce4b2e201a0ee7eef7b57b636e8a93c9b8d4860c96f5fa7"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":true,"in_revocation_set":false,"parents":["ea4ee2faa57ae4b539b63977fe5bb205b6afb32f7a73b2b363e4be02cd8a91e9","b5fd6f800334f565036b0999f8310b5b0bd7268395d8b267005697af7301c5e8"],"paths":[{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","b5fd6f800334f565036b0999f8310b5b0bd7268395d8b267005697af7301c5e8","b102959f862b71b78efdc7fa9f43b3afd7e52312a07493a752835b991d840f4c","62dd0be9b9f50a163ea0f8e75c053b1eca57ea55c8688f647c6881f2c8357b95"]},{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","ea4ee2faa57ae4b539b63977fe5bb205b6afb32f7a73b2b363e4be02cd8a91e9","b102959f862b71b78efdc7fa9f43b3afd7e52312a07493a752835b991d840f4c","62dd0be9b9f50a163ea0f8e75c053b1eca57ea55c8688f647c6881f2c8357b95"]},{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","b5fd6f800334f565036b0999f8310b5b0bd7268395d8b267005697af7301c5e8","0376ab1d54c5f9803ce4b2e201a0ee7eef7b57b636e8a93c9b8d4860c96f5fa7"]},{"path":["006233518d9fe8c3a698ea226ad6f4f8e47763418009d03fe68b4279c30dfa81","ea4ee2faa57ae4b539b63977fe5bb205b6afb32f7a73b2b363e4be02cd8a91e9","0376ab1d54c5f9803ce4b2e201a0ee7eef7b57b636e8a93c9b8d4860c96f5fa7"]}],"trusted_path":false,"type":"leaf","valid":false,"was_valid":true,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"na","e_cab_dv_conflicts_with_org":"na","e_cab_dv_conflicts_with_postal":"na","e_cab_dv_conflicts_with_province":"na","e_cab_dv_conflicts_with_street":"na","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"pass","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"pass","e_cert_policy_ov_requires_province_or_locality":"pass","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"pass","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"na","e_ext_cert_policy_explicit_text_too_long":"na","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"pass","e_sub_cert_crl_distribution_points_marked_critical":"pass","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"pass","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"na","w_ext_cert_policy_explicit_text_not_nfc":"na","w_ext_cert_policy_explicit_text_not_utf8":"na","w_ext_crl_distribution_marked_critical":"pass","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 01:26:00 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 00:51:17 UTC","ct_to_censys_at":"2018-07-30 22:09:38 UTC","index":"15551216"}},"fingerprint_sha256":"e7c54e4a4300deec4b9d1ef8a9f216f067f555aa31d3f59139e64f8c33dea89e","metadata":{"added_at":"2018-03-19 01:26:00 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 00:40:32 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 09:21:06 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["lite.doctorme.in.th"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"e03a427e263102ed9f923da811c344ede1f45d52"},"fingerprint_md5":"c356c60e565796d7a56ff6c68e5a59fa","fingerprint_sha1":"c1d7de64c7f07eb02ab34676568e585c221a375a","fingerprint_sha256":"e7c54e4a4300deec4b9d1ef8a9f216f067f555aa31d3f59139e64f8c33dea89e","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["lite.doctorme.in.th"],"redacted":false,"serial_number":"21838698291690363863288975219021044140223936","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"CYvfEPQMObXKUwrZrWHbcZQIpRpAIggUpRw08IByxZEY9iGJCCNT1ppbWpR9WxnHVTFBFF1H3RlcrtBo2Rtkn794OjXLICXRMEc5pk6ea5hnPbg7d/rbKZ9adxrDkS5PB/iJNgvRwUW1E7kDuOafnshDGaXiYB5DpsKMZauJaezC2hDfdIVf7REzgLVbivfT+eJlrYXGyvHkeo4xIpPD5JBdh6eTDqfEGDR3iBJ9lqN7UirbAd92pMDDw4gvwH6RSLh0Pt7/ZgUdkx3Zj3sByCb4U/gjaLgsZd1MTFCl0pC3NU9BAZIL2kohR5HSBRXBD6jgdINEN1XgLnP2V15jWA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b65971d0b19885fb5143832d6b12d3ebee56f8b30d8a3ca4071c436763f59dcd","subject":{"common_name":["lite.doctorme.in.th"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=lite.doctorme.in.th","subject_key_info":{"fingerprint_sha256":"4dd79764cbd06d773cf7537a61076e63ae6ee4e03950abd019691de7dbffe672","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wU152U2I7g2aQl+7wF0R0A6NFbFVE2ikz7gDWM6dXLuYhP/GYrJLjvjfxUfDBfM40GwSGOq1TDs9FvSyQo1+UVKTNdmQe+5RLWd3G+J+ogmhc9BjdUJ/YcbvXe9Uk+kSBU7iaUac0G9zsaBiGVTam8KmpmdEE3NK8jDLAByAz37uvgWcC5+2/pZn9uplyF4s62zQjyOWqYstwj6JezYhZsx/+cIMUHJzV5OyWONuB/mxeH16CIt2aHOpTpmgJE/cOi5z1B73ch3/7neh1U059+mYk81MM9CaY/8ErOfevlQVV813cLEJaoCAI7aq0dZyXKDTRawtBaIoHiMKsZ4D+w=="}},"tbs_fingerprint":"c0a49d6089cf11fd78d3b9d142d5b0cb8b89ae769aacd7d81f94467ae29fd262","tbs_noct_fingerprint":"b1d4a52bcbaf5e08ba3e1d249385a6ed78ba2cdbab07cd9a2dada7218da7cef1","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-16 23:51:17 UTC","length":"7776000","start":"2018-03-18 23:51:17 UTC"},"version":"3"},"precert":true,"raw":"MIIE/zCCA+egAwIBAgITAPqyKoqj9sr5aOe5TGkc3ywtwDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTgyMzUxMTdaFw0xODA2MTYyMzUxMTdaMB4xHDAaBgNVBAMTE2xpdGUuZG9jdG9ybWUuaW4udGgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBTXnZTYjuDZpCX7vAXRHQDo0VsVUTaKTPuANYzp1cu5iE/8ZiskuO+N/FR8MF8zjQbBIY6rVMOz0W9LJCjX5RUpM12ZB77lEtZ3cb4n6iCaFz0GN1Qn9hxu9d71ST6RIFTuJpRpzQb3OxoGIZVNqbwqamZ0QTc0ryMMsAHIDPfu6+BZwLn7b+lmf26mXIXizrbNCPI5apiy3CPol7NiFmzH/5wgxQcnNXk7JY424H+bF4fXoIi3Zoc6lOmaAkT9w6LnPUHvdyHf/ud6HVTTn36ZiTzUwz0Jpj/wSs596+VBVXzXdwsQlqgIAjtqrR1nJcoNNFrC0FoigeIwqxngP7AgMBAAGjggIwMIICLDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOA6Qn4mMQLtn5I9qBHDRO3h9F1SMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAeBgNVHREEFzAVghNsaXRlLmRvY3Rvcm1lLmluLnRoMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAAmL3xD0DDm1ylMK2a1h23GUCKUaQCIIFKUcNPCAcsWRGPYhiQgjU9aaW1qUfVsZx1UxQRRdR90ZXK7QaNkbZJ+/eDo1yyAl0TBHOaZOnmuYZz24O3f62ymfWncaw5EuTwf4iTYL0cFFtRO5A7jmn57IQxml4mAeQ6bCjGWriWnswtoQ33SFX+0RM4C1W4r30/niZa2Fxsrx5HqOMSKTw+SQXYenkw6nxBg0d4gSfZaje1Iq2wHfdqTAw8OIL8B+kUi4dD7e/2YFHZMd2Y97Acgm+FP4I2i4LGXdTExQpdKQtzVPQQGSC9pKIUeR0gUVwQ+o4HSDRDdV4C5z9ldeY1g=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 20:09:29 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 19:41:16 UTC","ct_to_censys_at":"2018-07-30 22:11:30 UTC","index":"15587946"}},"fingerprint_sha256":"c2668c2d6b8310cd3907d5307f1d22dfd0b7190fa335fb52954f93f189eb06e2","metadata":{"added_at":"2018-03-19 20:09:29 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 17:10:56 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 22:18:14 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["test.bontrax.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"fbb36bd7079ca4b10ae85df7a6c938fac05eeb74"},"fingerprint_md5":"432a3d89054015718d06c091c29e707b","fingerprint_sha1":"beb930c18ae8abafc05df10d7aaa083706d6a102","fingerprint_sha256":"c2668c2d6b8310cd3907d5307f1d22dfd0b7190fa335fb52954f93f189eb06e2","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["test.bontrax.com"],"redacted":false,"serial_number":"21778482591683649497825034664984033267480278","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"VdtJZXnff/bNFQzIM5hCpwRjYGSwWw3eirt0ese5prtssKuzQGyWhw18oWj7z3iAntrmmpfU8L1mj49TTTlFxsZA116LzYoshHczt5dD5LjKDkfaLkruWBloa74ufH0PtMNtMVWaNQ3PMAMZuVi6txDHe5YSrxNCglKK2rXpY0MOb5wO7D4WFh0aSKYVzgM/tRV8jCNyufxpsfQohmESF//nka1RY86BZ0jhkxXvwEB2LkZor6NefItsCGgaBRG3BSGLNKkgV+msYxjEtKDZLy4kCVzCNwDCT3vyPzsk/u4aYIr1AGcMXuyO967jC0L/gqiN6RCUgDsMPC2F5ZldAA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"42b1d2f44e76acfcc8dbc8525d39021c408122368244a579c3eeb3d31a58c772","subject":{"common_name":["test.bontrax.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=test.bontrax.com","subject_key_info":{"fingerprint_sha256":"e48df7362012f33a9cae2208fdadbe818ad5f62a13b4f1e6b03c691b9649e07f","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wKDYTwKCUgEosjQOUtHo/bThvXAp+DhOHFY5cmVxVLrHSBARP7bTaGRi+Hp7HRIzOb4xjci7X25wyOC8wfzDfIWjpua1BcZGP9cEcin2WXlXoodB7Wtd0f63A6PjJv8X2a4AILT8qTpICEi39N/1XFLOZY6F/JTMudPgywyGZH8WSY7ZTvOGaxim9ouEHSAstNRKD9pnhsxdObV21/V8jT8f6EMa9fjt8ygGSM56oBw0JeCP2Y+DYB865WtYXCvgXvdJUmiT7bhitdVUEYnkkP2POavB5tLw91coDhP1bP8gIIIIjsICWa2OatndHbIQLMWeS3AdYsUUrG9WX/9taQ=="}},"tbs_fingerprint":"abb90aa7b297a0e4332e0ccbacc7abbe5777f138b19c9c9941f6195e5213e048","tbs_noct_fingerprint":"862ec7c1f7fb59c618774f07694e65ca1300f614a86167e154f3e19470a5953c","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 18:41:15 UTC","length":"7776000","start":"2018-03-19 18:41:15 UTC"},"version":"3"},"precert":true,"raw":"MIIE+TCCA+GgAwIBAgITAPoBNUip+caL6SFLprbnoh721jANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxODQxMTVaFw0xODA2MTcxODQxMTVaMBsxGTAXBgNVBAMTEHRlc3QuYm9udHJheC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAoNhPAoJSASiyNA5S0ej9tOG9cCn4OE4cVjlyZXFUusdIEBE/ttNoZGL4ensdEjM5vjGNyLtfbnDI4LzB/MN8haOm5rUFxkY/1wRyKfZZeVeih0Hta13R/rcDo+Mm/xfZrgAgtPypOkgISLf03/VcUs5ljoX8lMy50+DLDIZkfxZJjtlO84ZrGKb2i4QdICy01EoP2meGzF05tXbX9XyNPx/oQxr1+O3zKAZIznqgHDQl4I/Zj4NgHzrla1hcK+Be90lSaJPtuGK11VQRieSQ/Y85q8Hm0vD3VygOE/Vs/yAgggiOwgJZrY5q2d0dshAsxZ5LcB1ixRSsb1Zf/21pAgMBAAGjggItMIICKTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFPuza9cHnKSxCuhd96bJOPrAXut0MB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAbBgNVHREEFDASghB0ZXN0LmJvbnRyYXguY29tMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAFXbSWV533/2zRUMyDOYQqcEY2BksFsN3oq7dHrHuaa7bLCrs0BslocNfKFo+894gJ7a5pqX1PC9Zo+PU005RcbGQNdei82KLIR3M7eXQ+S4yg5H2i5K7lgZaGu+Lnx9D7TDbTFVmjUNzzADGblYurcQx3uWEq8TQoJSitq16WNDDm+cDuw+FhYdGkimFc4DP7UVfIwjcrn8abH0KIZhEhf/55GtUWPOgWdI4ZMV78BAdi5GaK+jXnyLbAhoGgURtwUhizSpIFfprGMYxLSg2S8uJAlcwjcAwk978j87JP7uGmCK9QBnDF7sjveu4wtC/4KojekQlIA7DDwtheWZXQA=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 08:27:05 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 07:55:11 UTC","ct_to_censys_at":"2018-07-30 22:10:27 UTC","index":"15566054"}},"fingerprint_sha256":"1d04ad6156b2cf91f5bd9c1a5d324dd37b31cabae14c8cae0421641af53700e7","metadata":{"added_at":"2018-03-19 08:27:05 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 04:54:44 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 06:14:36 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["remote.greuter.nl"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"72e19671b498d6613645ce006dfcb7cb0d4e020a"},"fingerprint_md5":"f1d589e5d6080b1f68b110047b6dd349","fingerprint_sha1":"03de7d8d0a49e6a65bbf9b83f8ad89e5337aa031","fingerprint_sha256":"1d04ad6156b2cf91f5bd9c1a5d324dd37b31cabae14c8cae0421641af53700e7","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["remote.greuter.nl"],"redacted":false,"serial_number":"21815430904698665825673266567300088736610010","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"qPVbEOveTf9QZcQX4zgqNhU1hgS8oKDYAqmoi2Bc/LfxyK+Sg5RhjASUh1NlWR3T5SeUUDl5YcLv2RRPcJhOp/Fw+IS8Y31UuXDVB54jTF+Mrp1CY4JiWpgYE2eidH7xT9XGZpPg26Ei22ZaM+9T4RlXpIkuSHf0DwZIfUET+bqy2DsTvaXyTwlwWWC6x8EtCCZw5iImIEX96lgyvSoAE5k0ti6LbKrsNiOwrixGhLb3aW8eapwbfoAB7PFteiwNCdl2sMYNiddLDX84I8Z75K/T4Ra/xaR4ZdWSst2Jq5Nkz7hTGTasCPkyZ+2gQHTiD5LRhDr8MBBqfP5npx/1pw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"f79ba0cb1716d011ad3898df66bbcddf52cfdfdefc91048f1d6d15aae7d062be","subject":{"common_name":["remote.greuter.nl"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=remote.greuter.nl","subject_key_info":{"fingerprint_sha256":"d3c4ff120ba4b39c4e39d5c3b82caff8fc5e7beca5c34333b6e68154b56a3a66","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"w6nY8pFCzeFcyVzP/nCzm0zZP/qgdccffiHqNHxkHLydHN3guX7j9lhfrV7tcQrSmJhYRAwrd0gRML/8cJGyRBq1OigRWuYplHKX5K3TpK8n9lHK9g5z4WhUeXJ8JWAY/NIBW1pfgIHizPxsMtac2xVhIJpThFV+tmWsYhVInNpUE61I8M6V9MWRYUw3oEPZ6PioOr6S+KTcgkEdVAC3aR7BbtwuKevHRTQSL88IXE/WygV6P02heki8w1tF96fDPDdO8EyZVf6KqxNgCxmYucsjg9k+nnSK5FBRgg4BrJZoLDksoX+g122FE4FpG2kDEZfjcNoAi1UjNjEj7HsyGw=="}},"tbs_fingerprint":"3244fc6d9a1ce03e79e33d9c39564f3960976faab5f392b3cec0c9a0f5549c7b","tbs_noct_fingerprint":"cd370677f2987eb83cb5adec51a88a13c691c323ab060b7a2944f44774ef1aaa","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 06:55:11 UTC","length":"7776000","start":"2018-03-19 06:55:11 UTC"},"version":"3"},"precert":true,"raw":"MIIE+zCCA+OgAwIBAgITAPptyhroMGquzqlvvBar/7l22jANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwNjU1MTFaFw0xODA2MTcwNjU1MTFaMBwxGjAYBgNVBAMTEXJlbW90ZS5ncmV1dGVyLm5sMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw6nY8pFCzeFcyVzP/nCzm0zZP/qgdccffiHqNHxkHLydHN3guX7j9lhfrV7tcQrSmJhYRAwrd0gRML/8cJGyRBq1OigRWuYplHKX5K3TpK8n9lHK9g5z4WhUeXJ8JWAY/NIBW1pfgIHizPxsMtac2xVhIJpThFV+tmWsYhVInNpUE61I8M6V9MWRYUw3oEPZ6PioOr6S+KTcgkEdVAC3aR7BbtwuKevHRTQSL88IXE/WygV6P02heki8w1tF96fDPDdO8EyZVf6KqxNgCxmYucsjg9k+nnSK5FBRgg4BrJZoLDksoX+g122FE4FpG2kDEZfjcNoAi1UjNjEj7HsyGwIDAQABo4ICLjCCAiowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRy4ZZxtJjWYTZFzgBt/LfLDU4CCjAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wHAYDVR0RBBUwE4IRcmVtb3RlLmdyZXV0ZXIubmwwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAqPVbEOveTf9QZcQX4zgqNhU1hgS8oKDYAqmoi2Bc/LfxyK+Sg5RhjASUh1NlWR3T5SeUUDl5YcLv2RRPcJhOp/Fw+IS8Y31UuXDVB54jTF+Mrp1CY4JiWpgYE2eidH7xT9XGZpPg26Ei22ZaM+9T4RlXpIkuSHf0DwZIfUET+bqy2DsTvaXyTwlwWWC6x8EtCCZw5iImIEX96lgyvSoAE5k0ti6LbKrsNiOwrixGhLb3aW8eapwbfoAB7PFteiwNCdl2sMYNiddLDX84I8Z75K/T4Ra/xaR4ZdWSst2Jq5Nkz7hTGTasCPkyZ+2gQHTiD5LRhDr8MBBqfP5npx/1pw==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 23:24:28 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 22:45:36 UTC","ct_to_censys_at":"2018-07-30 22:11:45 UTC","index":"15592875"}},"fingerprint_sha256":"85f6e379eaeb729879372bca1c4b184edeee98ee735d4dca1d8938767a918295","metadata":{"added_at":"2018-03-19 23:24:28 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 00:24:20 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 09:00:45 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["design57.horoshop.com.ua","www.design57.horoshop.com.ua"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"e6ed8d960195a3bec7a3550e5ff918647e85e203"},"fingerprint_md5":"7c09923655282d7dc9e0cc6113eaf847","fingerprint_sha1":"d7ddf207e4877852acbe3763b8c7bdc85c35d3d0","fingerprint_sha256":"85f6e379eaeb729879372bca1c4b184edeee98ee735d4dca1d8938767a918295","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["design57.horoshop.com.ua","www.design57.horoshop.com.ua"],"redacted":false,"serial_number":"21799718477223109153646425143786845279239236","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"q5RNhvl5ep/+/s5+1NlPihMqvRcOBn6RZ0IfYPhIFh40kOfwhx9LOzxkN14MxHkoToLQdndMi3eScSepki4dz8eDNhchlBxoTJsdds/mFF//4QkSunAemZK7sK/yLbiPqoTn3Sqw4ap4j0bx6G6kkLeN3v1eKOa69qQuAx2CdhQIQww5ylmIlOdJJQ1O8/HyC3+tgGtaBKamrXrFUVuu4zzaehDKGdFMY/OjhrBd3crJXObLnDpS9v19u5OuT9KoV7wj8BKY/u46W5iox55Ub0VFPZhgPzA1k+16IrtGkHgnTOzTaBEgAmNqeUjns9cNxEpvskBSSqBnlp+1k3hmtg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"0ceb09e1c8f88ee0f6a7e5758209a4eefbaf11f341af70acfbe84e3c2b06d47b","subject":{"common_name":["design57.horoshop.com.ua"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=design57.horoshop.com.ua","subject_key_info":{"fingerprint_sha256":"5b5f19fd80692ac362468ede67c0f739aa380b763005564d1d4cc1fef6cbef79","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"tUfn6gZoj9dz2n6RR/pvK+nSFdKAkURKIX7ddbtwmvuGZ6rhFHfD/FHD1PRFf3BNnWjFXB9rET3dEI43IldufpSRV2IBemRoPJRKfGgUCeLN3SU5eeNr0VdrIFPcyEEWA2jk9aC303FDB8P4lFPFelggfopZtbs+HUINwpNbwrbxmfXGJtvNJaAtsI+1W/TLZB/yVzwbEZkxCLh6O524VgIzqfMC3r9+KXTXQfPmYKdWHsGRnTa1K+Xmy6pv/ABuKCAFxpyhy2cYo9FrsbThfK62QI/yX0oh0cyy+OcuNQmCDEGauo/IwX2XbU0K18hQ3he3qxYd1YtTL+bxhtfHjQ=="}},"tbs_fingerprint":"a35490643122e261f7a0feeda6fc2e564f111e5aebaa44548953c047ab614bdb","tbs_noct_fingerprint":"ba238a5f697867d1ad12ef7d28431907adcdbc641c6d59db7ee773797e472ba4","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 21:45:36 UTC","length":"7776000","start":"2018-03-19 21:45:36 UTC"},"version":"3"},"precert":true,"raw":"MIIFJzCCBA+gAwIBAgITAPo/nWNzFwXIkOedvGf0KgI8RDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkyMTQ1MzZaFw0xODA2MTcyMTQ1MzZaMCMxITAfBgNVBAMTGGRlc2lnbjU3Lmhvcm9zaG9wLmNvbS51YTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALVH5+oGaI/Xc9p+kUf6byvp0hXSgJFESiF+3XW7cJr7hmeq4RR3w/xRw9T0RX9wTZ1oxVwfaxE93RCONyJXbn6UkVdiAXpkaDyUSnxoFAnizd0lOXnja9FXayBT3MhBFgNo5PWgt9NxQwfD+JRTxXpYIH6KWbW7Ph1CDcKTW8K28Zn1xibbzSWgLbCPtVv0y2Qf8lc8GxGZMQi4ejuduFYCM6nzAt6/fil010Hz5mCnVh7BkZ02tSvl5suqb/wAbiggBcacoctnGKPRa7G04XyutkCP8l9KIdHMsvjnLjUJggxBmrqPyMF9l21NCtfIUN4Xt6sWHdWLUy/m8YbXx40CAwEAAaOCAlMwggJPMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU5u2NlgGVo77Ho1UOX/kYZH6F4gMwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMEEGA1UdEQQ6MDiCGGRlc2lnbjU3Lmhvcm9zaG9wLmNvbS51YYIcd3d3LmRlc2lnbjU3Lmhvcm9zaG9wLmNvbS51YTCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQCrlE2G+Xl6n/7+zn7U2U+KEyq9Fw4GfpFnQh9g+EgWHjSQ5/CHH0s7PGQ3XgzEeShOgtB2d0yLd5JxJ6mSLh3Px4M2FyGUHGhMmx12z+YUX//hCRK6cB6Zkruwr/ItuI+qhOfdKrDhqniPRvHobqSQt43e/V4o5rr2pC4DHYJ2FAhDDDnKWYiU50klDU7z8fILf62Aa1oEpqatesVRW67jPNp6EMoZ0Uxj86OGsF3dyslc5sucOlL2/X27k65P0qhXvCPwEpj+7jpbmKjHnlRvRUU9mGA/MDWT7Xoiu0aQeCdM7NNoESACY2p5SOez1w3ESm+yQFJKoGeWn7WTeGa2","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 08:54:33 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 08:27:29 UTC","ct_to_censys_at":"2018-07-30 22:10:30 UTC","index":"15567214"}},"fingerprint_sha256":"661c572802083bdeb6508c1992e5817d6ac2d92261ad73f16e4619cd8253a97e","metadata":{"added_at":"2018-03-19 08:54:33 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 16:17:10 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 21:08:38 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["content.properm.ru"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"38549dcf61766899f272eae40d0c6aa64c7c7b47"},"fingerprint_md5":"e149af3953bf824ad189c1a57b4c73bc","fingerprint_sha1":"775f8f554402a82bbbdaad2b6d7ec3174a4994a6","fingerprint_sha256":"661c572802083bdeb6508c1992e5817d6ac2d92261ad73f16e4619cd8253a97e","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["content.properm.ru"],"redacted":false,"serial_number":"21806759200721649057765829828839825256423528","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"SBe4aeSHH//mXHYElbb5wj8bjQtg4NO7sn20BZIsT+P21Nukh75V/phvrmhdn94T2iIyDUNa+qIUnFzIDUAQdMtBMrPZef9f8HRhYTqS4k6BN2yI8RKIsun7kNhqixgF+wOP5a8p4jeFrckw5XH4Y3YtXkvYuXfKNPhQuZGSRF9V/B1zuOtuQ4QRAkX6vUm+sXZLft3vudfIIBTQtmcxK5YAYMjMT6yV0fCR981b6/VRCjrKur5Tg+U1MmdHH535QdOMQ1W/k713wObk5GTfe4KCQRbhOP4ir8hGpXrMfOvFydUDYsqSYF5Y7ucfOBsybXbdMbWz5sl9caBu78r+Iw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"dea3695670c7921776e02901711e635d8f21d01489b3ee3124c59d8c0dfadebe","subject":{"common_name":["content.properm.ru"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=content.properm.ru","subject_key_info":{"fingerprint_sha256":"40ecd40bcea05fd8f98ab481a078c14d9085d272b5928a6a0ea075b31a2fe0c0","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"7Ha70x8ntDveVYrKrZPIdzMRQQJRqxbAnzTEVB8y2TSREJK/2k18tk4j/ogSiGo1/43616wnZyx8mURknKCYrY6Z+WiM1MOyZM6ojpKbfcTVhQPteU+FaSPcTVpHb3VoqiCMkq6AR3bwC5nIQcV9rh9dYHNsaW836MOfLcF4VFxA5NLxpk4juFZjTZLvlLuOwlL1aErbqHAJTVinbGncNgP2FtAQRgxFPJhJkF2a+gZMRh21dQ/+q2I6DftDm0c01DeyMjunyqZqC+2RQIElNKTgsjYxcCNRVPJEP7Yii+ythopw9z5/iJq4KBydTanabPBj+J3+CzDMS5FMoCq7TQ=="}},"tbs_fingerprint":"922cfa43bdb5692a5d035fefa1d56ad73d9eeb7a3c802b914e8676f68776ee23","tbs_noct_fingerprint":"ab733f5581976647b0bb02df7c6539cc7a7708fa1946220984e5275dd7aa4117","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 07:27:29 UTC","length":"7776000","start":"2018-03-19 07:27:29 UTC"},"version":"3"},"precert":true,"raw":"MIIE/TCCA+WgAwIBAgITAPpUTj14nob2gfw2ARzMlA8gaDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwNzI3MjlaFw0xODA2MTcwNzI3MjlaMB0xGzAZBgNVBAMTEmNvbnRlbnQucHJvcGVybS5ydTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOx2u9MfJ7Q73lWKyq2TyHczEUECUasWwJ80xFQfMtk0kRCSv9pNfLZOI/6IEohqNf+N+tesJ2csfJlEZJygmK2OmflojNTDsmTOqI6Sm33E1YUD7XlPhWkj3E1aR291aKogjJKugEd28AuZyEHFfa4fXWBzbGlvN+jDny3BeFRcQOTS8aZOI7hWY02S75S7jsJS9WhK26hwCU1Yp2xp3DYD9hbQEEYMRTyYSZBdmvoGTEYdtXUP/qtiOg37Q5tHNNQ3sjI7p8qmagvtkUCBJTSk4LI2MXAjUVTyRD+2IovsrYaKcPc+f4iauCgcnU2p2mzwY/id/gswzEuRTKAqu00CAwEAAaOCAi8wggIrMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUOFSdz2F2aJnycurkDQxqpkx8e0cwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMB0GA1UdEQQWMBSCEmNvbnRlbnQucHJvcGVybS5ydTCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQBIF7hp5Icf/+ZcdgSVtvnCPxuNC2Dg07uyfbQFkixP4/bU26SHvlX+mG+uaF2f3hPaIjINQ1r6ohScXMgNQBB0y0Eys9l5/1/wdGFhOpLiToE3bIjxEoiy6fuQ2GqLGAX7A4/lryniN4WtyTDlcfhjdi1eS9i5d8o0+FC5kZJEX1X8HXO4625DhBECRfq9Sb6xdkt+3e+518ggFNC2ZzErlgBgyMxPrJXR8JH3zVvr9VEKOsq6vlOD5TUyZ0cfnflB04xDVb+TvXfA5uTkZN97goJBFuE4/iKvyEalesx868XJ1QNiypJgXlju5x84GzJtdt0xtbPmyX1xoG7vyv4j","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 01:40:28 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 01:04:13 UTC","ct_to_censys_at":"2018-07-30 22:09:38 UTC","index":"15551863"}},"fingerprint_sha256":"ff7329474525035cac6aa71bbd5c250773663310bfa4895cb563ba4fc925e482","metadata":{"added_at":"2018-03-19 01:40:28 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 06:57:18 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 17:18:11 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["demo80619.ssl-test1.org"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"01d597cbf01987ec2e43f0264d8695100d2b2862"},"fingerprint_md5":"727cf84f71447e027c88b91dbec6bc75","fingerprint_sha1":"bf302362bb806e2d31bee83740aa67def759b98d","fingerprint_sha256":"ff7329474525035cac6aa71bbd5c250773663310bfa4895cb563ba4fc925e482","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["demo80619.ssl-test1.org"],"redacted":false,"serial_number":"21783707078552572396089646365118157375939037","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"oVCdnpf6sSCDLBmazc5nObfQo6uRhvrP88L2sFyZ9saVI6Qcdtas16RBs68eoi+6kIKCrZ3kDxbPgbA7Awz4gDqtfyu7YHbZXMLcvBRVSWMTr37mfLY9aQQNe5VMvy1rOjByLFFoLolavssGrHe5TymJrqHkyY8szM/5gzP1Bxh4jX67HDcBX7ipIuFvoGOq2sjYlLae7NzxenqWr6yWhLo2WFeF40uxVJLFGiR/9ahXt1wJBonhZ9qXtAtS8nLtBLvxrr4Bw1651J5txF6uRQW588w2bHscd3gC86VvS1MZadg7s9X82WwaAdkdfricIJnZFy9J/i0Ne48oebLV2Q=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"065a510f371a4e866ff15b73055860de35de7b84acff483cab29707994b70cec","subject":{"common_name":["demo80619.ssl-test1.org"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=demo80619.ssl-test1.org","subject_key_info":{"fingerprint_sha256":"935b050f83ff53248c0e8b92ef217c8ea8b517c9825ac3a1dc55a9901fd56926","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wpI6yG6Wh+3wK6DtEpHmuWDYExUmiOUaBj0+0mqCB8H0BKvqQYIEPkphj/dp7DvMdUTxSilFpdJWhXE+/zw3//nCfdUpDcGVzBOlNtc17RxgziV2JTSS1L3NH3fKdYqVqTxqNPs8Qymt4mzbsPy+RRj7Sx+dY9tfQ272vP8v2U13zxScPoqWi8pClELIHJCU/4fns/GV+kT5LkZhX2G1vb3w6s85Il2Dvf0xYs0B51oA7QgoCBn7rOC5VRH7DAaAKYYxBuMXhI90ft9jy251mNUyzXTZ0hwhhzjg24fu0+0iK1dQIzwN3WeOj/29keuFE6HS8GF3G2nCDmbKeTEkTw=="}},"tbs_fingerprint":"3f2a2f889d9889b7c123ba38035c895d5df026f05496d9e4d457cd4869323e8d","tbs_noct_fingerprint":"1e5e9fc109c6b605541a1bdc801aaa63ec548f406ecbfaddc1499e9d3ea074b3","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 00:04:13 UTC","length":"7776000","start":"2018-03-19 00:04:13 UTC"},"version":"3"},"precert":true,"raw":"MIIFBzCCA++gAwIBAgITAPoQj8A8BYQ4gOZvtXCrz2gh3TANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwMDA0MTNaFw0xODA2MTcwMDA0MTNaMCIxIDAeBgNVBAMTF2RlbW84MDYxOS5zc2wtdGVzdDEub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwpI6yG6Wh+3wK6DtEpHmuWDYExUmiOUaBj0+0mqCB8H0BKvqQYIEPkphj/dp7DvMdUTxSilFpdJWhXE+/zw3//nCfdUpDcGVzBOlNtc17RxgziV2JTSS1L3NH3fKdYqVqTxqNPs8Qymt4mzbsPy+RRj7Sx+dY9tfQ272vP8v2U13zxScPoqWi8pClELIHJCU/4fns/GV+kT5LkZhX2G1vb3w6s85Il2Dvf0xYs0B51oA7QgoCBn7rOC5VRH7DAaAKYYxBuMXhI90ft9jy251mNUyzXTZ0hwhhzjg24fu0+0iK1dQIzwN3WeOj/29keuFE6HS8GF3G2nCDmbKeTEkTwIDAQABo4ICNDCCAjAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQB1ZfL8BmH7C5D8CZNhpUQDSsoYjAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wIgYDVR0RBBswGYIXZGVtbzgwNjE5LnNzbC10ZXN0MS5vcmcwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAoVCdnpf6sSCDLBmazc5nObfQo6uRhvrP88L2sFyZ9saVI6Qcdtas16RBs68eoi+6kIKCrZ3kDxbPgbA7Awz4gDqtfyu7YHbZXMLcvBRVSWMTr37mfLY9aQQNe5VMvy1rOjByLFFoLolavssGrHe5TymJrqHkyY8szM/5gzP1Bxh4jX67HDcBX7ipIuFvoGOq2sjYlLae7NzxenqWr6yWhLo2WFeF40uxVJLFGiR/9ahXt1wJBonhZ9qXtAtS8nLtBLvxrr4Bw1651J5txF6uRQW588w2bHscd3gC86VvS1MZadg7s9X82WwaAdkdfricIJnZFy9J/i0Ne48oebLV2Q==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 08:08:34 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 07:39:11 UTC","ct_to_censys_at":"2018-07-30 22:10:24 UTC","index":"15565537"}},"fingerprint_sha256":"73f8b89d6e26545cf63b7a614565f5e16bb5b04be7ae0facd1f47748a878ee5f","metadata":{"added_at":"2018-03-19 08:08:34 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 22:28:10 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 06:34:34 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["zoetest.rexcargo.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"e12996c8df8dc53e464ae1319c7ac725e9f75bae"},"fingerprint_md5":"beecf24c9190dc7d99c6ef169c9d5356","fingerprint_sha1":"037bb82fe79b550d114a4e42a4a4367a9000cbea","fingerprint_sha256":"73f8b89d6e26545cf63b7a614565f5e16bb5b04be7ae0facd1f47748a878ee5f","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["zoetest.rexcargo.com"],"redacted":false,"serial_number":"21842102369520311414529098520666072076299601","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"Q5/v/GKwnXzipSUvER7hsfFaOrwYlRW+clr5Xokx0vrlCsCcUj2ME/NhCGYxT+tU3ex1WQ+LQ2C9eLWrbnAy3xSIEBhBUAVO3Fu7RYopxFUeD630ZDM5NXklY8+MQXA2+VQKN2khyJHt0e9g8K8CDp/JucZpeKhl20mAVH28MYrGFauFowRFi8z8YSeK9fmTycgtxzUpb1zEz1suqIaUvAIFQBnLuTO+nhX3JiBPQ/qlVkpa8fYon2ranW27r3XWO8VfNsuakxphLQCe8mjLCOH6MdXpqz2/hEC3rTqf9Ljua5Ck9ChP3mvm+b2pBzfJc2UTr2TJXRFZifHGJtdrAg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b496fa65607df36607a7777d085218381edce13afcd92f7012107554b213a324","subject":{"common_name":["zoetest.rexcargo.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=zoetest.rexcargo.com","subject_key_info":{"fingerprint_sha256":"e663cecc7e8522d51215b44341220701c0a187aad48e18c1e5bfde1d764c1a15","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"3j1x1shlg5RfuYu8LPi3KvS0Rb0RxJkc+WsO5HxLwSDM5vv55lKiIMzUictbi4B5Q28BQQqVAXhgRI1COHG3M7SJRyu6P21Wo5Ts4JJ4PLeZ6bhsBZsaymeowgGw3XoTnmb2PydsVO4bK007x9a+qfOnvvnHTKyUgyhxVfKVfngJ/Jz1sSPnbFFDjRudZpWBA4x1QqL01xIQhWIghK5pisP2bq5SKrpYIYAfI77GLR4BBZXSUNDZ5f8poH8XQSU7jVz3j6+n4IHW7LWxSyizYr4spJCZbNDaGaVS5bVU5tyXKrfX1YIAMVWSMXmnNya+5ohg9o2287pv7o0VFjfsKQ=="}},"tbs_fingerprint":"75487feb2508ffb899070f9c0bb42865ed7313b86f0acce2861cb36c1e000919","tbs_noct_fingerprint":"2ca67771ba5d152c0988a568761ad53fb3cbd8fce52a7dc4c07eb9b65a40276b","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 06:39:11 UTC","length":"7776000","start":"2018-03-19 06:39:11 UTC"},"version":"3"},"precert":true,"raw":"MIIFATCCA+mgAwIBAgITAPq8K3wu3MvOBRYsQhKUA5ytUTANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwNjM5MTFaFw0xODA2MTcwNjM5MTFaMB8xHTAbBgNVBAMTFHpvZXRlc3QucmV4Y2FyZ28uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3j1x1shlg5RfuYu8LPi3KvS0Rb0RxJkc+WsO5HxLwSDM5vv55lKiIMzUictbi4B5Q28BQQqVAXhgRI1COHG3M7SJRyu6P21Wo5Ts4JJ4PLeZ6bhsBZsaymeowgGw3XoTnmb2PydsVO4bK007x9a+qfOnvvnHTKyUgyhxVfKVfngJ/Jz1sSPnbFFDjRudZpWBA4x1QqL01xIQhWIghK5pisP2bq5SKrpYIYAfI77GLR4BBZXSUNDZ5f8poH8XQSU7jVz3j6+n4IHW7LWxSyizYr4spJCZbNDaGaVS5bVU5tyXKrfX1YIAMVWSMXmnNya+5ohg9o2287pv7o0VFjfsKQIDAQABo4ICMTCCAi0wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBThKZbI343FPkZK4TGcescl6fdbrjAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wHwYDVR0RBBgwFoIUem9ldGVzdC5yZXhjYXJnby5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAQ5/v/GKwnXzipSUvER7hsfFaOrwYlRW+clr5Xokx0vrlCsCcUj2ME/NhCGYxT+tU3ex1WQ+LQ2C9eLWrbnAy3xSIEBhBUAVO3Fu7RYopxFUeD630ZDM5NXklY8+MQXA2+VQKN2khyJHt0e9g8K8CDp/JucZpeKhl20mAVH28MYrGFauFowRFi8z8YSeK9fmTycgtxzUpb1zEz1suqIaUvAIFQBnLuTO+nhX3JiBPQ/qlVkpa8fYon2ranW27r3XWO8VfNsuakxphLQCe8mjLCOH6MdXpqz2/hEC3rTqf9Ljua5Ck9ChP3mvm+b2pBzfJc2UTr2TJXRFZifHGJtdrAg==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 09:54:00 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 09:16:36 UTC","ct_to_censys_at":"2018-07-30 22:10:33 UTC","index":"15568849"}},"fingerprint_sha256":"ea8dd3ed0cb026254247973547d8d0d22839bf8ec70449b61305b4c66b5db2e3","metadata":{"added_at":"2018-03-19 09:54:00 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 08:30:49 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 19:14:53 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["teron.ru"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"6026c1a71b648948c774b93793f9c145f7e9283e"},"fingerprint_md5":"c8190c27aafdda8dee8d350df6e91fa9","fingerprint_sha1":"d9c3270e930ecc78361f85d0ed3946a23b9fe623","fingerprint_sha256":"ea8dd3ed0cb026254247973547d8d0d22839bf8ec70449b61305b4c66b5db2e3","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["teron.ru"],"redacted":false,"serial_number":"21811999502000123514526774225270026515760402","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"0JdmW/ftRy3BG9wd6wy7/rto8H7stMNUDOEuKup344E6kV01S1p3sjlmIxHcfh6JjZz21i4brnJ4untkPr9lysIjgBe7aP1zQUZ68MEBC0Kv8SgVxto+KzXUsezh2FXQoGkoHDIRxH+xBNfWPrdKfGFXYQRxWnDxc82f/+hn+D99njlWxnFE0Hx2mW31OdyTlNs8I6ciAf82ze0FECxWREL/O3ng3B2OK2C4zCo9BHN4DwCmdL8k/T1yKg0QEPkJIqZemGz4hEewfzlO0lGf22UMRoJDUf2eDTLVYl+Itfurudnl9k7rWEp/NQgaYU7ulxbiqQpE/bcjeaB/6ww6mA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"dd8ee17dec553e08e93ea21597c3e0e7db168493147464ab74e3c5d16a7b5584","subject":{"common_name":["teron.ru"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=teron.ru","subject_key_info":{"fingerprint_sha256":"0e79b140255400ee23e9f1d0d9050505b552f8289bebaaf8763bcadeeff87f1f","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"8qTJxhNwBHpXVOfmzJCT0wTSyw3rwjdxUjPnR8BUThAsxxm2EKpgrK1dLeaWDbM41lxigm7c3rn/bpaYUwPlcsiRHCbIzFQgVt1bQo3wjqUzYtS6Z2jEUShtTgs9WxNClc9FojNY4x+ZB1t4qPYzG8McQmsmNPXLJfZ9C4683x+szY/WnAp0MuiWmuTCie8z4KsTb6pD10GqYT/OrF084ojHV0Tl+VnFJhKdk4T2I6nUkcWs/5z7wOUopKR3KomAw2omosyaHu7BIZ51f41MevajksO9I/vxXp2ehdrRuPeH9M8xuIy6DMABXfk0BsLurZo5+ud90tllcb+rb55HSw=="}},"tbs_fingerprint":"14a82ce504b3d8b344bd9b251c185c9ec728f6121dbbe603331624cd4bb7dd3b","tbs_noct_fingerprint":"2a37102557d100160621a5342c3a384025a44ccecb9726dbb67f8c53046b96a0","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 08:16:36 UTC","length":"7776000","start":"2018-03-19 08:16:36 UTC"},"version":"3"},"precert":true,"raw":"MIIE6TCCA9GgAwIBAgITAPpjtJrJQTfZtZS5e8yNhBvFEjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwODE2MzZaFw0xODA2MTcwODE2MzZaMBMxETAPBgNVBAMTCHRlcm9uLnJ1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8qTJxhNwBHpXVOfmzJCT0wTSyw3rwjdxUjPnR8BUThAsxxm2EKpgrK1dLeaWDbM41lxigm7c3rn/bpaYUwPlcsiRHCbIzFQgVt1bQo3wjqUzYtS6Z2jEUShtTgs9WxNClc9FojNY4x+ZB1t4qPYzG8McQmsmNPXLJfZ9C4683x+szY/WnAp0MuiWmuTCie8z4KsTb6pD10GqYT/OrF084ojHV0Tl+VnFJhKdk4T2I6nUkcWs/5z7wOUopKR3KomAw2omosyaHu7BIZ51f41MevajksO9I/vxXp2ehdrRuPeH9M8xuIy6DMABXfk0BsLurZo5+ud90tllcb+rb55HSwIDAQABo4ICJTCCAiEwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRgJsGnG2SJSMd0uTeT+cFF9+koPjAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wEwYDVR0RBAwwCoIIdGVyb24ucnUwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEA0JdmW/ftRy3BG9wd6wy7/rto8H7stMNUDOEuKup344E6kV01S1p3sjlmIxHcfh6JjZz21i4brnJ4untkPr9lysIjgBe7aP1zQUZ68MEBC0Kv8SgVxto+KzXUsezh2FXQoGkoHDIRxH+xBNfWPrdKfGFXYQRxWnDxc82f/+hn+D99njlWxnFE0Hx2mW31OdyTlNs8I6ciAf82ze0FECxWREL/O3ng3B2OK2C4zCo9BHN4DwCmdL8k/T1yKg0QEPkJIqZemGz4hEewfzlO0lGf22UMRoJDUf2eDTLVYl+Itfurudnl9k7rWEp/NQgaYU7ulxbiqQpE/bcjeaB/6ww6mA==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 12:38:35 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 12:08:24 UTC","ct_to_censys_at":"2018-07-30 22:10:53 UTC","index":"15575227"}},"fingerprint_sha256":"789fffc21d9a664760f41dcf69330e6bfc4f4a58112b088819b9a1c86af7ae45","metadata":{"added_at":"2018-03-19 12:38:35 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 11:25:11 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 22:43:27 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["infoaid.org","www.infoaid.org"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"9c37cb6106dfa959600639abc49da172e3ef2ed7"},"fingerprint_md5":"74841b99e688d123ac9d09f78087f47b","fingerprint_sha1":"d7474ce3222e56744077ed9813ef6ea3b315d061","fingerprint_sha256":"789fffc21d9a664760f41dcf69330e6bfc4f4a58112b088819b9a1c86af7ae45","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["www.infoaid.org","infoaid.org"],"redacted":false,"serial_number":"21805302705682222657116366420251471531308825","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"aMcEP3de/vB4Lme/EsbkxcjHgqM1OYQjeTB0bTBlXkfzlXszAc7fSE1TnurnuihR6fZMCBwTu75gG4mKoGqkZdbhLUl27wjtyh4MfgJHWVTJwtNT9udYKkdnCgsw/RwFia4jhl1qPBrxXH+3zp9Mq7TO0MTBMvsfT7V8TddnDuk04VpHufE6f4dscw7J2i5JbtV6GbJHYj/SvWGCWpP+GmJvk1ub671u9mxPa4TrR/QQP53ovZ0rAXD5DL6hvSIfzIsUAUYE/Yy2/S1LO/XK07w9TlW71WFesjQZ08jAVBCRLLK1lOHtZ5cA/EBPmaU5Yuyq0zYzM9cw36zj4VV/Mw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"7f6bb88993f76fb02b32d52ecd0a531fb3159b7b1c5cc71c97d543720b743402","subject":{"common_name":["www.infoaid.org"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=www.infoaid.org","subject_key_info":{"fingerprint_sha256":"323e02b41aa18c8428e6d35f0ce3943969d0db5d77cb80eb59d63d2543a1bea0","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wKi9fWC4PlXxpEML30gzV1IMmdkmXtpg9veLYfO7SDcNSWhtlP96LRvtMGn0Hyhq092qEbbYfqvvqiA1B35oDFbww7TuVXAGLwmqX8kHTEdKa6toGSw7hwjtxoL6irDyBQMA4ty3lz+l9ESiqKu7Npe1Dx4TIgwTZa0M1NxpZluFlI/ZV+p873KGm28RVEfcCbs1bRj7G27aUIDl4f8HWu2bSpedPkqFaBULEfhrwFkIHO7kOa/Iou+mLJjMSvb50ziPu2j3sByomnThXBi2xc9LwGx8pJQ41Hd9JHDEYkJX7uSExK4z3H5062lyUghnFZCVrDK60Nrk6OrNIYSAPw=="}},"tbs_fingerprint":"f10760abd72f501a6ec1fac6eaeea54ee7323693aac1f58d7e20e5faabe2403f","tbs_noct_fingerprint":"4e0c53ae45b4ff9dbb5d69bcfbabcb857458a4873ee9a652ac5fe7291cdb0c0b","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 11:08:23 UTC","length":"7776000","start":"2018-03-19 11:08:23 UTC"},"version":"3"},"precert":true,"raw":"MIIFBDCCA+ygAwIBAgITAPpQBn666n9+OXYew/+ir213GTANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxMTA4MjNaFw0xODA2MTcxMTA4MjNaMBoxGDAWBgNVBAMTD3d3dy5pbmZvYWlkLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMCovX1guD5V8aRDC99IM1dSDJnZJl7aYPb3i2Hzu0g3DUlobZT/ei0b7TBp9B8oatPdqhG22H6r76ogNQd+aAxW8MO07lVwBi8Jql/JB0xHSmuraBksO4cI7caC+oqw8gUDAOLct5c/pfREoqiruzaXtQ8eEyIME2WtDNTcaWZbhZSP2VfqfO9yhptvEVRH3Am7NW0Y+xtu2lCA5eH/B1rtm0qXnT5KhWgVCxH4a8BZCBzu5DmvyKLvpiyYzEr2+dM4j7to97AcqJp04VwYtsXPS8BsfKSUONR3fSRwxGJCV+7khMSuM9x+dOtpclIIZxWQlawyutDa5OjqzSGEgD8CAwEAAaOCAjkwggI1MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUnDfLYQbfqVlgBjmrxJ2hcuPvLtcwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMCcGA1UdEQQgMB6CC2luZm9haWQub3Jngg93d3cuaW5mb2FpZC5vcmcwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAaMcEP3de/vB4Lme/EsbkxcjHgqM1OYQjeTB0bTBlXkfzlXszAc7fSE1TnurnuihR6fZMCBwTu75gG4mKoGqkZdbhLUl27wjtyh4MfgJHWVTJwtNT9udYKkdnCgsw/RwFia4jhl1qPBrxXH+3zp9Mq7TO0MTBMvsfT7V8TddnDuk04VpHufE6f4dscw7J2i5JbtV6GbJHYj/SvWGCWpP+GmJvk1ub671u9mxPa4TrR/QQP53ovZ0rAXD5DL6hvSIfzIsUAUYE/Yy2/S1LO/XK07w9TlW71WFesjQZ08jAVBCRLLK1lOHtZ5cA/EBPmaU5Yuyq0zYzM9cw36zj4VV/Mw==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 10:08:21 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 09:32:06 UTC","ct_to_censys_at":"2018-07-30 22:10:36 UTC","index":"15569430"}},"fingerprint_sha256":"46ce166c554be835a31a9a17e4cdbba10710966023bb2da0891961f6dd3826f8","metadata":{"added_at":"2018-03-19 10:08:21 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 15:18:53 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 19:56:02 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["slack-bot.svt.li"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"e3d4af802081300cb7766c3b1278622859613357"},"fingerprint_md5":"5aade3ecd348ddf837404675e887e60d","fingerprint_sha1":"3701a72fb107ad1017f695679558e06b6839e5c3","fingerprint_sha256":"46ce166c554be835a31a9a17e4cdbba10710966023bb2da0891961f6dd3826f8","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["slack-bot.svt.li"],"redacted":false,"serial_number":"21806915994537784326599373476783411832398866","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"HHbPKK1TuzpPx3Yg98NYrd3OiBx5dpUdeFdKnq0SE45OUvv8+1IlxvaZzIoZUb8PtLMOcA0OsX/RBtQHlGqfCBkDrXad/wImV3VeOy+XJAid8H65JY86fzAjjD69whoOWOKp8JredNHsVj/yWHgVk+mb0/AyHGlI7RpaIgJmQUUK9oWtpnM8i1AjMnvnabtxjZfjGx1uv8O0Aezqu/uCG9xvniB7rsl+Im15UDjKXiAYXrIOb1quwBjdtFeYbvMuixO0+w0HzBSpinA/CmcOQDTIgaoCJu9qLxC06UeBngM8OmdORheipaBSJDZef/IK6r4ar6ZdlJxtrg8v8kh74A=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"bdaadaa0f50125f72bfa40994efafb846b310f61666e0759b7b1bfe50809c06d","subject":{"common_name":["slack-bot.svt.li"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=slack-bot.svt.li","subject_key_info":{"fingerprint_sha256":"dd1c287ddc6a808708f96904e07b0886b88b49a8066eb47e22dd796e4dba8ff8","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"xj9IzkGbX9XHNJZqeDogf6ArBBCedRpqEAyHbRjBLf8Ba+eWidfPGdlUkEab4K1e5/KDqZYahlGOoiWQP/e5NyzixjZ9qOMn2SEyldgluirp7y1LKm5HlPBh8GGcYzgpU6puxj5Kb7Kwn+Ao8dyNkg4yvUCNBbfRSNtNo8Ip5+pntQoqX5jA62Sc2CgAF5b9r4svmbwpl5pKJVSa/ss1zu7YuB+0Nfgx1z+oxe6MQ1ahogWCqqJtQkrAjGdTJiaA+KF3JcygAa/9JN4cTPGdSf7czNcFHG9fVU0X+yCqKcj7VACbWw5kfr+1v5/eXWDc4vvCWADn4F5OaXMOmwmxyw=="}},"tbs_fingerprint":"7ffb478154cccc5aafffc77c8ef6d834abce620fb65e41aec327bd9e72110803","tbs_noct_fingerprint":"3d53bc5d7477405e803f2f316e5c5799f1e69bd61aa5bd170209f93c4d1b263a","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 08:32:06 UTC","length":"7776000","start":"2018-03-19 08:32:06 UTC"},"version":"3"},"precert":true,"raw":"MIIE+TCCA+GgAwIBAgITAPpUxDLcmjMY+dC9EX1BPCWkEjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwODMyMDZaFw0xODA2MTcwODMyMDZaMBsxGTAXBgNVBAMTEHNsYWNrLWJvdC5zdnQubGkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGP0jOQZtf1cc0lmp4OiB/oCsEEJ51GmoQDIdtGMEt/wFr55aJ188Z2VSQRpvgrV7n8oOplhqGUY6iJZA/97k3LOLGNn2o4yfZITKV2CW6KunvLUsqbkeU8GHwYZxjOClTqm7GPkpvsrCf4Cjx3I2SDjK9QI0Ft9FI202jwinn6me1CipfmMDrZJzYKAAXlv2viy+ZvCmXmkolVJr+yzXO7ti4H7Q1+DHXP6jF7oxDVqGiBYKqom1CSsCMZ1MmJoD4oXclzKABr/0k3hxM8Z1J/tzM1wUcb19VTRf7IKopyPtUAJtbDmR+v7W/n95dYNzi+8JYAOfgXk5pcw6bCbHLAgMBAAGjggItMIICKTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOPUr4AggTAMt3ZsOxJ4YihZYTNXMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAbBgNVHREEFDASghBzbGFjay1ib3Quc3Z0LmxpMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBABx2zyitU7s6T8d2IPfDWK3dzogceXaVHXhXSp6tEhOOTlL7/PtSJcb2mcyKGVG/D7SzDnANDrF/0QbUB5RqnwgZA612nf8CJld1XjsvlyQInfB+uSWPOn8wI4w+vcIaDljiqfCa3nTR7FY/8lh4FZPpm9PwMhxpSO0aWiICZkFFCvaFraZzPItQIzJ752m7cY2X4xsdbr/DtAHs6rv7ghvcb54ge67JfiJteVA4yl4gGF6yDm9arsAY3bRXmG7zLosTtPsNB8wUqYpwPwpnDkA0yIGqAibvai8QtOlHgZ4DPDpnTkYXoqWgUiQ2Xn/yCuq+Gq+mXZScba4PL/JIe+A=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 16:23:36 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 15:50:12 UTC","ct_to_censys_at":"2018-07-30 22:11:15 UTC","index":"15582268"}},"fingerprint_sha256":"b1a3e7dad8bc98c938cee24817a26c137368eda0626480f0d86c927fdcd181aa","metadata":{"added_at":"2018-03-19 16:23:36 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 09:00:46 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 12:01:38 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["remote.greuter.nl"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"4bf3030a5371353bfdb1f2593764e45e22980320"},"fingerprint_md5":"b4bfb2deb221424b50a08bbb4d2a1360","fingerprint_sha1":"fe706d3ff8014a16577fa736a9e6bf6cdef4df98","fingerprint_sha256":"b1a3e7dad8bc98c938cee24817a26c137368eda0626480f0d86c927fdcd181aa","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["remote.greuter.nl"],"redacted":false,"serial_number":"21830068596286236474540122855547492017680176","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"eQv24ZVMVBo9//AckpLiXsYzbMg9cSrzRrn9Dakhm64wK/xNOqZgk0V6cFYzYRgUB10rzGIK4zowHYYEsKU1KXQARPnbQhaoG/CLPmSkPCIDOglRuwMtSdrPuYd1wlskzw7aad4K/Xx8wML21OnFf6AtXV3a9OFsSK4Apw5qB/EhmjjMFw6v2DwkD8WfmKCaj68XflEb0VhqPom6Ut7vbuliJTRv5RyeBWdrYFwOUeNtFsZptDXTepJQ4q8Bd0SmT82cXzG2Zlynmx2KUaVLOdAAqgv6S4lWW7oKagU8XVo9Zl6gzFUUdwIKo5gMiYeGHbKT5KYGkvJeuKe8KRHe7Q=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"9188ddd9e1518cf57e57ae9d520fd92ec1d1aaa5a6c890370f05a82594076e04","subject":{"common_name":["remote.greuter.nl"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=remote.greuter.nl","subject_key_info":{"fingerprint_sha256":"1f3fa3e171e9b3241e6d8f8799d663b1775dc0f007f08c0337984a6a68b3b00f","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"2N0U75urjc2CdlQriilfTpHh4rE5bx5cjPTftXoOjrm2rqh6W3amjlZFfQ8NFHlQtmm1khPfWD+kE5lD5kIzOc2UcREpTo2BNVoF39OhpvjmDXX6dRpVi4RD4x376RX8yG5Rs+Ck8khWNZotdX4OCmoF61fkPVuB6Q/gYtl6azwnPFxT9R8HHRA1yMdGjpJ/JSN+zRtUxZL4Y7YNV8/uMMM8F/MXXiKl0HpdHODCBxsh8oRMZ2n3Obim4YpaW1V95OOMsLOzMX5w13jFA4FQK1KSmQEY0MiARQjuKFof6JXRDNytnYAXBqrs8yHyQqngBv7lEjHgVDHfoc71QmBOYQ=="}},"tbs_fingerprint":"aee6cbeae334a278c95f2cfaae4460cd81e4e831c6e4a3d4d0d4d65de86e9944","tbs_noct_fingerprint":"2c3b64248d37a007f3b07317d1e9a5fe7b76c8b5b225da8f8132b09a94cd800f","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 14:50:11 UTC","length":"7776000","start":"2018-03-19 14:50:11 UTC"},"version":"3"},"precert":true,"raw":"MIIE+zCCA+OgAwIBAgITAPqYzkfC8knMRjwjzPFGF1ivMDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxNDUwMTFaFw0xODA2MTcxNDUwMTFaMBwxGjAYBgNVBAMTEXJlbW90ZS5ncmV1dGVyLm5sMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2N0U75urjc2CdlQriilfTpHh4rE5bx5cjPTftXoOjrm2rqh6W3amjlZFfQ8NFHlQtmm1khPfWD+kE5lD5kIzOc2UcREpTo2BNVoF39OhpvjmDXX6dRpVi4RD4x376RX8yG5Rs+Ck8khWNZotdX4OCmoF61fkPVuB6Q/gYtl6azwnPFxT9R8HHRA1yMdGjpJ/JSN+zRtUxZL4Y7YNV8/uMMM8F/MXXiKl0HpdHODCBxsh8oRMZ2n3Obim4YpaW1V95OOMsLOzMX5w13jFA4FQK1KSmQEY0MiARQjuKFof6JXRDNytnYAXBqrs8yHyQqngBv7lEjHgVDHfoc71QmBOYQIDAQABo4ICLjCCAiowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRL8wMKU3E1O/2x8lk3ZOReIpgDIDAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wHAYDVR0RBBUwE4IRcmVtb3RlLmdyZXV0ZXIubmwwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAeQv24ZVMVBo9//AckpLiXsYzbMg9cSrzRrn9Dakhm64wK/xNOqZgk0V6cFYzYRgUB10rzGIK4zowHYYEsKU1KXQARPnbQhaoG/CLPmSkPCIDOglRuwMtSdrPuYd1wlskzw7aad4K/Xx8wML21OnFf6AtXV3a9OFsSK4Apw5qB/EhmjjMFw6v2DwkD8WfmKCaj68XflEb0VhqPom6Ut7vbuliJTRv5RyeBWdrYFwOUeNtFsZptDXTepJQ4q8Bd0SmT82cXzG2Zlynmx2KUaVLOdAAqgv6S4lWW7oKagU8XVo9Zl6gzFUUdwIKo5gMiYeGHbKT5KYGkvJeuKe8KRHe7Q==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 04:40:36 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 04:00:09 UTC","ct_to_censys_at":"2018-07-30 22:10:02 UTC","index":"15558525"}},"fingerprint_sha256":"3f2c9d8e4abda4f68c69b4c9d8107d6f09853acbba78c513993aef2e5005ad74","metadata":{"added_at":"2018-03-19 04:40:36 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 16:03:35 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-30 06:48:11 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["cloud.devclan.de"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"f5d8915d37384c2afde63efc510e03eb726466b6"},"fingerprint_md5":"c13a0953ac0db2c3c4aebce60382daa0","fingerprint_sha1":"7104cd1cd5d00b7e1176b6611492b3405d27c482","fingerprint_sha256":"3f2c9d8e4abda4f68c69b4c9d8107d6f09853acbba78c513993aef2e5005ad74","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["cloud.devclan.de"],"redacted":false,"serial_number":"21780834489050782017087420178548486806681440","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"XJD6k6Xd96Mx3iWx1JkxTc+gJiWqF1vQ1TlmwDlCYOpckCi+bpW33zYt2+/nlZQk50hITgPnUxVKJh3Y4LPjtQ44A8UnyfstDBtdGgjEAomRNojt8Asw0ImY0mrg6fr8Xq9yMTkseEMgLnlTvvL1vZ0WJ5LrW7pXqgcXUAtUC9nFvTF8Dz6OvxcL1uB/D0SMnp7Yd7YTuE0mpfVNMpZ/3ZX1UQRXsh3jvSdJr6Q0zutm5nozJVK0EuoohnGUAztzg8Hb1jy+siCtizuBfwcxdmdfICZmAEqJqEQih7/ij/yXEHc2eEc7qK+ZL0YkYjtMVGFPxPjImfiSImQvvB+t8w=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"80c28c599cdd9b5a69eebe456457ad1fef397641aa71861b0825df62ddb68b7f","subject":{"common_name":["cloud.devclan.de"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=cloud.devclan.de","subject_key_info":{"fingerprint_sha256":"204dbe0f0dacfa893fd9c0f7d07e88f76235dd74aa0cc25f271283d09773dc9a","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sqO0BmP8rKzehAnWUdnmU6EBY5maybIfSmsX9SLEQOz83iH2e7R1Bnmfbi33+/FIxfgCO43Epy0KjeaBiF3Kx2FM6tfbCNkNI1L+L9KgOYQgGmKyO4yWLuoBIQ+qJ2s2eVP6TrRBf9YC7VHQlH3eEsbSKWCJaXpjCP1bcDmOf4ivv71xF5N0aeCclRbripRYxHBvU4ivBBjWvkfQSxET3epfIBh8e6viyDgxa/QtIm/NdcsfMnuEb3Fi2LN+jNwpWwHQxTeiCotpV9RtdPCJBmw055Mu+YIkApMxM+u9SPPLTnSPXPakSyvlzWUW+a//OHBLd6VLkM2CWLKBeig95w=="}},"tbs_fingerprint":"39312e4b1cce30636cc54e37643b0e131c1c18664e49c952fbfde42f48dc7c45","tbs_noct_fingerprint":"08b6f3bdc6e4254495c376dfcb4e21a74625f10c47f121ff83610e26f5a77cb3","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 03:00:09 UTC","length":"7776000","start":"2018-03-19 03:00:09 UTC"},"version":"3"},"precert":true,"raw":"MIIE+TCCA+GgAwIBAgITAPoIHqee2iUONjJ4gEmzRLu3YDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwMzAwMDlaFw0xODA2MTcwMzAwMDlaMBsxGTAXBgNVBAMTEGNsb3VkLmRldmNsYW4uZGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCyo7QGY/ysrN6ECdZR2eZToQFjmZrJsh9Kaxf1IsRA7PzeIfZ7tHUGeZ9uLff78UjF+AI7jcSnLQqN5oGIXcrHYUzq19sI2Q0jUv4v0qA5hCAaYrI7jJYu6gEhD6onazZ5U/pOtEF/1gLtUdCUfd4SxtIpYIlpemMI/VtwOY5/iK+/vXEXk3Rp4JyVFuuKlFjEcG9TiK8EGNa+R9BLERPd6l8gGHx7q+LIODFr9C0ib811yx8ye4RvcWLYs36M3ClbAdDFN6IKi2lX1G108IkGbDTnky75giQCkzEz671I88tOdI9c9qRLK+XNZRb5r/84cEt3pUuQzYJYsoF6KD3nAgMBAAGjggItMIICKTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFPXYkV03OEwq/eY+/FEOA+tyZGa2MB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAbBgNVHREEFDASghBjbG91ZC5kZXZjbGFuLmRlMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAFyQ+pOl3fejMd4lsdSZMU3PoCYlqhdb0NU5ZsA5QmDqXJAovm6Vt982Ldvv55WUJOdISE4D51MVSiYd2OCz47UOOAPFJ8n7LQwbXRoIxAKJkTaI7fALMNCJmNJq4On6/F6vcjE5LHhDIC55U77y9b2dFieS61u6V6oHF1ALVAvZxb0xfA8+jr8XC9bgfw9EjJ6e2He2E7hNJqX1TTKWf92V9VEEV7Id470nSa+kNM7rZuZ6MyVStBLqKIZxlAM7c4PB29Y8vrIgrYs7gX8HMXZnXyAmZgBKiahEIoe/4o/8lxB3NnhHO6ivmS9GJGI7TFRhT8T4yJn4kiJkL7wfrfM=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 19:23:50 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 18:50:20 UTC","ct_to_censys_at":"2018-07-30 22:11:27 UTC","index":"15586843"}},"fingerprint_sha256":"cbf4c3a18cbe8ef8c9d19c8bedd2956561624515e6f788e3c2c7167ab8949ddb","metadata":{"added_at":"2018-03-19 19:23:50 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 11:15:43 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 14:55:30 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["internet.properm.ru"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"e42aa381f973b7dd2707976cde6ad4ab0dc67989"},"fingerprint_md5":"2418d34f2b66a6b4222dd11c21f3f3b3","fingerprint_sha1":"ce92aac2b0894846664bc97bf37da5019c2085aa","fingerprint_sha256":"cbf4c3a18cbe8ef8c9d19c8bedd2956561624515e6f788e3c2c7167ab8949ddb","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["internet.properm.ru"],"redacted":false,"serial_number":"21798854711984124207726779346248236465051754","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"SovGgwzjZXS07HCmd0D3hAwk/AQkmdATQwMZt+tL+HABQSyrG2GZY+ViB/u8OvUmfeKrz1JzQKfpWndz9ABHS1J92s/owaj03Blbsa4Gn1NefgbkNsUVjRfKJkrV4Ngfx9EwoNJrAX3AsBqD3hmEuZEeNyn2DOOX6zh5IDv4h5MX1SdDiookaj6oUIEZabFh0dCCvqpjHJ1oEEx6zwQ+yg+UpPxOOleiTm426Wmx5eSFk5EJC2kUJY8oT7DNqUMr5mWC6zuElKujQXDzF1vAJlmggQwNM3lR97+3DoQzlSMkhBp9PnCR+D9I9yqfI2Uf0BD+le4xYvxXYkWzDEhDaw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"8577018179ba33dde3a3713ac67c127a3ad00af485a371abbc0bd4a9e5751e60","subject":{"common_name":["internet.properm.ru"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=internet.properm.ru","subject_key_info":{"fingerprint_sha256":"fc75d8f446f87945ebc8141cca819586d5e7dfaec0280ad95ffa808b9cbef2ae","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vevG3p8Py0n/aAh7A0F2DDYPQmjvweHjXxHXFaOrTKbHetLjP7wFF0myseg1sMvSup92PM1iidCmXroHiKcUZSsC1TDS8UmXmaJE40jKxsngToeyRtw4T3+zeLFc/+3GDb5C+d6mPTVzuz1KtibuWcP/DC/ZORAZhrTRdmxoazFSJhWDnAaOKmw3cGVsWWyaDIuJbDdUpc5/AbJ87rL01ILZmdlTVRd6YTy7z44XaXl+YAUrem7llFSUPVzqisIz9/GPeFnZTauUMOHFMqW4GP92KFdbzDa8A4a/1CT0vXL5Q8OwXedW6JP+5jHrTCAGUTvZ6CJKbpxc3ltMP0HVKw=="}},"tbs_fingerprint":"59edeed7b4dec3c8eb768c79dd972b1755e8a4e221317608dfc937cf58bf5293","tbs_noct_fingerprint":"f2e992c7bd2afc12badcc021fddbedc67b5da228b47cec722f26fc7e4108102a","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 17:50:20 UTC","length":"7776000","start":"2018-03-19 17:50:20 UTC"},"version":"3"},"precert":true,"raw":"MIIE/zCCA+egAwIBAgITAPo9E5BQ0dY8qOEOQP/1CKbYajANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxNzUwMjBaFw0xODA2MTcxNzUwMjBaMB4xHDAaBgNVBAMTE2ludGVybmV0LnByb3Blcm0ucnUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC968benw/LSf9oCHsDQXYMNg9CaO/B4eNfEdcVo6tMpsd60uM/vAUXSbKx6DWwy9K6n3Y8zWKJ0KZeugeIpxRlKwLVMNLxSZeZokTjSMrGyeBOh7JG3DhPf7N4sVz/7cYNvkL53qY9NXO7PUq2Ju5Zw/8ML9k5EBmGtNF2bGhrMVImFYOcBo4qbDdwZWxZbJoMi4lsN1Slzn8BsnzusvTUgtmZ2VNVF3phPLvPjhdpeX5gBSt6buWUVJQ9XOqKwjP38Y94WdlNq5Qw4cUypbgY/3YoV1vMNrwDhr/UJPS9cvlDw7Bd51bok/7mMetMIAZRO9noIkpunFzeW0w/QdUrAgMBAAGjggIwMIICLDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOQqo4H5c7fdJweXbN5q1KsNxnmJMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAeBgNVHREEFzAVghNpbnRlcm5ldC5wcm9wZXJtLnJ1MIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAEqLxoMM42V0tOxwpndA94QMJPwEJJnQE0MDGbfrS/hwAUEsqxthmWPlYgf7vDr1Jn3iq89Sc0Cn6Vp3c/QAR0tSfdrP6MGo9NwZW7GuBp9TXn4G5DbFFY0XyiZK1eDYH8fRMKDSawF9wLAag94ZhLmRHjcp9gzjl+s4eSA7+IeTF9UnQ4qKJGo+qFCBGWmxYdHQgr6qYxydaBBMes8EPsoPlKT8TjpXok5uNulpseXkhZORCQtpFCWPKE+wzalDK+Zlgus7hJSro0Fw8xdbwCZZoIEMDTN5Ufe/tw6EM5UjJIQafT5wkfg/SPcqnyNlH9AQ/pXuMWL8V2JFswxIQ2s=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 09:54:01 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 09:25:10 UTC","ct_to_censys_at":"2018-07-30 22:10:36 UTC","index":"15569190"}},"fingerprint_sha256":"bdd98de9bd323d1537c57313a4ada26d2232e7b4aa101b22a514104046d74e6c","metadata":{"added_at":"2018-03-19 09:54:01 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 09:42:23 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 12:54:44 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["beta.hornbillfx.com","www.beta.hornbillfx.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"dcc30b3eaec28bc0043865bef1d19eb585d7440e"},"fingerprint_md5":"423ebba397cb9009eadaa4e1977a3035","fingerprint_sha1":"93537548c247c710cddb7d41b3fb42e6200a2b68","fingerprint_sha256":"bdd98de9bd323d1537c57313a4ada26d2232e7b4aa101b22a514104046d74e6c","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["beta.hornbillfx.com","www.beta.hornbillfx.com"],"redacted":false,"serial_number":"21846005069840796217274551150717432992065607","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"UloDSP2q+DjSN+GJDjwRfVQmU/FIYCaz5sHp5LSYjE81ITKeRrg825BDmNW3A5kbWp9JhEWxuR+REfbRX2Nlnj9opwSQGiGKwjBRkObo5kEOShE9b/oxSMYXnN9ZelxKxpROljyrgVOccW0GKrWQNlVGRF+aPbtmuoktV8hhGZDohPOZ8fzdqBgi5qW+oXX+LSD4jTXnm9J5mvJ7eCsbdMv6szcBkwoMI0IBWcv3TzI6gSQ5PepB0VZb7aswfM6w60u9jSLWERr/Mp3f137oUd1lU82Zc/mjS20xpVmi806ulIQ9Z9O7t31/IxwI+sjgzaY60X2vsGC5JO7CRMXWfQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"c16b6de0711f2e4b2b0a81093e90189c6c295c1928e05d9e28d94ee5645219de","subject":{"common_name":["beta.hornbillfx.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=beta.hornbillfx.com","subject_key_info":{"fingerprint_sha256":"233091edae45e9a34d13f60a35e48dc25d9d49b4afdf42bf289cd7fb76a2152c","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"rtwWJToCARw6Z///OKCRxHjL/HUr3AxStCwfCGK7+Q7VKIAcuXmoBVvW7bp0QNDsFszWf8PRui6KKUgl2bw1pxYVhrdl4Gmo1zYQvgFyXfHkXaLhFtdEH5aIr8zYuyoPDliZEPlxs4A2SzKyDErSpk03ojXR2cmlsfV5+NqC+ePlGd8bKeo+1EIHAW7vr16k3y/8FlYkzOqMItpLPOLiNvW1LbvFzjzbzo7ljUL5o79b0HN8JCIhftx7b+fVW7vogf6E6aE/jNzCEDfPgJVCFujr8bz7XL+H9uzeCiJhweUS3zmrR6/2c14f1AtXUqeij8bybA6FkItmh+HSA5nM4w=="}},"tbs_fingerprint":"ebd699dd23669291ef3db3f392f34fc503eddee0acba1894b8acd4017d7027c2","tbs_noct_fingerprint":"ab77b5695828f44697182a2b5dedf464458d19dfa598d67617a207d93622b10a","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 08:25:10 UTC","length":"7776000","start":"2018-03-19 08:25:10 UTC"},"version":"3"},"precert":true,"raw":"MIIFGDCCBACgAwIBAgITAPrHo4zslseak1SfPv6dV29oRzANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwODI1MTBaFw0xODA2MTcwODI1MTBaMB4xHDAaBgNVBAMTE2JldGEuaG9ybmJpbGxmeC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCu3BYlOgIBHDpn//84oJHEeMv8dSvcDFK0LB8IYrv5DtUogBy5eagFW9btunRA0OwWzNZ/w9G6LoopSCXZvDWnFhWGt2XgaajXNhC+AXJd8eRdouEW10QfloivzNi7Kg8OWJkQ+XGzgDZLMrIMStKmTTeiNdHZyaWx9Xn42oL54+UZ3xsp6j7UQgcBbu+vXqTfL/wWViTM6owi2ks84uI29bUtu8XOPNvOjuWNQvmjv1vQc3wkIiF+3Htv59Vbu+iB/oTpoT+M3MIQN8+AlUIW6OvxvPtcv4f27N4KImHB5RLfOatHr/ZzXh/UC1dSp6KPxvJsDoWQi2aH4dIDmczjAgMBAAGjggJJMIICRTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFNzDCz6uwovABDhlvvHRnrWF10QOMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzA3BgNVHREEMDAughNiZXRhLmhvcm5iaWxsZnguY29tghd3d3cuYmV0YS5ob3JuYmlsbGZ4LmNvbTCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQBSWgNI/ar4ONI34YkOPBF9VCZT8UhgJrPmwenktJiMTzUhMp5GuDzbkEOY1bcDmRtan0mERbG5H5ER9tFfY2WeP2inBJAaIYrCMFGQ5ujmQQ5KET1v+jFIxhec31l6XErGlE6WPKuBU5xxbQYqtZA2VUZEX5o9u2a6iS1XyGEZkOiE85nx/N2oGCLmpb6hdf4tIPiNNeeb0nma8nt4Kxt0y/qzNwGTCgwjQgFZy/dPMjqBJDk96kHRVlvtqzB8zrDrS72NItYRGv8ynd/XfuhR3WVTzZlz+aNLbTGlWaLzTq6UhD1n07u3fX8jHAj6yODNpjrRfa+wYLkk7sJExdZ9","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 15:55:07 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 15:22:05 UTC","ct_to_censys_at":"2018-07-30 22:11:13 UTC","index":"15581132"}},"fingerprint_sha256":"7458f5ae8bacc73346b43a40d847252d275e63150895c8a71c72fbfe2f5f9dd1","metadata":{"added_at":"2018-03-19 15:55:07 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 12:53:17 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 16:54:33 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["api.ciitizen.net","registry.ciitizen.net"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"0442fcb1d43cb3cebda01c9b05497a98279a00ac"},"fingerprint_md5":"128fde4e92781803af4b69b6904d1453","fingerprint_sha1":"2e33c22b00f9129f40a601c8a4f33305d8ed2d1b","fingerprint_sha256":"7458f5ae8bacc73346b43a40d847252d275e63150895c8a71c72fbfe2f5f9dd1","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["api.ciitizen.net","registry.ciitizen.net"],"redacted":false,"serial_number":"21834676730054726942654975044467395204575764","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"Oe0y+F/mbx3+5rFFylRgUGAvA70NTZc3OE3y5/a8UXxYo2+asvHD5lS5uR+RwisAuq0lsqWSiPzoC7mJuShO8UWb3osIGtykKv9+hGsWwWiVvUkqLA6/77GX67wW0mw9klke8W5b9e9nIY83D6lmKcfQQLlC/Kd6KKWSYhzGUocvDgbjUqnqeZ0Pwc7NFSy432jHeYiTo5F95oYj1nne2AZvdENgbnV0K4AicJH6PGg9Q6b+X+TbBcg57GQqBE2RK+T05H+dR908aA0pX4x2CMWFszlx89/micw9A/L/2jl0c/XQKYdd1mCuTQ07Nz9mXbryY4bml3ZmMZWrl/xoww=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"f66d4a0c06d8f447723e28618ea9de2416284d44a20afb2db60e5171f0d4d4cc","subject":{"common_name":["registry.ciitizen.net"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=registry.ciitizen.net","subject_key_info":{"fingerprint_sha256":"2a678561b24b6df3c28aef1d9c48972aa1bf343c70bb0d3b6dd78d23b67d64c9","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vtpuvJmKMCoyPQpOLnFlJhRXnG4VBFhs4cWTPOBLnyAOyXxk9k9H7XhJU+xh9Zic6II6Ljq9Sl+wYMMfSz/s+R1YC72FKhK+27rLyZyRqGjlAF7pSQoDS5/tIn6cCQIMpZaOxuxuxFP7OuBFA3+MEdFkJJW2jB9SJZpE41DKdY5udHVdfxzb0wuDHpVYX4b80UstvTo5Vlhbp//oQtTTuhsUJEmYGPvRRX6qjjfygDgf+FUNRCsZT/LxFCTfxZ5WUoWcQ3JFRPZHUg8T83yXblMHvMVCLc9orWs+doXoe19tGJSEngL90V5fbpWmf/auD69NTBxOZa7/JQn9czuBDQ=="}},"tbs_fingerprint":"58f34e71aa88a93b71161193c959194c8607cf6903d9ff8cb978173a49ce818d","tbs_noct_fingerprint":"8ff9038fe7c21d238315ad2022bc75960236ac916796d4654e8e8d59d22ec4c9","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 14:22:05 UTC","length":"7776000","start":"2018-03-19 14:22:05 UTC"},"version":"3"},"precert":true,"raw":"MIIFFTCCA/2gAwIBAgITAPqmWQ4K8iSJgl4xrNDjX91yFDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxNDIyMDVaFw0xODA2MTcxNDIyMDVaMCAxHjAcBgNVBAMTFXJlZ2lzdHJ5LmNpaXRpemVuLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7abryZijAqMj0KTi5xZSYUV5xuFQRYbOHFkzzgS58gDsl8ZPZPR+14SVPsYfWYnOiCOi46vUpfsGDDH0s/7PkdWAu9hSoSvtu6y8mckaho5QBe6UkKA0uf7SJ+nAkCDKWWjsbsbsRT+zrgRQN/jBHRZCSVtowfUiWaRONQynWObnR1XX8c29MLgx6VWF+G/NFLLb06OVZYW6f/6ELU07obFCRJmBj70UV+qo438oA4H/hVDUQrGU/y8RQk38WeVlKFnENyRUT2R1IPE/N8l25TB7zFQi3PaK1rPnaF6HtfbRiUhJ4C/dFeX26Vpn/2rg+vTUwcTmWu/yUJ/XM7gQ0CAwEAAaOCAkQwggJAMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUBEL8sdQ8s869oBybBUl6mCeaAKwwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMDIGA1UdEQQrMCmCEGFwaS5jaWl0aXplbi5uZXSCFXJlZ2lzdHJ5LmNpaXRpemVuLm5ldDCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQA57TL4X+ZvHf7msUXKVGBQYC8DvQ1Nlzc4TfLn9rxRfFijb5qy8cPmVLm5H5HCKwC6rSWypZKI/OgLuYm5KE7xRZveiwga3KQq/36EaxbBaJW9SSosDr/vsZfrvBbSbD2SWR7xblv172chjzcPqWYpx9BAuUL8p3oopZJiHMZShy8OBuNSqep5nQ/Bzs0VLLjfaMd5iJOjkX3mhiPWed7YBm90Q2BudXQrgCJwkfo8aD1Dpv5f5NsFyDnsZCoETZEr5PTkf51H3TxoDSlfjHYIxYWzOXHz3+aJzD0D8v/aOXRz9dAph13WYK5NDTs3P2ZduvJjhuaXdmYxlauX/GjD","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 08:54:32 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 08:17:13 UTC","ct_to_censys_at":"2018-07-30 22:10:27 UTC","index":"15566843"}},"fingerprint_sha256":"fda262cf47e6b53ddae549c0dff143a21e3cb4cffe5f21a2d76d3aed23e096cb","metadata":{"added_at":"2018-03-19 08:54:32 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 17:05:11 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-30 08:21:37 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["demo83223.ssl-test1.org"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"038aee4b8e5c3c25cf83f14154a9bb4552853466"},"fingerprint_md5":"a8b008f2eaa579d6c97bfe632f248b51","fingerprint_sha1":"54b32b63aa7c78a1497f4f043cb6e73089fb62f9","fingerprint_sha256":"fda262cf47e6b53ddae549c0dff143a21e3cb4cffe5f21a2d76d3aed23e096cb","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["demo83223.ssl-test1.org"],"redacted":false,"serial_number":"21827766672623843987506306766183215793194699","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"mt43TUvRQKLJD9Iy0KZrxetSz2/1TNeWsGSzkcI9rTRP7mpq4VOo5Z3y98Un3SpFtKD79b5re4V2LE6iqD9tz6D3WcIF2p+5Zwj6MOdBc+5QFcZQdks+oeAG0fMBXQLqZe5FrcXVoPTJPfjtOmWMl/JPYbspvb7ThbSM4snFMBedpw5Utm+9pK+GcJhI8CQjXQnNrzVLMPZGb9vQ8MjLDEce90ZlsZALOrZ3MqqgmoRGqg/SDcsXgrHM629aPGskrR6Iq9wpLitoBm9twoz0n+s8v6WVzKersqMdKw/Uke3RxG2rjVAwEP1Rp6PLGqBCuCe01UcXHLjZknsxi12rvg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"cca0faa4af7940f64d8aba68cab08370373d9d1a5224de5ac4796d3e70c6a1e2","subject":{"common_name":["demo83223.ssl-test1.org"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=demo83223.ssl-test1.org","subject_key_info":{"fingerprint_sha256":"fac0a9b7cbf0905d4f4baf299797abe65d731946a54acfcfa8cb2678f0fd2e63","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"5hhqnTyOEvEKumh5ALThhkYE2gNkm59VOEAFRvDIWxOYzpcxb88u/3kRMeB1+MPQsnNr3KXroTGmhJCjA6kux/EkrEkGDLMQDM/QhAEE9Y6khvD0sV5rMzBhN8rGWw0OP+4ljaGbeKX6fZzXcM2XX73BLl0HUj0irYhrpo35iqOi+J16fEMoBqh9SntQkGGYMWNN+CcNEAKozT4X48opE931OJPnk+FhziQWYSq1f966KKdaQ2MQNDGN6X4aYDtsrcecW4EYZxWMcbf69oiVsAhgOyW9DGei4kCWdjtdOG1+E/pPs/86Z6jOhHN8xRBKEXIxVnttSmBGMsKZV0rFRQ=="}},"tbs_fingerprint":"3d40af416edf2e0d41781a1dd3d488839a5cc0b12481b9b73b769b8741c9fc1b","tbs_noct_fingerprint":"bc27ce6e93d1f0959f867c72901249e7a22e676e2f09ecc2d71bd5026de0ec6c","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 07:17:13 UTC","length":"7776000","start":"2018-03-19 07:17:13 UTC"},"version":"3"},"precert":true,"raw":"MIIFBzCCA++gAwIBAgITAPqSCoFj8UEt+Yr3ZlDY2wBGyzANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwNzE3MTNaFw0xODA2MTcwNzE3MTNaMCIxIDAeBgNVBAMTF2RlbW84MzIyMy5zc2wtdGVzdDEub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5hhqnTyOEvEKumh5ALThhkYE2gNkm59VOEAFRvDIWxOYzpcxb88u/3kRMeB1+MPQsnNr3KXroTGmhJCjA6kux/EkrEkGDLMQDM/QhAEE9Y6khvD0sV5rMzBhN8rGWw0OP+4ljaGbeKX6fZzXcM2XX73BLl0HUj0irYhrpo35iqOi+J16fEMoBqh9SntQkGGYMWNN+CcNEAKozT4X48opE931OJPnk+FhziQWYSq1f966KKdaQ2MQNDGN6X4aYDtsrcecW4EYZxWMcbf69oiVsAhgOyW9DGei4kCWdjtdOG1+E/pPs/86Z6jOhHN8xRBKEXIxVnttSmBGMsKZV0rFRQIDAQABo4ICNDCCAjAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQDiu5Ljlw8Jc+D8UFUqbtFUoU0ZjAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wIgYDVR0RBBswGYIXZGVtbzgzMjIzLnNzbC10ZXN0MS5vcmcwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAmt43TUvRQKLJD9Iy0KZrxetSz2/1TNeWsGSzkcI9rTRP7mpq4VOo5Z3y98Un3SpFtKD79b5re4V2LE6iqD9tz6D3WcIF2p+5Zwj6MOdBc+5QFcZQdks+oeAG0fMBXQLqZe5FrcXVoPTJPfjtOmWMl/JPYbspvb7ThbSM4snFMBedpw5Utm+9pK+GcJhI8CQjXQnNrzVLMPZGb9vQ8MjLDEce90ZlsZALOrZ3MqqgmoRGqg/SDcsXgrHM629aPGskrR6Iq9wpLitoBm9twoz0n+s8v6WVzKersqMdKw/Uke3RxG2rjVAwEP1Rp6PLGqBCuCe01UcXHLjZknsxi12rvg==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 12:54:16 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 12:17:04 UTC","ct_to_censys_at":"2018-07-30 22:10:53 UTC","index":"15575535"}},"fingerprint_sha256":"54aa3cdaae7a1df2c77c9a42b6088228411413e5abadbdf0be371d747936cba4","metadata":{"added_at":"2018-03-19 12:54:16 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 15:36:53 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-30 06:10:35 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["ai-em.be","gert.hs1.biz2web.eu","www.ai-em.be"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"e2e737ec0003946e51dd9ff46b0c43f82f67bbcd"},"fingerprint_md5":"199919ef4982759fead0de41513abaf2","fingerprint_sha1":"30aa83c104f12b86ccd1bc0f7bbc772384b25f13","fingerprint_sha256":"54aa3cdaae7a1df2c77c9a42b6088228411413e5abadbdf0be371d747936cba4","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["ai-em.be","gert.hs1.biz2web.eu","www.ai-em.be"],"redacted":false,"serial_number":"21849926683854884362426296834081546918500713","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"MbuD1T/tGY0nlog0FsFdVufXmgJXecw0TJV06XsOozemvNVF/QgYlDFQTrUzMdWBLzl3nh6VTpeo6PdLfarA3eQy3A6UtqXhmQVNxfCcyH+pSWOm+A/TeGEYuDiqQ+3NHxmDk4bGynVmF2qYF9X6mQ6to7gUTC5ypPbqlR03VZA5UM5f2DjvGvm+kV9VpPNlY7i1BIaqNdf7zkqY2qaIzpSdOFA6RVsU9eqxqPNSG1GV7UDFHQxojft/9smYB3zdl5qEWmgqwTGVAkFRzOnpaSZNR0ExQmkzBPgQLCWKLPsWqRetrRoaW9Hzh1bYJAFhCg4nURoNu8XcpZDjqt3QDw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"070ec43db98a6a02090c4a558617427824311bda3d998fd69d8af7f46820fa9a","subject":{"common_name":["ai-em.be"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=ai-em.be","subject_key_info":{"fingerprint_sha256":"f1ead6017363ee5b7ff62f80b69288156a467e9e12d9a3f03915e27199c1edee","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"ybKK2wxUK9cAgYK+nTy1TSU3YqI1HyVvk/SpwyMb9rfFNWl98Ugl/QzG5fZKxLA8OJ8jTAlA6BvXB4wlJuHAOoe92MZsdw5FkeJgTml8ZyDWbLb50SX0EifubVl3CAJxE6KgHEqH7R+HiyHE79GhiITG6X/lm7XVLsoa4fXT7jYvykCvUNd8eJ8wz1rSvilAQxPXq3F9Nam+NuEmAL1QgLq9V3k21B4lHts1ZlAJdCDZKswsD2CLAziLyFdyLEI8181zTpXwl6ILRzEAskqmV/10jyP0Hl+jKX3aqdF79wttISS7uP4wn/q4QKfEjxs9FNkwxxqaopqhPmmOV49HVQ=="}},"tbs_fingerprint":"fbe98d7e1dc400b43736b47b5155060671ee0e5809498f1e9e20086537367000","tbs_noct_fingerprint":"e655d227ee8e01eba837e58f281a34b36c93001937362cc464be904cdea24772","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 11:17:04 UTC","length":"7776000","start":"2018-03-19 11:17:04 UTC"},"version":"3"},"precert":true,"raw":"MIIFDDCCA/SgAwIBAgITAPrTKdhPaBNMLxyY1sOTuakZaTANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxMTE3MDRaFw0xODA2MTcxMTE3MDRaMBMxETAPBgNVBAMTCGFpLWVtLmJlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAybKK2wxUK9cAgYK+nTy1TSU3YqI1HyVvk/SpwyMb9rfFNWl98Ugl/QzG5fZKxLA8OJ8jTAlA6BvXB4wlJuHAOoe92MZsdw5FkeJgTml8ZyDWbLb50SX0EifubVl3CAJxE6KgHEqH7R+HiyHE79GhiITG6X/lm7XVLsoa4fXT7jYvykCvUNd8eJ8wz1rSvilAQxPXq3F9Nam+NuEmAL1QgLq9V3k21B4lHts1ZlAJdCDZKswsD2CLAziLyFdyLEI8181zTpXwl6ILRzEAskqmV/10jyP0Hl+jKX3aqdF79wttISS7uP4wn/q4QKfEjxs9FNkwxxqaopqhPmmOV49HVQIDAQABo4ICSDCCAkQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTi5zfsAAOUblHdn/RrDEP4L2e7zTAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wNgYDVR0RBC8wLYIIYWktZW0uYmWCE2dlcnQuaHMxLmJpejJ3ZWIuZXWCDHd3dy5haS1lbS5iZTCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQAxu4PVP+0ZjSeWiDQWwV1W59eaAld5zDRMlXTpew6jN6a81UX9CBiUMVBOtTMx1YEvOXeeHpVOl6jo90t9qsDd5DLcDpS2peGZBU3F8JzIf6lJY6b4D9N4YRi4OKpD7c0fGYOThsbKdWYXapgX1fqZDq2juBRMLnKk9uqVHTdVkDlQzl/YOO8a+b6RX1Wk82VjuLUEhqo11/vOSpjapojOlJ04UDpFWxT16rGo81IbUZXtQMUdDGiN+3/2yZgHfN2XmoRaaCrBMZUCQVHM6elpJk1HQTFCaTME+BAsJYos+xapF62tGhpb0fOHVtgkAWEKDidRGg27xdylkOOq3dAP","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 20:09:29 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 19:34:53 UTC","ct_to_censys_at":"2018-07-30 22:11:30 UTC","index":"15587794"}},"fingerprint_sha256":"4a373daaf87a63252cf241c87cf66e8569f92a35b5224dc9383cbe77465f13cc","metadata":{"added_at":"2018-03-19 20:09:29 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 16:49:06 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 21:48:10 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["bxnvklrhjlmyisexcdxn.v1-prober.sds.certsbridge.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"59ddb355a420439d9092caf600ea36790db9c4a1"},"fingerprint_md5":"df5d153765020275e4951f6c74cb58ad","fingerprint_sha1":"8969dd0d380292ccff0ef065ac00328a3f91186d","fingerprint_sha256":"4a373daaf87a63252cf241c87cf66e8569f92a35b5224dc9383cbe77465f13cc","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["bxnvklrhjlmyisexcdxn.v1-prober.sds.certsbridge.com"],"redacted":false,"serial_number":"21808523271531641414560310865740008106489475","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"IUgWEicLVVb6DzOBl+zmDz4PLGNwdbUF7gGUG4EbJX8ZgE2BycRl03bd+0JVaRMLkcvMltha4/sp5b8QTFEIFaHI+apFtuiSpbSCWkQL262DkQGzLCz6yaS+W8CH7/MzLChx936pqig+luQc/4kvIDgxFWoDumA9ZUFeU1mSXV9c8MHN7j+IRll0103tLnOQeHs/ebQo/vf/wPyO/4mRTwW2MyhRXfdkhrq9oao7EOhsWNs1Sa5qhd7j+1TdLPhQ2skWqkeKPW4mTQl/Kdlcw9MLi9Sb4b/FqcSDa+/o+C8BrYdpchrYHf/jynHEOCV6yuo+5jhuLWn81i4CQAI4cg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"bd56f0c57c9dd44d95b3bc198848ecd487006ce9466e7cbbec75d320784e3578","subject":{"common_name":["bxnvklrhjlmyisexcdxn.v1-prober.sds.certsbridge.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=bxnvklrhjlmyisexcdxn.v1-prober.sds.certsbridge.com","subject_key_info":{"fingerprint_sha256":"2766c997a44b10448388efebb5a78394a5c2665697ce0c835d34b96ef5d337f9","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"ois3JjIXvdGJ+OE8+nhrAjhqqeR0QY70SfT6XaBWXlUqK6rwl279dGBd4dFUKL4M91Icv3Wsx2DJe4ywOYoCd9Zp5+Ss+yY36MB5dUCfrgQruAqtIjyVhkfFI7AQXd5Kg1UhQT7771Q5JhDx+z8TwKfJ3qt4ez5MWEdrvfRVPmZLCPCd/w27Tp+v1Ph3lpZaz1ZgbgX+41wRe/JQ32NryKFgFpYNJW5eXJSfdmu5M/pfhUz36L+f5sYbXxRH1r5WxOZCAE3HUnPt3CfCf3NlDEocJb37pAsY37+5mt3cu3Y/SEYNVMkFa6mN/leZcBJlHeRNG1TQzvUcEmBGy6IAjQ=="}},"tbs_fingerprint":"3bc5efcde5c87966119a8b7de7133b057d62e878ca381f5e1d6217f8262dad4a","tbs_noct_fingerprint":"5ecf5623ef3905284646054304f0c45d2ca81454ea9ec1bd0dd73dd59527cce1","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 18:34:52 UTC","length":"7776000","start":"2018-03-19 18:34:52 UTC"},"version":"3"},"precert":true,"raw":"MIIFPTCCBCWgAwIBAgITAPpZfWEmnz1f5QqyPSNLCh/2gzANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxODM0NTJaFw0xODA2MTcxODM0NTJaMD0xOzA5BgNVBAMTMmJ4bnZrbHJoamxteWlzZXhjZHhuLnYxLXByb2Jlci5zZHMuY2VydHNicmlkZ2UuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAois3JjIXvdGJ+OE8+nhrAjhqqeR0QY70SfT6XaBWXlUqK6rwl279dGBd4dFUKL4M91Icv3Wsx2DJe4ywOYoCd9Zp5+Ss+yY36MB5dUCfrgQruAqtIjyVhkfFI7AQXd5Kg1UhQT7771Q5JhDx+z8TwKfJ3qt4ez5MWEdrvfRVPmZLCPCd/w27Tp+v1Ph3lpZaz1ZgbgX+41wRe/JQ32NryKFgFpYNJW5eXJSfdmu5M/pfhUz36L+f5sYbXxRH1r5WxOZCAE3HUnPt3CfCf3NlDEocJb37pAsY37+5mt3cu3Y/SEYNVMkFa6mN/leZcBJlHeRNG1TQzvUcEmBGy6IAjQIDAQABo4ICTzCCAkswDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRZ3bNVpCBDnZCSyvYA6jZ5DbnEoTAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wPQYDVR0RBDYwNIIyYnhudmtscmhqbG15aXNleGNkeG4udjEtcHJvYmVyLnNkcy5jZXJ0c2JyaWRnZS5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAIUgWEicLVVb6DzOBl+zmDz4PLGNwdbUF7gGUG4EbJX8ZgE2BycRl03bd+0JVaRMLkcvMltha4/sp5b8QTFEIFaHI+apFtuiSpbSCWkQL262DkQGzLCz6yaS+W8CH7/MzLChx936pqig+luQc/4kvIDgxFWoDumA9ZUFeU1mSXV9c8MHN7j+IRll0103tLnOQeHs/ebQo/vf/wPyO/4mRTwW2MyhRXfdkhrq9oao7EOhsWNs1Sa5qhd7j+1TdLPhQ2skWqkeKPW4mTQl/Kdlcw9MLi9Sb4b/FqcSDa+/o+C8BrYdpchrYHf/jynHEOCV6yuo+5jhuLWn81i4CQAI4cg==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 02:24:55 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 01:54:28 UTC","ct_to_censys_at":"2018-07-30 22:09:49 UTC","index":"15554854"}},"fingerprint_sha256":"7c66c0d52341d53b7e3c4a30852292c833487980c4409216bcef4cfc594f3caf","metadata":{"added_at":"2018-03-19 02:24:55 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 07:46:12 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 18:19:42 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["content.properm.ru"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"d9ffa46be71fc1fd8ff112e8c4d2857fa1c7db84"},"fingerprint_md5":"d39bdd879baf23be9a972c0845249306","fingerprint_sha1":"3a0ed3d58ebb4705d61419aad0b9b5191f6f0637","fingerprint_sha256":"7c66c0d52341d53b7e3c4a30852292c833487980c4409216bcef4cfc594f3caf","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["content.properm.ru"],"redacted":false,"serial_number":"21804053228124346398860792757718308699527013","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"kC2niHct6bmd3HBA5kkDZm0wB3Q+8ajmsLnrwD4AxdnPgTIk54qp7SAJL/j4faS8WspsEN/7fzctqTM4r1LRBTktIGdfdQlzufNoCZ4+XRvfifr4bHAnaUPWE5lxp03BdPQtYWXcfrXlqOzeyDLmlJzwHfdiTbdLNn3iEntaDt54SL3RzcSBvYs3Pl0eS4hpFz0RVrxzpKxfEVK8xZQP6i7wxgp3cY8FKY6io5G/C19SvOfKUWNuYkRw7eP+B/PABbgKk+D/jtAofbilOA859cU73eDq4Bv9jXQBAbXMHTEYVD4n1VRFczBu2mvH2TdgZquEfKOEWBDu/3SFNPeteg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"a24492217b6104ae9a96567494af7c53199a3b9da82fecf74b6dcf318251a41e","subject":{"common_name":["content.properm.ru"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=content.properm.ru","subject_key_info":{"fingerprint_sha256":"6b2d9056c9a54a6bc7341629789cddf447dda7c860ff928bfc6d0fbab2f12aff","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"mVa89Wn1g1Cl/Eqf1kWgH9qiD/2wxDWsXZ+8zm2b6WW5PDNvCFWlXRdAJElCg/9WyQEXl015MfJkWs6cUDt6C2UlXvq7F3FfkNilWUyKqG9ZfYkV3QjDFCScopHb15vqaANdu6KwBVliDLoOSAI3MxOS7jEEoQ+plRQG5lh0ENR4tMx04DwYBw6mh3Z0PRdfDyjF7ICc8Bys6myNMRfyEs89+NGW87aR2bHxcoP9Br3rlr89+r7oAY8jaB5VM/k+qxVjlW48n3wTxREL2Jn1LL/zUoigPd5sMigEjJfRGu9Ect0gbK1GvoizAox9cPEl8ywJaI+Jpjq64BubXnhnKw=="}},"tbs_fingerprint":"cbee17f499ac7996758e83524e417addc3e9ef522f7651fd98f450158f791268","tbs_noct_fingerprint":"8b4d10ed523fab98b308a4321ab1a555083d17660516b6e8cddc9812acb4a9c7","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 00:54:28 UTC","length":"7776000","start":"2018-03-19 00:54:28 UTC"},"version":"3"},"precert":true,"raw":"MIIE/TCCA+WgAwIBAgITAPpMWn4bFL6N1Oq9MH/AIrhXZTANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwMDU0MjhaFw0xODA2MTcwMDU0MjhaMB0xGzAZBgNVBAMTEmNvbnRlbnQucHJvcGVybS5ydTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJlWvPVp9YNQpfxKn9ZFoB/aog/9sMQ1rF2fvM5tm+lluTwzbwhVpV0XQCRJQoP/VskBF5dNeTHyZFrOnFA7egtlJV76uxdxX5DYpVlMiqhvWX2JFd0IwxQknKKR29eb6mgDXbuisAVZYgy6DkgCNzMTku4xBKEPqZUUBuZYdBDUeLTMdOA8GAcOpod2dD0XXw8oxeyAnPAcrOpsjTEX8hLPPfjRlvO2kdmx8XKD/Qa965a/Pfq+6AGPI2geVTP5PqsVY5VuPJ98E8URC9iZ9Sy/81KIoD3ebDIoBIyX0RrvRHLdIGytRr6IswKMfXDxJfMsCWiPiaY6uuAbm154ZysCAwEAAaOCAi8wggIrMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU2f+ka+cfwf2P8RLoxNKFf6HH24QwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMB0GA1UdEQQWMBSCEmNvbnRlbnQucHJvcGVybS5ydTCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQCQLaeIdy3puZ3ccEDmSQNmbTAHdD7xqOawuevAPgDF2c+BMiTniqntIAkv+Ph9pLxaymwQ3/t/Ny2pMzivUtEFOS0gZ191CXO582gJnj5dG9+J+vhscCdpQ9YTmXGnTcF09C1hZdx+teWo7N7IMuaUnPAd92JNt0s2feISe1oO3nhIvdHNxIG9izc+XR5LiGkXPRFWvHOkrF8RUrzFlA/qLvDGCndxjwUpjqKjkb8LX1K858pRY25iRHDt4/4H88AFuAqT4P+O0Ch9uKU4Dzn1xTvd4OrgG/2NdAEBtcwdMRhUPifVVEVzMG7aa8fZN2Bmq4R8o4RYEO7/dIU09616","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 13:54:05 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 13:16:20 UTC","ct_to_censys_at":"2018-07-30 22:11:00 UTC","index":"15577185"}},"fingerprint_sha256":"d2273f4447815b233e6e72b161855f027848b47d796eff50aeca14b53567573b","metadata":{"added_at":"2018-03-19 13:54:05 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 12:06:52 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 23:47:46 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["internet.properm.ru"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"e14981b400c8a45a115888bf68588a5037ea6aab"},"fingerprint_md5":"5161038a119c0d89c8ae608282f511e3","fingerprint_sha1":"599fe6e5560ecbb9e52f442118cd3c595ce5fcab","fingerprint_sha256":"d2273f4447815b233e6e72b161855f027848b47d796eff50aeca14b53567573b","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["internet.properm.ru"],"redacted":false,"serial_number":"21815800977695702800330506797330981911936107","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"DsuZ8rTi1t8B6xPjsA8rRgGmfLZP8gKfzo4C0xawEVm8fA90k/pl1VtLnHUmktdphzOL2U2LFh8k6YaGmlmS7Hh+/fKpKfU8w9Z48vhtTV3ILxQVhSGweNaGynopgu0Tt2EX6g9E/xMbSWK/A5i3rf1AP9mzpRV2x7IWlw1ODDDhsrjYwW04XjuJGRa5vya2lzTUHyfkvDGIE2skPYF/4sLs0SxfVlgoAqDQUKjYX0R6FMJAB/my9WaM+beJCOYxAc2q6TZjUMskw6quCVMPYKkwZp4yxOPcx5iswOrZ63+1lEz02lDLvD6+cde3Qm4u7E2ojkT57ZFfK1vaqz2aEw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"ce8547b402d78226a25742ff58450c0582de43db12bf70046825a1102b2b0664","subject":{"common_name":["internet.properm.ru"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=internet.properm.ru","subject_key_info":{"fingerprint_sha256":"6b13a85fffc1594a421f817a5dd5c6cf4411e2d66acea14bc264853f01fcc5aa","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"8jb2TZV/Jj89GpoDQ9IHplIAOyL3wIwpZ6PYsUesg3tefqxmw1B9pZMN3zVdpjh6D5GfKhcctu1BVdXvVAkdlKGa/wEH9AgOts143DdNgH0oCYN0s9HIz2OqH81Fwgp0INQJJ2qh3kq+VlRYNhbho4xuVssArw4qBH+2lTlWaofD10SbD4t68msGi7adcXCSvHf36/F1mqjFLveUHpQVmo/t76Bf7moXDZ4qyJaQt0O40FcwS2nT7WxN4TAwBsmBMekpGVGvvMtiE9syD027l4cTUHpSYkYXj7yea6L2grIE/b+3ahjpiEIqdy4ihtG50lEJ/3Dhnxt4/3ADV4p8rw=="}},"tbs_fingerprint":"3c0e52afde5276d170248abe2253f354de4b6ac869d22c0eb6effa3d7b4dc37e","tbs_noct_fingerprint":"dc6dbea00e4077ac6245030b76db0864cb25916a94556d004676d2fdb9c73109","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 12:16:20 UTC","length":"7776000","start":"2018-03-19 12:16:20 UTC"},"version":"3"},"precert":true,"raw":"MIIE/zCCA+egAwIBAgITAPpu4IRfp3a6TMpFYV2wny48azANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxMjE2MjBaFw0xODA2MTcxMjE2MjBaMB4xHDAaBgNVBAMTE2ludGVybmV0LnByb3Blcm0ucnUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDyNvZNlX8mPz0amgND0gemUgA7IvfAjClno9ixR6yDe15+rGbDUH2lkw3fNV2mOHoPkZ8qFxy27UFV1e9UCR2UoZr/AQf0CA62zXjcN02AfSgJg3Sz0cjPY6ofzUXCCnQg1AknaqHeSr5WVFg2FuGjjG5WywCvDioEf7aVOVZqh8PXRJsPi3ryawaLtp1xcJK8d/fr8XWaqMUu95QelBWaj+3voF/uahcNnirIlpC3Q7jQVzBLadPtbE3hMDAGyYEx6SkZUa+8y2IT2zIPTbuXhxNQelJiRhePvJ5rovaCsgT9v7dqGOmIQip3LiKG0bnSUQn/cOGfG3j/cANXinyvAgMBAAGjggIwMIICLDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOFJgbQAyKRaEViIv2hYilA36mqrMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAeBgNVHREEFzAVghNpbnRlcm5ldC5wcm9wZXJtLnJ1MIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAA7LmfK04tbfAesT47APK0YBpny2T/ICn86OAtMWsBFZvHwPdJP6ZdVbS5x1JpLXaYczi9lNixYfJOmGhppZkux4fv3yqSn1PMPWePL4bU1dyC8UFYUhsHjWhsp6KYLtE7dhF+oPRP8TG0livwOYt639QD/Zs6UVdseyFpcNTgww4bK42MFtOF47iRkWub8mtpc01B8n5LwxiBNrJD2Bf+LC7NEsX1ZYKAKg0FCo2F9EehTCQAf5svVmjPm3iQjmMQHNquk2Y1DLJMOqrglTD2CpMGaeMsTj3MeYrMDq2et/tZRM9NpQy7w+vnHXt0JuLuxNqI5E+e2RXytb2qs9mhM=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 15:55:07 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 15:19:52 UTC","ct_to_censys_at":"2018-07-30 22:11:10 UTC","index":"15580956"}},"fingerprint_sha256":"5bd7d393e03f065df97fa4171fca8f5c8ea8a00e077bfc58cf57ce3c0869aa80","metadata":{"added_at":"2018-03-19 15:55:07 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 21:14:18 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 05:03:40 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["api.ciitizen.net","registry.ciitizen.net"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"0442fcb1d43cb3cebda01c9b05497a98279a00ac"},"fingerprint_md5":"067dfe59d28cb61bdb88e046f8553dec","fingerprint_sha1":"7b21539616f629f9599d958bfd24f9d58a6b66d3","fingerprint_sha256":"5bd7d393e03f065df97fa4171fca8f5c8ea8a00e077bfc58cf57ce3c0869aa80","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["registry.ciitizen.net","api.ciitizen.net"],"redacted":false,"serial_number":"21858813553241163245269352942429586821922303","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"DcD7IRqqTVVM8MKGLVdGQLEQK3pyet56EiMS0jhbTBgK4kuEbzWMnuWmZNN+zOx9YkvCPVP6KI+lJtrAxQguzIfXT9w1zLP5uXvQ12AbqL5YL9aOHmcXFRqXFImuns+CqLzuOBB0HgKxVAHx1lM0I6ag5RBL5Du2/Qp4zKu01xqI6f3F5tKqd+yRXxeYe/CRyJTCDi8t7U4LB58n4MPmTB1ySKviureiNkiGz3im2JZM6Svcf/7aTZTIf2C3wJmBEY3ng6qT4GbjsWXvdzvQcgbwVqGdqhex3QmF+8nMuOP7uEl/b2RLs4e/fOJ8GryuHEB/4UhDgxaKqDMFidBsXw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"f66d4a0c06d8f447723e28618ea9de2416284d44a20afb2db60e5171f0d4d4cc","subject":{"common_name":["registry.ciitizen.net"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=registry.ciitizen.net","subject_key_info":{"fingerprint_sha256":"2a678561b24b6df3c28aef1d9c48972aa1bf343c70bb0d3b6dd78d23b67d64c9","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vtpuvJmKMCoyPQpOLnFlJhRXnG4VBFhs4cWTPOBLnyAOyXxk9k9H7XhJU+xh9Zic6II6Ljq9Sl+wYMMfSz/s+R1YC72FKhK+27rLyZyRqGjlAF7pSQoDS5/tIn6cCQIMpZaOxuxuxFP7OuBFA3+MEdFkJJW2jB9SJZpE41DKdY5udHVdfxzb0wuDHpVYX4b80UstvTo5Vlhbp//oQtTTuhsUJEmYGPvRRX6qjjfygDgf+FUNRCsZT/LxFCTfxZ5WUoWcQ3JFRPZHUg8T83yXblMHvMVCLc9orWs+doXoe19tGJSEngL90V5fbpWmf/auD69NTBxOZa7/JQn9czuBDQ=="}},"tbs_fingerprint":"ad7a96a9e63bc0c0a3192169fcfb28a0ec7563c085bc9984b1a67d41ab2a23eb","tbs_noct_fingerprint":"e32ab6a9b41aa38cd893e33612e6151014b1e3100055e8febfda3f0616deff2c","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 14:19:51 UTC","length":"7776000","start":"2018-03-19 14:19:51 UTC"},"version":"3"},"precert":true,"raw":"MIIFFTCCA/2gAwIBAgITAPrtR5UYslQ/nEOFFCnLcPa9/zANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxNDE5NTFaFw0xODA2MTcxNDE5NTFaMCAxHjAcBgNVBAMTFXJlZ2lzdHJ5LmNpaXRpemVuLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7abryZijAqMj0KTi5xZSYUV5xuFQRYbOHFkzzgS58gDsl8ZPZPR+14SVPsYfWYnOiCOi46vUpfsGDDH0s/7PkdWAu9hSoSvtu6y8mckaho5QBe6UkKA0uf7SJ+nAkCDKWWjsbsbsRT+zrgRQN/jBHRZCSVtowfUiWaRONQynWObnR1XX8c29MLgx6VWF+G/NFLLb06OVZYW6f/6ELU07obFCRJmBj70UV+qo438oA4H/hVDUQrGU/y8RQk38WeVlKFnENyRUT2R1IPE/N8l25TB7zFQi3PaK1rPnaF6HtfbRiUhJ4C/dFeX26Vpn/2rg+vTUwcTmWu/yUJ/XM7gQ0CAwEAAaOCAkQwggJAMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUBEL8sdQ8s869oBybBUl6mCeaAKwwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMDIGA1UdEQQrMCmCEGFwaS5jaWl0aXplbi5uZXSCFXJlZ2lzdHJ5LmNpaXRpemVuLm5ldDCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQANwPshGqpNVUzwwoYtV0ZAsRArenJ63noSIxLSOFtMGAriS4RvNYye5aZk037M7H1iS8I9U/ooj6Um2sDFCC7Mh9dP3DXMs/m5e9DXYBuovlgv1o4eZxcVGpcUia6ez4KovO44EHQeArFUAfHWUzQjpqDlEEvkO7b9CnjMq7TXGojp/cXm0qp37JFfF5h78JHIlMIOLy3tTgsHnyfgw+ZMHXJIq+K6t6I2SIbPeKbYlkzpK9x//tpNlMh/YLfAmYERjeeDqpPgZuOxZe93O9ByBvBWoZ2qF7HdCYX7ycy44/u4SX9vZEuzh7984nwavK4cQH/hSEODFoqoMwWJ0Gxf","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 00:23:30 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-18 23:46:03 UTC","ct_to_censys_at":"2018-07-30 22:09:29 UTC","index":"15548504"}},"fingerprint_sha256":"954a3a0b0411fe02fd60820275d7a003e63bec942019ad5231c593f3dd871874","metadata":{"added_at":"2018-03-19 00:23:30 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 07:21:26 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 10:03:13 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["compreencasa.com","www.compreencasa.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"fb061e57d7d6db37e461b4bd17fa91c4d9f3f41b"},"fingerprint_md5":"38c01a9e5d0ad157cb22c1f6be36efd2","fingerprint_sha1":"7e8e1d7172aaaa9ef83b7c3923f36f21f5a337d3","fingerprint_sha256":"954a3a0b0411fe02fd60820275d7a003e63bec942019ad5231c593f3dd871874","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["www.compreencasa.com","compreencasa.com"],"redacted":false,"serial_number":"21839894477730718418142333028982173705795574","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"QZTw8jCdjxzLykhsgAA0NHzj02H/0v1oFAKziYWsmBLPva7Q391QD8RYN85dK0erjI0Nkh6vGAqc/LMcmlJMlovXI/Q16mwgXZ6UK5ot491e2sGgw/E01fWTlPU6sRWgNhApwqx11JGNKHyYkB3ykvEseAERlKDfQhDsS33qXVLatGLRfsptH5M9vhITLYDO4hGZ9YJwNcwQCzOgC6Zbh1X41MSry3VNCNDuFF1khmsR7dC2dm4TXXUvkht/aMHT3QGDvFrKZZoEyweU5b/ZAxXdvBtdOLT50SY+5OVVMZx8o4utzX9/PDnBxBzXsKzWaz5xLcklMAR27EOvGMM9Ng=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"bf960a847d7ea0f67451041fbbe3b501a7b74e347d9a27a96b8266b15dbd02cb","subject":{"common_name":["compreencasa.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=compreencasa.com","subject_key_info":{"fingerprint_sha256":"93f0aa0bd7254e41c985392f02346e332b9a461a63f6a350c9c142c164f076c1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"5UJWTyE8cGIV9F5Q8nSkVf+ELsUCWijdnp3kKZ6X9/73xU9FUpS4iYdrLYWLgOYJZrl7GSbf3HBWFFV4g6rHf9Ptq/r/OIUlwTbHBq1z2a3pxXIXwhJcwkeSu5ncZ190II+fu2LSdRjOe5XmIBDK6T6ky75yL8G614kh9dr2tTTixRm65FmwxghX7XOS0c0zMbSfdp/Kr/M9FDXSoQLM17udJIA95oHL/XW0wj8a11hSsLwkwvjtzTGNBR6S3gpwyCqBvUseBcFoSMCnvdisPRjJlrZodWfTHkAKcP0k2vFarSE70gncQabs7sTQ9oIehMrNbXIo4pXWWSZ6bFl6DQ=="}},"tbs_fingerprint":"76dd926e650a433110eeab8050c505a2fcb9d3c59f8ad04b69527077944c4e4e","tbs_noct_fingerprint":"154c75c086a46d1aecc3b3f10119ebe92c86dd1c60442996d570fba9529b8602","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-16 22:46:03 UTC","length":"7776000","start":"2018-03-18 22:46:03 UTC"},"version":"3"},"precert":true,"raw":"MIIFDzCCA/egAwIBAgITAPq1rnOxIICOxmVnzgRkdGF39jANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTgyMjQ2MDNaFw0xODA2MTYyMjQ2MDNaMBsxGTAXBgNVBAMTEGNvbXByZWVuY2FzYS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDlQlZPITxwYhX0XlDydKRV/4QuxQJaKN2eneQpnpf3/vfFT0VSlLiJh2sthYuA5glmuXsZJt/ccFYUVXiDqsd/0+2r+v84hSXBNscGrXPZrenFchfCElzCR5K7mdxnX3Qgj5+7YtJ1GM57leYgEMrpPqTLvnIvwbrXiSH12va1NOLFGbrkWbDGCFftc5LRzTMxtJ92n8qv8z0UNdKhAszXu50kgD3mgcv9dbTCPxrXWFKwvCTC+O3NMY0FHpLeCnDIKoG9Sx4FwWhIwKe92Kw9GMmWtmh1Z9MeQApw/STa8VqtITvSCdxBpuzuxND2gh6Eys1tcijildZZJnpsWXoNAgMBAAGjggJDMIICPzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFPsGHlfX1ts35GG0vRf6kcTZ8/QbMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAxBgNVHREEKjAoghBjb21wcmVlbmNhc2EuY29tghR3d3cuY29tcHJlZW5jYXNhLmNvbTCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQBBlPDyMJ2PHMvKSGyAADQ0fOPTYf/S/WgUArOJhayYEs+9rtDf3VAPxFg3zl0rR6uMjQ2SHq8YCpz8sxyaUkyWi9cj9DXqbCBdnpQrmi3j3V7awaDD8TTV9ZOU9TqxFaA2ECnCrHXUkY0ofJiQHfKS8Sx4ARGUoN9CEOxLfepdUtq0YtF+ym0fkz2+EhMtgM7iEZn1gnA1zBALM6ALpluHVfjUxKvLdU0I0O4UXWSGaxHt0LZ2bhNddS+SG39owdPdAYO8WsplmgTLB5Tlv9kDFd28G104tPnRJj7k5VUxnHyji63Nf388OcHEHNewrNZrPnEtySUwBHbsQ68Ywz02","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 06:38:54 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 06:09:36 UTC","ct_to_censys_at":"2018-07-30 22:10:14 UTC","index":"15562481"}},"fingerprint_sha256":"5b24f67fd19b6a7291b9ed3c23b4d3d653abad176402dc1cc52d9a39b2f3120c","metadata":{"added_at":"2018-03-19 06:38:54 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 12:25:57 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-30 00:19:26 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["teron.ru"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"407b5e35a73fc7c6c93c6a5aa1a87740546c4322"},"fingerprint_md5":"9bd663f31b6b58e4b414e77edc606f5e","fingerprint_sha1":"35c41f4b66b7e6febb40918be8ef81b2991b3608","fingerprint_sha256":"5b24f67fd19b6a7291b9ed3c23b4d3d653abad176402dc1cc52d9a39b2f3120c","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["teron.ru"],"redacted":false,"serial_number":"21790343567237086746344193461652869588494719","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"oCVgsOnuU3bHURWY6IlAxW2CIodnBwo7utVNHfSgK6oFuLVa3mkwOc/oY9bWM4fiuOJNSRNNG40RzNIdMOlniODIDGJDCGqlFjhbWTv1gejhaPMmpA+aYxFD/zRqvTzL5ptbRtBxF/LaH21buRlzX0hQbC65YVB8H0lYvR+l8Tfe1T/ErT8TPQ6/x3GmLihwD5FzYNxRxcVe3lukhbQ3sHCVmDVNszt5P97jktur5srbufPNb7PAujHLPXSJav5wqm0iLiIOy5YiDTLCJ1bsZEBM8nHFy4pC5wwcH6Ek64TTJwCs6oUE9pVn92OqpGemLqK06nG7z93VevwA1IWwTw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d47649a22239e2d2e0be3806e4117152490214a09420a70c829be670416c3b7b","subject":{"common_name":["teron.ru"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=teron.ru","subject_key_info":{"fingerprint_sha256":"8a07213bdae6b3e4d535cdec38c2fa1550eea547fd34956714faca3d9c682eaa","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"0wCPpHdAxuUzma7M8iPXOX86pDupinyubgCVvUqvrNKMu4oc09mJKJUZj2QSAJ82FTCiVqaZTzwPjaIkdLyYYza/1h0KdJ5LxnjNrYQvH1sdZJBpqWJmIYgoAa34KAw3w4t+n7+ElGfxDnSvjwTHw+RBe8kzIsIi1vvTAjc2nesi28NDb5i4fjM8zDzIiooSM5/jiYr1sFGgZUiDPKE45hqAYclV9fHhO6kDZz6LM890+eqoLutTcVGxczD2BWI0CGTjVD29xe1BKf78VBOlvAzU4RTVuHaxZ3lM95m/UXBiF944VzNoierntFhed5Efe+TtL3P9Y40ZUSeEWJBuSQ=="}},"tbs_fingerprint":"21233059ff215b21d409e59e7fbab6b0aaa6df8f3f1023d3a22ed31b7657d291","tbs_noct_fingerprint":"541ad21ed75daa78b82b31718f7a142abd6f29cdd92601dabb63edab4c6ee205","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 05:09:35 UTC","length":"7776000","start":"2018-03-19 05:09:35 UTC"},"version":"3"},"precert":true,"raw":"MIIE6TCCA9GgAwIBAgITAPokEH12d/8Rk4x460WLeMCpfzANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwNTA5MzVaFw0xODA2MTcwNTA5MzVaMBMxETAPBgNVBAMTCHRlcm9uLnJ1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wCPpHdAxuUzma7M8iPXOX86pDupinyubgCVvUqvrNKMu4oc09mJKJUZj2QSAJ82FTCiVqaZTzwPjaIkdLyYYza/1h0KdJ5LxnjNrYQvH1sdZJBpqWJmIYgoAa34KAw3w4t+n7+ElGfxDnSvjwTHw+RBe8kzIsIi1vvTAjc2nesi28NDb5i4fjM8zDzIiooSM5/jiYr1sFGgZUiDPKE45hqAYclV9fHhO6kDZz6LM890+eqoLutTcVGxczD2BWI0CGTjVD29xe1BKf78VBOlvAzU4RTVuHaxZ3lM95m/UXBiF944VzNoierntFhed5Efe+TtL3P9Y40ZUSeEWJBuSQIDAQABo4ICJTCCAiEwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRAe141pz/Hxsk8alqhqHdAVGxDIjAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wEwYDVR0RBAwwCoIIdGVyb24ucnUwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAoCVgsOnuU3bHURWY6IlAxW2CIodnBwo7utVNHfSgK6oFuLVa3mkwOc/oY9bWM4fiuOJNSRNNG40RzNIdMOlniODIDGJDCGqlFjhbWTv1gejhaPMmpA+aYxFD/zRqvTzL5ptbRtBxF/LaH21buRlzX0hQbC65YVB8H0lYvR+l8Tfe1T/ErT8TPQ6/x3GmLihwD5FzYNxRxcVe3lukhbQ3sHCVmDVNszt5P97jktur5srbufPNb7PAujHLPXSJav5wqm0iLiIOy5YiDTLCJ1bsZEBM8nHFy4pC5wwcH6Ek64TTJwCs6oUE9pVn92OqpGemLqK06nG7z93VevwA1IWwTw==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 17:39:17 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 17:05:06 UTC","ct_to_censys_at":"2018-07-30 22:11:20 UTC","index":"15584053"}},"fingerprint_sha256":"5bdd692f9d62276fe5d3a8a327bc8fba4c7857a69ba86a9cfd21970c11d8fe80","metadata":{"added_at":"2018-03-19 17:39:17 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 03:37:53 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 13:05:46 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["owmvwtdprlrdxuerbymn.v1-prober.sds.certsbridge.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"2c02df2e7df15c106150574787c98d6f3df304ad"},"fingerprint_md5":"6389afbaa738eeb50b338eb5792318f5","fingerprint_sha1":"c21f511ad890a47bd274d86b8977198ddb2a05b1","fingerprint_sha256":"5bdd692f9d62276fe5d3a8a327bc8fba4c7857a69ba86a9cfd21970c11d8fe80","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["owmvwtdprlrdxuerbymn.v1-prober.sds.certsbridge.com"],"redacted":false,"serial_number":"21837477172057248972250279744346157415069389","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"a51AloEOkGbwrjAKtfFAYpqdSwKa067JACAUqKAgQ73hCxjZwLaY/aiUACQIv0SCOeex/T/yIYOVUUBwMvDeA9BRQZNyLwfqU4/PNbHaSSJs5ZarrQAczzPTJ+PVoPpKTuS/oXoAcmzsJuhmd08ay0dnRMAPKASpkurlnvZgxxhUG0agy+IEYAKp0rq5VbsYfAKpRKLD5Q3/PxgV7U2NuBo1R7wZ484ktnzlILW3Ez0Cr3aljaL6/J2NvJcJKZ4t2h684F4BGuv10uBvEG6EuGzSfQP7AcsZrPkiClrJ7ZLPD1gfhh1+LQWDnTMcM2ZwIDf/iuNeuXdev2t2/vrkjg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"87770bbd2f57f9d1f02248c0d62a08c8032139976cb3f5b122fe91611fc0923d","subject":{"common_name":["owmvwtdprlrdxuerbymn.v1-prober.sds.certsbridge.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=owmvwtdprlrdxuerbymn.v1-prober.sds.certsbridge.com","subject_key_info":{"fingerprint_sha256":"621bd12f226f04745cc94c9bc962916f842a5705c195752053d434bc18d017fa","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vc5JyuZ3zOLi1m+PJr10cePPUAHb5SF0DgWZn4Wvuua1KlAPeSYoP1qCbDv4hAari332zgraiB4JlMQk5FX0yPGRDSlySOUAd09/ZZ9yllxr7vQM6ZdTxzuFGG5x3n/DDuRCvav+UAiUytNzbGfWgJLZcA5CYlyQWRP1PaRcP7D6+UVq6hzLGC8LDujpQFILgexiOmxDp9quiZ5LxxvuHR5te7wtYbB69IpmsGzv9OeQA+lxLDB0erNV74jBKhEflYJxyA1QMG2zl0+gZyCnND9ymBtLwckWX6iVXUKtf4Gl7iQ+0onxl93Tc6HR4DrXqNJsxKGnTZkkNw8yKcnoMw=="}},"tbs_fingerprint":"fd85e215a2d4ade469d452e9644cf97e63f17f3f7e13ebba36aa86b312c46b2e","tbs_noct_fingerprint":"536d19f719c7965e3458fe9bcddf7de224a5dcc7f33144b260bfa33d035d0952","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 16:05:06 UTC","length":"7776000","start":"2018-03-19 16:05:06 UTC"},"version":"3"},"precert":true,"raw":"MIIFPTCCBCWgAwIBAgITAPquk9+NxDLBbDJVap5aEOL2zTANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxNjA1MDZaFw0xODA2MTcxNjA1MDZaMD0xOzA5BgNVBAMTMm93bXZ3dGRwcmxyZHh1ZXJieW1uLnYxLXByb2Jlci5zZHMuY2VydHNicmlkZ2UuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvc5JyuZ3zOLi1m+PJr10cePPUAHb5SF0DgWZn4Wvuua1KlAPeSYoP1qCbDv4hAari332zgraiB4JlMQk5FX0yPGRDSlySOUAd09/ZZ9yllxr7vQM6ZdTxzuFGG5x3n/DDuRCvav+UAiUytNzbGfWgJLZcA5CYlyQWRP1PaRcP7D6+UVq6hzLGC8LDujpQFILgexiOmxDp9quiZ5LxxvuHR5te7wtYbB69IpmsGzv9OeQA+lxLDB0erNV74jBKhEflYJxyA1QMG2zl0+gZyCnND9ymBtLwckWX6iVXUKtf4Gl7iQ+0onxl93Tc6HR4DrXqNJsxKGnTZkkNw8yKcnoMwIDAQABo4ICTzCCAkswDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQsAt8uffFcEGFQV0eHyY1vPfMErTAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wPQYDVR0RBDYwNIIyb3dtdnd0ZHBybHJkeHVlcmJ5bW4udjEtcHJvYmVyLnNkcy5jZXJ0c2JyaWRnZS5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAa51AloEOkGbwrjAKtfFAYpqdSwKa067JACAUqKAgQ73hCxjZwLaY/aiUACQIv0SCOeex/T/yIYOVUUBwMvDeA9BRQZNyLwfqU4/PNbHaSSJs5ZarrQAczzPTJ+PVoPpKTuS/oXoAcmzsJuhmd08ay0dnRMAPKASpkurlnvZgxxhUG0agy+IEYAKp0rq5VbsYfAKpRKLD5Q3/PxgV7U2NuBo1R7wZ484ktnzlILW3Ez0Cr3aljaL6/J2NvJcJKZ4t2h684F4BGuv10uBvEG6EuGzSfQP7AcsZrPkiClrJ7ZLPD1gfhh1+LQWDnTMcM2ZwIDf/iuNeuXdev2t2/vrkjg==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 15:55:06 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 15:16:22 UTC","ct_to_censys_at":"2018-07-30 22:11:10 UTC","index":"15580681"}},"fingerprint_sha256":"ca3a0076b08976e9f103005a7a63b187f637c0fc669885084c1a46eaf6611757","metadata":{"added_at":"2018-03-19 15:55:06 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 00:52:59 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 09:36:18 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["api.ciitizen.net"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"0442fcb1d43cb3cebda01c9b05497a98279a00ac"},"fingerprint_md5":"f22fc424928acfcbf5e88c801f7d411c","fingerprint_sha1":"fca945bd8e691a950900274f859cb2547772e268","fingerprint_sha256":"ca3a0076b08976e9f103005a7a63b187f637c0fc669885084c1a46eaf6611757","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["api.ciitizen.net"],"redacted":false,"serial_number":"21828454667032741613710999103827973023339692","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"YLsiEUpDMs0hHQLlSVCZY0fm5xVZa9CK6m6w3a2LWvnWh9hH7icIciNBvRc5NI4pm0fN55fWA3aqZWTkNaYOzTujdkSzEmbQIr7yhWWFdQagDanmDRKuI12X5dAknOod6m0dB8Q+6mjIqyr8ri31TKYq2KPQ2SgGh9YRLCs8e/UpbiLdrr2K19g63t9WCARQyD3u5v1M2TzrpX8aOuPt4S6Wdt9Bkn/Jevkad0fe2fU7bfP6keaoB/3zXRimxfpNU31Yt/9hWPvwzZKEwASAf6LtY59o8BI4foeUXYGSumfR5ngWEFOy8f6/RfoBDrhmdG7BO5rAEVxtYCxRAKcxLQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"ac2a3bedb1c4cfb31a8c21cd2391395a369008815f3933e067a1af5a1944dd7f","subject":{"common_name":["api.ciitizen.net"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=api.ciitizen.net","subject_key_info":{"fingerprint_sha256":"2a678561b24b6df3c28aef1d9c48972aa1bf343c70bb0d3b6dd78d23b67d64c9","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vtpuvJmKMCoyPQpOLnFlJhRXnG4VBFhs4cWTPOBLnyAOyXxk9k9H7XhJU+xh9Zic6II6Ljq9Sl+wYMMfSz/s+R1YC72FKhK+27rLyZyRqGjlAF7pSQoDS5/tIn6cCQIMpZaOxuxuxFP7OuBFA3+MEdFkJJW2jB9SJZpE41DKdY5udHVdfxzb0wuDHpVYX4b80UstvTo5Vlhbp//oQtTTuhsUJEmYGPvRRX6qjjfygDgf+FUNRCsZT/LxFCTfxZ5WUoWcQ3JFRPZHUg8T83yXblMHvMVCLc9orWs+doXoe19tGJSEngL90V5fbpWmf/auD69NTBxOZa7/JQn9czuBDQ=="}},"tbs_fingerprint":"3985a632c0d07db31ecad300ccb8cc2813c548e59586e808d37f236ed6b1e0fb","tbs_noct_fingerprint":"f14e5a40e2f40c969cc41ea89d5fe722015d808012f147390500585993db8391","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 14:16:21 UTC","length":"7776000","start":"2018-03-19 14:16:21 UTC"},"version":"3"},"precert":true,"raw":"MIIE+TCCA+GgAwIBAgITAPqUEBhLNEtSnMYmiy7bfcoUrDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxNDE2MjFaFw0xODA2MTcxNDE2MjFaMBsxGTAXBgNVBAMTEGFwaS5jaWl0aXplbi5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+2m68mYowKjI9Ck4ucWUmFFecbhUEWGzhxZM84EufIA7JfGT2T0fteElT7GH1mJzogjouOr1KX7Bgwx9LP+z5HVgLvYUqEr7busvJnJGoaOUAXulJCgNLn+0ifpwJAgyllo7G7G7EU/s64EUDf4wR0WQklbaMH1IlmkTjUMp1jm50dV1/HNvTC4MelVhfhvzRSy29OjlWWFun/+hC1NO6GxQkSZgY+9FFfqqON/KAOB/4VQ1EKxlP8vEUJN/FnlZShZxDckVE9kdSDxPzfJduUwe8xUItz2itaz52heh7X20YlISeAv3RXl9ulaZ/9q4Pr01MHE5lrv8lCf1zO4ENAgMBAAGjggItMIICKTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFARC/LHUPLPOvaAcmwVJepgnmgCsMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAbBgNVHREEFDASghBhcGkuY2lpdGl6ZW4ubmV0MIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAGC7IhFKQzLNIR0C5UlQmWNH5ucVWWvQiupusN2ti1r51ofYR+4nCHIjQb0XOTSOKZtHzeeX1gN2qmVk5DWmDs07o3ZEsxJm0CK+8oVlhXUGoA2p5g0SriNdl+XQJJzqHeptHQfEPupoyKsq/K4t9UymKtij0NkoBofWESwrPHv1KW4i3a69itfYOt7fVggEUMg97ub9TNk866V/Gjrj7eEulnbfQZJ/yXr5GndH3tn1O23z+pHmqAf9810YpsX6TVN9WLf/YVj78M2ShMAEgH+i7WOfaPASOH6HlF2Bkrpn0eZ4FhBTsvH+v0X6AQ64ZnRuwTuawBFcbWAsUQCnMS0=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 03:39:03 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 03:08:29 UTC","ct_to_censys_at":"2018-07-30 22:09:59 UTC","index":"15557177"}},"fingerprint_sha256":"3df209c481dc9588d26a1bb88c41a11caa82f5677bb55d14c5af01b964855c00","metadata":{"added_at":"2018-03-19 03:39:03 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 17:12:36 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 22:19:06 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["content.properm.ru"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"54aa1f9328f848deb4ea33ebedebb192f23bc269"},"fingerprint_md5":"ddffcaf94dbb88441879b7c74bb2f38d","fingerprint_sha1":"bf7c3f46a834c74ce5347e8406079c6fcfc36f8c","fingerprint_sha256":"3df209c481dc9588d26a1bb88c41a11caa82f5677bb55d14c5af01b964855c00","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["content.properm.ru"],"redacted":false,"serial_number":"21812972198721839053990170571958901605135413","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"Cxw0mITJBbn0dcewgb9Yxi8D1VfCP4+sc1KLRDhvwYyPiV5SwFxhGENlebl2RqyFiKzkrRfUq888B8HA2IAwNlIqQa0kc2GYMAZ19ccspueXVkmarADnbmQhmTQi5WIUdyTCDlcJjxKgjV2t4ez4tYdU+63BFDhtqU7uhHQZagZmW46/fuEW0vjPVPC1zsT3YKPK7bRU6ot+Ent/vJsQwSW8chKutdLfMlsw13BtIe1nLe+FSBz++xmtjrmuDu0TGYJIdGXQiRvofAc2ieNkPrnBweL3Yew3iGWBGPy35oB4t0y5PPdx79FbpxYW0ezigrRNvzzI4ivMzTYF+TEoOA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"2f772777b355a110a2807fbf45177551492609be8acb5920bb3809f6bceaec17","subject":{"common_name":["content.properm.ru"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=content.properm.ru","subject_key_info":{"fingerprint_sha256":"a364d09c66be96d0019990dc9c4c2611a79d47e4885b3446532d69f2bd39f3c8","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"x58egSf97ZYDggQlTNL/GQzwtZ1SO4dTgvROT6JBhiZE33Jc7VxGd6q7DGkivL4YG19pCPPI83KNSFDR17WUnhHtuTtq4zEct/hGAaNpDM0ELm1g6koie26vKnbg9UwtR3jGsXQm4hT2QVv/tatsO4S1ZTjQbJaZplLRaE8EjNy/bwEhGS18/1PzaWAsLdnIolJBwTdyeRK1I8Rk+ZJPlUW20+9G/Bch82yRklQA4PkYkOLAZABEzb01HfIosaeByCjsgOOSTJdRqu/hS0i8fROfbBk7dYAnfX+EPs3qN/N7+VRRmXXZyd9mU+d5huqls7lBFIY67HhTFsMPDvaHGQ=="}},"tbs_fingerprint":"19c35599859cbbb872b22bf8620b59c9cf0c26dc650c6f585e4ede8c49446aed","tbs_noct_fingerprint":"d141cf4a6f1058bb6ec802128f5150c58ca221aad37baf1725c7b67d82ce5a11","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 02:08:28 UTC","length":"7776000","start":"2018-03-19 02:08:28 UTC"},"version":"3"},"precert":true,"raw":"MIIE/TCCA+WgAwIBAgITAPpmkGFcR5YvifXliIogOHP0NTANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwMjA4MjhaFw0xODA2MTcwMjA4MjhaMB0xGzAZBgNVBAMTEmNvbnRlbnQucHJvcGVybS5ydTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMefHoEn/e2WA4IEJUzS/xkM8LWdUjuHU4L0Tk+iQYYmRN9yXO1cRnequwxpIry+GBtfaQjzyPNyjUhQ0de1lJ4R7bk7auMxHLf4RgGjaQzNBC5tYOpKInturyp24PVMLUd4xrF0JuIU9kFb/7WrbDuEtWU40GyWmaZS0WhPBIzcv28BIRktfP9T82lgLC3ZyKJSQcE3cnkStSPEZPmST5VFttPvRvwXIfNskZJUAOD5GJDiwGQARM29NR3yKLGngcgo7IDjkkyXUarv4UtIvH0Tn2wZO3WAJ31/hD7N6jfze/lUUZl12cnfZlPneYbqpbO5QRSGOux4UxbDDw72hxkCAwEAAaOCAi8wggIrMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUVKofkyj4SN606jPr7euxkvI7wmkwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMB0GA1UdEQQWMBSCEmNvbnRlbnQucHJvcGVybS5ydTCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQALHDSYhMkFufR1x7CBv1jGLwPVV8I/j6xzUotEOG/BjI+JXlLAXGEYQ2V5uXZGrIWIrOStF9SrzzwHwcDYgDA2UipBrSRzYZgwBnX1xyym55dWSZqsAOduZCGZNCLlYhR3JMIOVwmPEqCNXa3h7Pi1h1T7rcEUOG2pTu6EdBlqBmZbjr9+4RbS+M9U8LXOxPdgo8rttFTqi34Se3+8mxDBJbxyEq610t8yWzDXcG0h7Wct74VIHP77Ga2Oua4O7RMZgkh0ZdCJG+h8BzaJ42Q+ucHB4vdh7DeIZYEY/LfmgHi3TLk893Hv0VunFhbR7OKCtE2/PMjiK8zNNgX5MSg4","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 10:39:22 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 10:03:19 UTC","ct_to_censys_at":"2018-07-30 22:10:39 UTC","index":"15570531"}},"fingerprint_sha256":"0ed861f0d931d33ed56468329ebdff6b2273d07bb28365c3aa5b3c114b7d62a5","metadata":{"added_at":"2018-03-19 10:39:22 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 14:06:13 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-30 04:15:35 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["design61.horoshop.com.ua","www.design61.horoshop.com.ua"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"407f753551f86b4ea233f88e93f0862cd0f5393e"},"fingerprint_md5":"6b87a325654a2202a6ef1f5655bdfc90","fingerprint_sha1":"813497f4d06aca8f4441d6029075ac77edcdec63","fingerprint_sha256":"0ed861f0d931d33ed56468329ebdff6b2273d07bb28365c3aa5b3c114b7d62a5","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["www.design61.horoshop.com.ua","design61.horoshop.com.ua"],"redacted":false,"serial_number":"21828968992925258611925183546013795727920595","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"x/w0ZMkYm8wh6tD8tJF9q7XARLOp1nH1cMPd9v2Ym0i6KPvh/mYWj30AlE1HvbektCVvbguLarIxK3hyrAivjKNYYU//dB2lmPBe1P0SgZVVxCj0iOuKzEV63Crc0ay5eJw7A5R/I0ke3U1bwtr1neUkTDw+SnPpjXuhEFD8VabX7E3QhFW8DNrOic3u0Ey3a0FGot0Cv+p/tIx7ZCxTROj//DDGYKHB/U3l8dvUKYvsTSG1Xc6xqGEINBh718xZ5SEzJWFVx+llptCzB18yrMl4wGkvTuhxAl2edwxO3uL0In7VVdxrK5KRPZAxwffMJyiJowAPNR4l3Hj5YWGkKA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"3ebf593e12a7704fedbf0335377a961727d1d5c64e657f932d24e18040585ce3","subject":{"common_name":["design61.horoshop.com.ua"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=design61.horoshop.com.ua","subject_key_info":{"fingerprint_sha256":"bd610e6af8ad895ba48f93d6f2a68fd6dea318ca9b3a26046f0355850b6736c6","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"5s/M9gOLTNeEU7x78axFH1qLjAvgFDbDKqQ1GIsAlD5MHHeJSHtXhjm1Cy+KLPwOQf3UG/M8lyUDjOK/s4Kx90uJEMkCWnZYDedsw5WX8LxmQkKMim9+voC6JDXf87O+TzT5piU0hjI+21xRzihiT8MpN+3vc4Qn/Du6wALui1V/h8SBRhgUTD7bnjRON4sR9IW8Rivn5+gGlD5Sd+FEpKvWB6NF59LCgn/wjF3pObeGAfR6eFxO7vQ80XlsUGubwUNJu+7SsEUh73bTgfXt9Wq7Zaz06qvOEYu3Xk8G/VsIu5adAzA/+HeDDLXxD3Bzwf80shgq7LV4ttmX/RP0Yw=="}},"tbs_fingerprint":"f60f388b1d9d182780de39e03d6451350efb9df521c4920c72ae876b0aa13bde","tbs_noct_fingerprint":"de665a7933eadd905a286ebd60e395c2981720ef83dc65ed9b0024a31efb7929","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 09:03:18 UTC","length":"7776000","start":"2018-03-19 09:03:18 UTC"},"version":"3"},"precert":true,"raw":"MIIFJzCCBA+gAwIBAgITAPqVkwfbhq/v3jov+Qg75G9N0zANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwOTAzMThaFw0xODA2MTcwOTAzMThaMCMxITAfBgNVBAMTGGRlc2lnbjYxLmhvcm9zaG9wLmNvbS51YTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAObPzPYDi0zXhFO8e/GsRR9ai4wL4BQ2wyqkNRiLAJQ+TBx3iUh7V4Y5tQsviiz8DkH91BvzPJclA4ziv7OCsfdLiRDJAlp2WA3nbMOVl/C8ZkJCjIpvfr6AuiQ13/Ozvk80+aYlNIYyPttcUc4oYk/DKTft73OEJ/w7usAC7otVf4fEgUYYFEw+2540TjeLEfSFvEYr5+foBpQ+UnfhRKSr1gejRefSwoJ/8Ixd6Tm3hgH0enhcTu70PNF5bFBrm8FDSbvu0rBFIe9204H17fVqu2Ws9OqrzhGLt15PBv1bCLuWnQMwP/h3gwy18Q9wc8H/NLIYKuy1eLbZl/0T9GMCAwEAAaOCAlMwggJPMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUQH91NVH4a06iM/iOk/CGLND1OT4wHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMEEGA1UdEQQ6MDiCGGRlc2lnbjYxLmhvcm9zaG9wLmNvbS51YYIcd3d3LmRlc2lnbjYxLmhvcm9zaG9wLmNvbS51YTCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQDH/DRkyRibzCHq0Py0kX2rtcBEs6nWcfVww932/ZibSLoo++H+ZhaPfQCUTUe9t6S0JW9uC4tqsjEreHKsCK+Mo1hhT/90HaWY8F7U/RKBlVXEKPSI64rMRXrcKtzRrLl4nDsDlH8jSR7dTVvC2vWd5SRMPD5Kc+mNe6EQUPxVptfsTdCEVbwM2s6Jze7QTLdrQUai3QK/6n+0jHtkLFNE6P/8MMZgocH9TeXx29Qpi+xNIbVdzrGoYQg0GHvXzFnlITMlYVXH6WWm0LMHXzKsyXjAaS9O6HECXZ53DE7e4vQiftVV3GsrkpE9kDHB98wnKImjAA81HiXcePlhYaQo","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 01:40:28 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 01:09:22 UTC","ct_to_censys_at":"2018-07-30 22:09:41 UTC","index":"15552111"}},"fingerprint_sha256":"8913a9eb96d09e7cbede5162d415441af2598a48be7301db4c09371651c4d246","metadata":{"added_at":"2018-03-19 01:40:28 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 06:20:18 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 08:50:44 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["m.telecombis.ru","sup.telecombis.ru"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"e5deeacb4a5153a849f20a2d6721fe2af1608aac"},"fingerprint_md5":"35b92b96545695e71bb812d8d04c0502","fingerprint_sha1":"93db4a972de647bd47cd1aa237dd61c2f15e00b2","fingerprint_sha256":"8913a9eb96d09e7cbede5162d415441af2598a48be7301db4c09371651c4d246","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["sup.telecombis.ru","m.telecombis.ru"],"redacted":false,"serial_number":"21788718239742145964667571629326385529267829","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"4+2DlYhT41KX/b5mmkd822PnTEtgaVQxBHcRmBD/AmQeuIiQYY5b4P3MaaZGlBj4IiXSvSEHkKwW7w+lh57dsJVQCKUu4pB1ISUQ5lgiJB0m2ESKEpxLlPiJIIP/V8kMsemvJI6uhJhKQP6DBzLogeE2ByRJo37jo0jfeLOo+qFIwPn278SSyW7+KBLkEDbdbtDX8Upr5hLajKGU4Wbf0S0jH4mF+Lp0n+WkQv3fnwbOfDuq/62ozJ40ulDzWS2KkaL+MIqOAAFXNafc5SLA9Gj+vDw2SD/YMWbaqZkMj3xOJpQMjV0j/BWBbWCyL5L0+fnUSG2YO36vMvQxSAnXqA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"592d2b3185d06763e79beb5d377eab676e2b784eec97b0c5fcf64dd73bf0e092","subject":{"common_name":["sup.telecombis.ru"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=sup.telecombis.ru","subject_key_info":{"fingerprint_sha256":"cab86aa338cc4c9b5c8fa3a098b1a90cf5fbb92b124848bf2a75a5780c050a77","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"yQkxJEmPdLDnU/YrZDsNWpyjnrftVBJfIyiWM4Ltkm6tGB3k2SxHxmPCzSFeabtWmoo5rPEUi74evzpSB4yzYJEGw7wNW/9n5TmLa143Y65bA5IE1mQiL9iC8QGwjU95G4RZgV+37vjdY9B6RTMJWQVFdKySd6Y9g6vurn5Gm0+RHPV8lOCkMi/8LJkyYKPEW/FpA+p9xtjWEvi9CFHLMaLJPfUGBG76LYmbsLsox5ghwe/dWDRZZiHFAKyhGCMemMZT4QlL92iTnruE/UUGJh2F3nYav0jVlPQJK2JQNKPwedEXn1KpTI84jTBNNds2KNRYIcTmIkhWdP0+HhnGjw=="}},"tbs_fingerprint":"4e7d4a0972fe21a5d13c056fa46d6ab78c6df7e7ba81b1de9ccfa6c7560e9e3f","tbs_noct_fingerprint":"a93247798285c1400da8f8b1b83373a802d93ed878a507cee527260e01ca97eb","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 00:09:22 UTC","length":"7776000","start":"2018-03-19 00:09:22 UTC"},"version":"3"},"precert":true,"raw":"MIIFDDCCA/SgAwIBAgITAPofSbrGCPaHzMaDkw/B/CymdTANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwMDA5MjJaFw0xODA2MTcwMDA5MjJaMBwxGjAYBgNVBAMTEXN1cC50ZWxlY29tYmlzLnJ1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyQkxJEmPdLDnU/YrZDsNWpyjnrftVBJfIyiWM4Ltkm6tGB3k2SxHxmPCzSFeabtWmoo5rPEUi74evzpSB4yzYJEGw7wNW/9n5TmLa143Y65bA5IE1mQiL9iC8QGwjU95G4RZgV+37vjdY9B6RTMJWQVFdKySd6Y9g6vurn5Gm0+RHPV8lOCkMi/8LJkyYKPEW/FpA+p9xtjWEvi9CFHLMaLJPfUGBG76LYmbsLsox5ghwe/dWDRZZiHFAKyhGCMemMZT4QlL92iTnruE/UUGJh2F3nYav0jVlPQJK2JQNKPwedEXn1KpTI84jTBNNds2KNRYIcTmIkhWdP0+HhnGjwIDAQABo4ICPzCCAjswDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTl3urLSlFTqEnyCi1nIf4q8WCKrDAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wLQYDVR0RBCYwJIIPbS50ZWxlY29tYmlzLnJ1ghFzdXAudGVsZWNvbWJpcy5ydTCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQDj7YOViFPjUpf9vmaaR3zbY+dMS2BpVDEEdxGYEP8CZB64iJBhjlvg/cxppkaUGPgiJdK9IQeQrBbvD6WHnt2wlVAIpS7ikHUhJRDmWCIkHSbYRIoSnEuU+Ikgg/9XyQyx6a8kjq6EmEpA/oMHMuiB4TYHJEmjfuOjSN94s6j6oUjA+fbvxJLJbv4oEuQQNt1u0NfxSmvmEtqMoZThZt/RLSMfiYX4unSf5aRC/d+fBs58O6r/rajMnjS6UPNZLYqRov4wio4AAVc1p9zlIsD0aP68PDZIP9gxZtqpmQyPfE4mlAyNXSP8FYFtYLIvkvT5+dRIbZg7fq8y9DFICdeo","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 23:24:29 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 22:54:11 UTC","ct_to_censys_at":"2018-07-30 22:11:48 UTC","index":"15593213"}},"fingerprint_sha256":"4b87866f65e085d68f2a37e814bc9f6541be0df9aa4de95da626bdd76b1a2557","metadata":{"added_at":"2018-03-19 23:24:29 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 15:37:09 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-30 06:11:33 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["remote.greuter.nl"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"9bf8309599e486bc8efad940cd389cd7e617103e"},"fingerprint_md5":"25d0607f065fc5913aad11909a98b085","fingerprint_sha1":"46c3c3d034afab0820cb87f33bf3f2bdbcf49964","fingerprint_sha256":"4b87866f65e085d68f2a37e814bc9f6541be0df9aa4de95da626bdd76b1a2557","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["remote.greuter.nl"],"redacted":false,"serial_number":"21821517278419329054628106042547996461656626","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"WA6S5Wl8KkeDWO9SP9Ysu0RO1bYiCHw5pyzp/QYyb80bg6urhNtNe6HBm3FP7jlDpovAQvNnA63onZAnHT9DaSbBi9YaNLdVnWQEjmL+JPNw6ScLAXOFiJ3PXPX2ZE1bo0e+0DZqn3BQWfzjlmhQquslBtWaixU95hNVSEb0u7v8t7AQtJ0b/de10Wxbnc+dXIZlPxxdYuIskqwbRXc71WZORj3gRKC+p7b0mkDOgh32bNeTreCAnOXkx7Jx6cgPZReloU0+tGsXr9eiv/+RxTeV87OfB18c6D1FZXkineEneI65r3+RhTAOHXTNMI5BzJmXB3VMFX0qd/aPWgwqxw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"8bfa42296a4083565bd1220680b64c859a34b0cbd31ab08a9bd2be5d83ebf316","subject":{"common_name":["remote.greuter.nl"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=remote.greuter.nl","subject_key_info":{"fingerprint_sha256":"8098622324198c845a792e6629038aecf17f472a7abfb2db64285306b32a6b3a","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"36aXQLhd4pyEPmG3fA2SZc3//fm6wYeDhQQAU9f4x3owRoo/1FYEVWEKntrhgpKd/9HVaSQah1q0yZGDRibt4txlVCwS8ypjD82+4Il3IkT2M7tgPGHg1hGzCzxxXpkzfgQq1U2rbP2Rte7mSTxesE3ha2GLjawogZI1vPjnNzA0ZoK+Z48gdcxZP/6PvZvPuCDNE+p1Qdlot1Jf3h51wA8cesBPCBbyuzV5TuZDr9kq926Y/foz72vBEoyTXc0MItwGimKCe4vrrsGxp8FO7aw04djhDlM6aEbyUXP/5kN67gkaHzsmLeOIkPC54D/cd1e838E8YtH5xXwl3+dlEw=="}},"tbs_fingerprint":"5104c1ea8970aae0a636eae9a886dd0ecf7616e09eda745e6be235322c86d04c","tbs_noct_fingerprint":"9a2622c6fb9a1165948ad6339e60b5d91dba155788b98074787db7a5d56015ed","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 21:54:11 UTC","length":"7776000","start":"2018-03-19 21:54:11 UTC"},"version":"3"},"precert":true,"raw":"MIIE+zCCA+OgAwIBAgITAPp/rPvY3SYqr+pe5bxvtOhqMjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkyMTU0MTFaFw0xODA2MTcyMTU0MTFaMBwxGjAYBgNVBAMTEXJlbW90ZS5ncmV1dGVyLm5sMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA36aXQLhd4pyEPmG3fA2SZc3//fm6wYeDhQQAU9f4x3owRoo/1FYEVWEKntrhgpKd/9HVaSQah1q0yZGDRibt4txlVCwS8ypjD82+4Il3IkT2M7tgPGHg1hGzCzxxXpkzfgQq1U2rbP2Rte7mSTxesE3ha2GLjawogZI1vPjnNzA0ZoK+Z48gdcxZP/6PvZvPuCDNE+p1Qdlot1Jf3h51wA8cesBPCBbyuzV5TuZDr9kq926Y/foz72vBEoyTXc0MItwGimKCe4vrrsGxp8FO7aw04djhDlM6aEbyUXP/5kN67gkaHzsmLeOIkPC54D/cd1e838E8YtH5xXwl3+dlEwIDAQABo4ICLjCCAiowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSb+DCVmeSGvI762UDNOJzX5hcQPjAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wHAYDVR0RBBUwE4IRcmVtb3RlLmdyZXV0ZXIubmwwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAWA6S5Wl8KkeDWO9SP9Ysu0RO1bYiCHw5pyzp/QYyb80bg6urhNtNe6HBm3FP7jlDpovAQvNnA63onZAnHT9DaSbBi9YaNLdVnWQEjmL+JPNw6ScLAXOFiJ3PXPX2ZE1bo0e+0DZqn3BQWfzjlmhQquslBtWaixU95hNVSEb0u7v8t7AQtJ0b/de10Wxbnc+dXIZlPxxdYuIskqwbRXc71WZORj3gRKC+p7b0mkDOgh32bNeTreCAnOXkx7Jx6cgPZReloU0+tGsXr9eiv/+RxTeV87OfB18c6D1FZXkineEneI65r3+RhTAOHXTNMI5BzJmXB3VMFX0qd/aPWgwqxw==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 16:53:32 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 16:22:20 UTC","ct_to_censys_at":"2018-07-30 22:11:15 UTC","index":"15582944"}},"fingerprint_sha256":"b65e97eefd549323a4cd9676c6d9fe04a89e5e9e704e0c43e284f4d992676572","metadata":{"added_at":"2018-03-19 16:53:32 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 06:53:48 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 09:30:02 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["internet.properm.ru"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"120d42fa1fe0feb437eedf004c23b54332f49db9"},"fingerprint_md5":"cbf76d342e0b0ba1039f96498f8ce180","fingerprint_sha1":"142d2f22010415f860e200546c75746c4aac672b","fingerprint_sha256":"b65e97eefd549323a4cd9676c6d9fe04a89e5e9e704e0c43e284f4d992676572","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["internet.properm.ru"],"redacted":false,"serial_number":"21843230885546798718306867375979659236190558","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"xdImkee8VsWg1vyuZsg4YAYKUL3VDpJ9rGdd4iWBgKzN+iBEAbU2cAeEQtb/Y5uSTAXbSYJ9NKbAxi2a5+gtchUze7FO0/dSOxVx+FhIa3rBpPh6gKHUGoTkD5UxfFLMUIRK30VuPWr2J8c+iseRpL5KOy0KNjGFCoA/yOFIPhqep1cXOqYGx5cZ77ZY7maQr7i36EPqj7jeT0Cn/sMNPLqx8Rr52u0Vn7gyJBMXo1MUt9rbxwbWYsYwraAap3c+/w6pXsKF9aI44hbi1kN2cn3oko0bGnT5WEQJAlLwVR1mNhLJ+J1E8tm61JdYylafg+uLSwh/XtJllqw2isd4PA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d37c1844aa489e6ab099c8963455fbda2d87a0266854979817d7c5e063ded6b2","subject":{"common_name":["internet.properm.ru"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=internet.properm.ru","subject_key_info":{"fingerprint_sha256":"9a34c017078db9a4cf5e3d6d9838065d08e8d7ddeb86b8c0a6e52776944f9aad","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"44wi+qOEdJ74NgcaBvj3GKCy5eoFFLvNUrSaYedS3RbNoPlCLMtL1pRACZXdBBV/zC5MBg/x9HkwEGR5Ld95fBVk3bz8ouEBf86CCwkAMG0j31p3i5xieervJ+mIPmcrZOt+3U3mgTVlw3Tv6v0AFotOEESvgx2BqXzDzPbF+A4XFf+Aek7WaeVRBHZ3x0+PRhI+MONwzuNZX6rscn4taZcbUY/7psbxWfK+yCtf9N1z+rWite1/2iNriV1B3BIxH9X2SMBGwYCLVYqoqTiYnWeHN/kMTbKRf8eQ4OrFnQKdHeSpAqdcqJCTGJCzqNkrvUzOFeOYtZY7QayDmv1uGw=="}},"tbs_fingerprint":"71cc6ec760ed0028d99b799faf9ccb795a752e8fbe7ecdaa05dedb95809c4adb","tbs_noct_fingerprint":"96b19842a0e1c1cad9a46587d71cf7c9b94ab705a506c46b4f563c5eb254ec36","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 15:22:20 UTC","length":"7776000","start":"2018-03-19 15:22:20 UTC"},"version":"3"},"precert":true,"raw":"MIIE/zCCA+egAwIBAgITAPq/fHx2wCzaw1+dnlPZUHepXjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxNTIyMjBaFw0xODA2MTcxNTIyMjBaMB4xHDAaBgNVBAMTE2ludGVybmV0LnByb3Blcm0ucnUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDjjCL6o4R0nvg2BxoG+PcYoLLl6gUUu81StJph51LdFs2g+UIsy0vWlEAJld0EFX/MLkwGD/H0eTAQZHkt33l8FWTdvPyi4QF/zoILCQAwbSPfWneLnGJ56u8n6Yg+Zytk637dTeaBNWXDdO/q/QAWi04QRK+DHYGpfMPM9sX4DhcV/4B6TtZp5VEEdnfHT49GEj4w43DO41lfquxyfi1plxtRj/umxvFZ8r7IK1/03XP6taK17X/aI2uJXUHcEjEf1fZIwEbBgItViqipOJidZ4c3+QxNspF/x5Dg6sWdAp0d5KkCp1yokJMYkLOo2Su9TM4V45i1ljtBrIOa/W4bAgMBAAGjggIwMIICLDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFBINQvof4P60N+7fAEwjtUMy9J25MB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAeBgNVHREEFzAVghNpbnRlcm5ldC5wcm9wZXJtLnJ1MIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAMXSJpHnvFbFoNb8rmbIOGAGClC91Q6SfaxnXeIlgYCszfogRAG1NnAHhELW/2ObkkwF20mCfTSmwMYtmufoLXIVM3uxTtP3UjsVcfhYSGt6waT4eoCh1BqE5A+VMXxSzFCESt9Fbj1q9ifHPorHkaS+SjstCjYxhQqAP8jhSD4anqdXFzqmBseXGe+2WO5mkK+4t+hD6o+43k9Ap/7DDTy6sfEa+drtFZ+4MiQTF6NTFLfa28cG1mLGMK2gGqd3Pv8OqV7ChfWiOOIW4tZDdnJ96JKNGxp0+VhECQJS8FUdZjYSyfidRPLZutSXWMpWn4Pri0sIf17SZZasNorHeDw=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 04:40:36 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 04:01:38 UTC","ct_to_censys_at":"2018-07-30 22:10:02 UTC","index":"15558658"}},"fingerprint_sha256":"85b337b0bcc4699d45614bbe5107ab449e235ed2b9548cc6333deaf31c4a0c2d","metadata":{"added_at":"2018-03-19 04:40:36 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 03:27:14 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 12:53:18 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["xn--bp8h.2ff.us","xn--mj8hom.2ff.us"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"a45126e0c9220a7b75cb707bbfdb1c1be09de5a5"},"fingerprint_md5":"98e680208925ae9ab43dbd5ac46f6613","fingerprint_sha1":"5f7dc86ba2ab0dfc2e215dd4e471a1a49afedc6d","fingerprint_sha256":"85b337b0bcc4699d45614bbe5107ab449e235ed2b9548cc6333deaf31c4a0c2d","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["xn--mj8hom.2ff.us","xn--bp8h.2ff.us"],"redacted":false,"serial_number":"21836404654603587807572015769472135923220614","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"z/3fegmnGj/u1xUJh4Rw+ZfGjZbD3VcLiOImXOO9JIrZr5Rajnh/haBW60tfZispyykbrsm6mSyXen/uq2tJtoQHLwq9BkKK/wqnPSmJSKXd7r+0W0YLMxHCS/ewbB3JqtKyoah6meUKVPZZDsM43z8wQR95QZGDDxoL+s71kkEHmiCbwz3fcvy0i0sLWXuR2/ZUp2Qe+LqMthbqXKoHiUABi0pSjHMmeyr9umAjVOpKor6HcWTETAtHVmw/YwzMn/PvomgSNt4CqaBXsrqLEiojnW6Tp5KgWkJDHeBAgofxLGlAOh6rZzbo9WJ7NmXUZvWvXfyg5RtEd2vEhr/2Ng=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d75507cd095f0bd041b9bf3a909a884a08a44893de24171e5196661553637ef7","subject":{"common_name":["xn--mj8hom.2ff.us"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=xn--mj8hom.2ff.us","subject_key_info":{"fingerprint_sha256":"dc89bddf967ba2744443af7186a0447519444cd00eff4eed9441c3ee539eacaf","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"3vpDaHOjoGKcO7AcwwLk4MbKSo4ROv2KAzB22bgmyVjJ6rKhcYDtp5GCVFzKVkKDzd/Yy5Es52eueODULiuvCw2XWWLAAhoqdIN2OizEdi+XqWHVEflXpIPWRjWvDHxS+X4rdK5+wAZb5CfTDnPmkDlOpLXMac+9psJeHBuW68TbNpAKaCT4oK2AXodpVXsZbFKJYziIbzlFaDkEtBKZ0wjxEEgjWVHPDflla97CKF/qD7tKjz+u88x8dXz+ms2jF2StFH+/EIDAZkWT3UIGmwceMyxjTZgUsUsTzB358VzjSbWRzxPNGc4ZGTVPZRkVUSS1ukV3J3NwXkWqTDc43h+Xl8lpx17qpRLv1+S1ba5Et1stwmJ39yVnnE2N3xGTQZMrM3KJ4gJmf6hqJ95C293uzvj0NHS5QKrj1y138wlj32s8q6DeW6J72ODHzWvaWTp+Tp7QajEVWtOw9pIaB7VI8J7KBYWEEgXrhMKaF/KP1RES0B128gql0V0NEhx7x32+74Cm7+W/Mb/F02brkW7YeHZb9tTK3s+pyv+xqKIOaEOV+08x8TNrMiylDnSEWfSJPl4tOKLpIH75YlwW+q0dIxwtW0s52rM3pSVPH601p1QXmwI1dxtK/+YQ35qSNN525F8B3CZemyBlGc9VtgxIOZtspCLm2tmjXl6MkI8="}},"tbs_fingerprint":"6aa558edd61eb0e1828de21e178fc2f7bbbfbe9e57df13a31533dac23838a97a","tbs_noct_fingerprint":"ec5ad10599356bae032e22f30d469402660cf8d3ec26d2f16f678f04904db4b8","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 03:01:37 UTC","length":"7776000","start":"2018-03-19 03:01:37 UTC"},"version":"3"},"precert":true,"raw":"MIIGDDCCBPSgAwIBAgITAPqrbQA0rm45v/ID/uvIKZ/AhjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwMzAxMzdaFw0xODA2MTcwMzAxMzdaMBwxGjAYBgNVBAMTEXhuLS1tajhob20uMmZmLnVzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3vpDaHOjoGKcO7AcwwLk4MbKSo4ROv2KAzB22bgmyVjJ6rKhcYDtp5GCVFzKVkKDzd/Yy5Es52eueODULiuvCw2XWWLAAhoqdIN2OizEdi+XqWHVEflXpIPWRjWvDHxS+X4rdK5+wAZb5CfTDnPmkDlOpLXMac+9psJeHBuW68TbNpAKaCT4oK2AXodpVXsZbFKJYziIbzlFaDkEtBKZ0wjxEEgjWVHPDflla97CKF/qD7tKjz+u88x8dXz+ms2jF2StFH+/EIDAZkWT3UIGmwceMyxjTZgUsUsTzB358VzjSbWRzxPNGc4ZGTVPZRkVUSS1ukV3J3NwXkWqTDc43h+Xl8lpx17qpRLv1+S1ba5Et1stwmJ39yVnnE2N3xGTQZMrM3KJ4gJmf6hqJ95C293uzvj0NHS5QKrj1y138wlj32s8q6DeW6J72ODHzWvaWTp+Tp7QajEVWtOw9pIaB7VI8J7KBYWEEgXrhMKaF/KP1RES0B128gql0V0NEhx7x32+74Cm7+W/Mb/F02brkW7YeHZb9tTK3s+pyv+xqKIOaEOV+08x8TNrMiylDnSEWfSJPl4tOKLpIH75YlwW+q0dIxwtW0s52rM3pSVPH601p1QXmwI1dxtK/+YQ35qSNN525F8B3CZemyBlGc9VtgxIOZtspCLm2tmjXl6MkI8CAwEAAaOCAj8wggI7MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUpFEm4MkiCnt1y3B7v9scG+Cd5aUwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMC0GA1UdEQQmMCSCD3huLS1icDhoLjJmZi51c4IReG4tLW1qOGhvbS4yZmYudXMwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAz/3fegmnGj/u1xUJh4Rw+ZfGjZbD3VcLiOImXOO9JIrZr5Rajnh/haBW60tfZispyykbrsm6mSyXen/uq2tJtoQHLwq9BkKK/wqnPSmJSKXd7r+0W0YLMxHCS/ewbB3JqtKyoah6meUKVPZZDsM43z8wQR95QZGDDxoL+s71kkEHmiCbwz3fcvy0i0sLWXuR2/ZUp2Qe+LqMthbqXKoHiUABi0pSjHMmeyr9umAjVOpKor6HcWTETAtHVmw/YwzMn/PvomgSNt4CqaBXsrqLEiojnW6Tp5KgWkJDHeBAgofxLGlAOh6rZzbo9WJ7NmXUZvWvXfyg5RtEd2vEhr/2Ng==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 14:39:30 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 14:09:52 UTC","ct_to_censys_at":"2018-07-30 22:11:04 UTC","index":"15578332"}},"fingerprint_sha256":"a4ee928c471bf73aba1599f193ec9f1f2a7b815e23cff2883e0fd8604cf06972","metadata":{"added_at":"2018-03-19 14:39:30 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 00:47:44 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 09:29:25 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["gomapen-biyori.ddns.net"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"1557a17bbad15e70f7bb9742e175eafe324e9005"},"fingerprint_md5":"24b9c621db55ec292be409452a0c9984","fingerprint_sha1":"e36c3861921a322b8cff7a351bb087c8bc1215e5","fingerprint_sha256":"a4ee928c471bf73aba1599f193ec9f1f2a7b815e23cff2883e0fd8604cf06972","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["gomapen-biyori.ddns.net"],"redacted":false,"serial_number":"21820672369438383815280665126819496883002090","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"2RHw+Am/7LrZHIYpXlFYRnC9uxk/YNO2RDZAeSo63MOEdKsWOJUvFB2ATnaA4SRqdBHmeFrLGfFHhR2HBdYZ05nMLvQcJ0q/95yJYwxyhXNMz1uk+Xr8x+6tJ4isN3sJyDqHTKN8+33JkxKoWDxTHTjw1I28Wx9G8CzeMfG8H2O2NcnnBYx0VGjn+HofnbpsB+W7yTCfrQ/psNGkMAos6OOf3NpN/AxAqrmkQzElPkGBpxPomI9OQ6v/WkQH/N7Y7L1WqYIPDtlDNhglZuEfQfZKYLTRBYGsVktef68pnValbufAUBlO/O9O0J4KqW/XzOp7TDtf0RKQB1ySqXodmw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"a55aeac62148e37286d8c719f4fe630ce77e803dc1364fd45c927f9f5f30ce8a","subject":{"common_name":["gomapen-biyori.ddns.net"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=gomapen-biyori.ddns.net","subject_key_info":{"fingerprint_sha256":"d93f6b070cf8f19c4e2cbd9a5954f2165e932c3deff80493490b5830124eb20d","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"3hvWHbN4g+6FFVqJfVvI4TU+sFz2uG3+VVdVZ86LI4P3p4ktr9T00sHK2XrZzEBkNJ86SeQ6I39MoHsjg8nptS3T7lFsx749Al8SbNfmcNFFjTeAJLHEzEKZa4ZoSmhwjxe1rjzcILVxgVzebIci1ruf/yPYNJWL8PN0FJ61A3vBRU6XdE+rPwkWmoqY66CPoFTBMmYHJMJ9SHB9jzCTDhogxks2EcKT8kyhtVzAiESCl6tphWMmZQpzBjbYMfq5y/T3qX18NNtB2e83hYhwT96jy4/uKg1YvOVpdknLPD0SdPpo1Q4bD18cnWfMj/b+SMbwkY7u+J0cHLnK8XSkMw=="}},"tbs_fingerprint":"eecdd261052601fe128fe56cb7ecf4c0b9ea6c90e5046314818bb808b5e76b62","tbs_noct_fingerprint":"bc299dfb6cfa33cff7a87d6bc7fbd8966bcc79b6b6c5a50fdb18d8af1e4a605b","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 13:09:51 UTC","length":"7776000","start":"2018-03-19 13:09:51 UTC"},"version":"3"},"precert":true,"raw":"MIIFBzCCA++gAwIBAgITAPp9MVhL5Is9N0+GHxKYjxIa6jANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxMzA5NTFaFw0xODA2MTcxMzA5NTFaMCIxIDAeBgNVBAMTF2dvbWFwZW4tYml5b3JpLmRkbnMubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3hvWHbN4g+6FFVqJfVvI4TU+sFz2uG3+VVdVZ86LI4P3p4ktr9T00sHK2XrZzEBkNJ86SeQ6I39MoHsjg8nptS3T7lFsx749Al8SbNfmcNFFjTeAJLHEzEKZa4ZoSmhwjxe1rjzcILVxgVzebIci1ruf/yPYNJWL8PN0FJ61A3vBRU6XdE+rPwkWmoqY66CPoFTBMmYHJMJ9SHB9jzCTDhogxks2EcKT8kyhtVzAiESCl6tphWMmZQpzBjbYMfq5y/T3qX18NNtB2e83hYhwT96jy4/uKg1YvOVpdknLPD0SdPpo1Q4bD18cnWfMj/b+SMbwkY7u+J0cHLnK8XSkMwIDAQABo4ICNDCCAjAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQVV6F7utFecPe7l0Lhder+Mk6QBTAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wIgYDVR0RBBswGYIXZ29tYXBlbi1iaXlvcmkuZGRucy5uZXQwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEA2RHw+Am/7LrZHIYpXlFYRnC9uxk/YNO2RDZAeSo63MOEdKsWOJUvFB2ATnaA4SRqdBHmeFrLGfFHhR2HBdYZ05nMLvQcJ0q/95yJYwxyhXNMz1uk+Xr8x+6tJ4isN3sJyDqHTKN8+33JkxKoWDxTHTjw1I28Wx9G8CzeMfG8H2O2NcnnBYx0VGjn+HofnbpsB+W7yTCfrQ/psNGkMAos6OOf3NpN/AxAqrmkQzElPkGBpxPomI9OQ6v/WkQH/N7Y7L1WqYIPDtlDNhglZuEfQfZKYLTRBYGsVktef68pnValbufAUBlO/O9O0J4KqW/XzOp7TDtf0RKQB1ySqXodmw==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 21:08:40 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 20:30:49 UTC","ct_to_censys_at":"2018-07-30 22:11:33 UTC","index":"15588925"}},"fingerprint_sha256":"7173bacfa8702d2acd7a7b253c1d17e3a3bc8c1dc6c94f3ce1a8e3d6714b989d","metadata":{"added_at":"2018-03-19 21:08:40 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 23:45:51 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 08:12:36 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["demo115558.ssl-test1.org"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"20f7b8471563cf892495aec9a533cd8a75d312fb"},"fingerprint_md5":"5c04f85e7d053256c6e217146d819b9f","fingerprint_sha1":"0558ab03fe28c82398d54e01d8c82d29998ab91e","fingerprint_sha256":"7173bacfa8702d2acd7a7b253c1d17e3a3bc8c1dc6c94f3ce1a8e3d6714b989d","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["demo115558.ssl-test1.org"],"redacted":false,"serial_number":"21806210552225216143629938503903181393852226","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"cKJwskRD2O4ieJsJtPMRryEAkCvtg1hCpr0aBpSJqNZYRNrT1e6pmYtqUcj2mN5dV0/ZnxrVuw6OT6y7s+Ka0L4bzFBsxm76Yo9d4x+vbhV7vORd+czRursN0T6jg4Rn2kQPDMfpekhBjuw98KhMcV6cIlgG066Gfm9p1UjTI4bBEiLH1mGI2os5IavGSZWgaLws8oizys38854xbOCINTOZ0NVapvC7TW6fwdwow22VuTl3+s19wxYUQVPE3uPNEDwN+zyhJdBwSjhbzyCG26jMc+CQg05hu/+6HCRqIwhh9ZYICXvLQQqgqxVD9TPzHzChCxSHIObH5GHCwhM7Cg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d13e09efdd8ec6b89430019c259135f8bd2abca1a1d4418b3dc7a133e77735d8","subject":{"common_name":["demo115558.ssl-test1.org"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=demo115558.ssl-test1.org","subject_key_info":{"fingerprint_sha256":"46dfe7331047189001a67b4ddcfc7c73e66ee5810eba101d918a7d7117cd4be1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"yOsR4monspQ9TJl1yP2m94VgOfrjgNXeeIhmG1xhiPWZeHwZctmJFTNnbbMIkuf3JmsTWcc7B+8OAG3jc+kdkpRDDd3gb4el5Y7YX8HaV5LS6t8yuXV00c5d4e2SXIAbJRFU/1Z2rXP0VFlLgTtJKC+ouAbCMzNo1i+JBFuXB/QeDiKVfjZ/Ahr9NvMhHRsqoMaTBxuTMOnP+WYduaqlHEwR99r8EmwfVuR8JQhkaTtmoQaGTqSmwdkzztfsJ/kiow6JojvHm8uO5UwTAuacmBKVoK+rF9d9vd7thcTZN3nvmrCrmRLhwEE49MRZZuJzoMchYGSe5pWrmw3EcUfELw=="}},"tbs_fingerprint":"5720559131004e523fc13ce5e57e7dccb6cd9a926c84ccd177968f2d5b3f5b3e","tbs_noct_fingerprint":"9eb80c621829060f13174b977f1318f2366310ab52848753408d0606f91e582b","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 19:30:48 UTC","length":"7776000","start":"2018-03-19 19:30:48 UTC"},"version":"3"},"precert":true,"raw":"MIIFCTCCA/GgAwIBAgITAPpSsXudRdHa+TyU/DloUrN3QjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxOTMwNDhaFw0xODA2MTcxOTMwNDhaMCMxITAfBgNVBAMTGGRlbW8xMTU1NTguc3NsLXRlc3QxLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMjrEeJqJ7KUPUyZdcj9pveFYDn644DV3niIZhtcYYj1mXh8GXLZiRUzZ22zCJLn9yZrE1nHOwfvDgBt43PpHZKUQw3d4G+HpeWO2F/B2leS0urfMrl1dNHOXeHtklyAGyURVP9Wdq1z9FRZS4E7SSgvqLgGwjMzaNYviQRblwf0Hg4ilX42fwIa/TbzIR0bKqDGkwcbkzDpz/lmHbmqpRxMEffa/BJsH1bkfCUIZGk7ZqEGhk6kpsHZM87X7Cf5IqMOiaI7x5vLjuVMEwLmnJgSlaCvqxfXfb3e7YXE2Td575qwq5kS4cBBOPTEWWbic6DHIWBknuaVq5sNxHFHxC8CAwEAAaOCAjUwggIxMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUIPe4RxVjz4kkla7JpTPNinXTEvswHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMCMGA1UdEQQcMBqCGGRlbW8xMTU1NTguc3NsLXRlc3QxLm9yZzCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQBwonCyREPY7iJ4mwm08xGvIQCQK+2DWEKmvRoGlImo1lhE2tPV7qmZi2pRyPaY3l1XT9mfGtW7Do5PrLuz4prQvhvMUGzGbvpij13jH69uFXu85F35zNG6uw3RPqODhGfaRA8Mx+l6SEGO7D3wqExxXpwiWAbTroZ+b2nVSNMjhsESIsfWYYjaizkhq8ZJlaBovCzyiLPKzfzznjFs4Ig1M5nQ1Vqm8LtNbp/B3CjDbZW5OXf6zX3DFhRBU8Te480QPA37PKEl0HBKOFvPIIbbqMxz4JCDTmG7/7ocJGojCGH1lggJe8tBCqCrFUP1M/MfMKELFIcg5sfkYcLCEzsK","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 12:54:16 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 12:15:08 UTC","ct_to_censys_at":"2018-07-30 22:10:53 UTC","index":"15575467"}},"fingerprint_sha256":"1a6c216511c161664c736bb451b5a7bf16be012420db4979ec81d37f30060c80","metadata":{"added_at":"2018-03-19 12:54:16 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 05:05:03 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 07:04:36 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["purepowervrouwen.be","purepowervrouwen.hs1.biz2web.eu","purepowervrouwen.nl","www.purepowervrouwen.be","www.purepowervrouwen.nl"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"298060d48094bd3ff034af0ab2953466b744c368"},"fingerprint_md5":"188c6cd40f4f577130a8ed875d29fcc9","fingerprint_sha1":"dc22e983e57c695139ba7167f545e89d18ab06b2","fingerprint_sha256":"1a6c216511c161664c736bb451b5a7bf16be012420db4979ec81d37f30060c80","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["www.purepowervrouwen.be","www.purepowervrouwen.nl","purepowervrouwen.be","purepowervrouwen.hs1.biz2web.eu","purepowervrouwen.nl"],"redacted":false,"serial_number":"21814116341930855816603545704049024438710918","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"D+TZ9qCpkPhFH6ZBQ8KgF8goG4jOlbbqqHiOCBOJF+8OYwNLRZYiAqmTO1Qp1lS5hNNZlsmRYhrURZNMZ8Asv5bop/dF9LydllV0+K8ar0EPvwzNTgMuspneTvCTY0QRw1X7h3SABaoArbCPhobr1CHqHF3wpG87fYC5z9d0V/V8IBA+ZdZ6kwhbDUSfSkVhAKa0lwxRuBfV+s12kEPZth8xSuDdWHT+p8V751NAdYddRl8faDBtP78LGhIMv+wRtFjb/at6Fc09AgZ+LvJPfb1/KbQDcjdg+Fa6AAYR9VjbQ5gu2jDxTWCjoXqoVnTt7xEZjcE6eV3WDWPS2WJWVA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"a83973d13abdf5ba989d276275ca6a765e18d101215ccd2dc49e3ce6fc0e9b1e","subject":{"common_name":["purepowervrouwen.be"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=purepowervrouwen.be","subject_key_info":{"fingerprint_sha256":"db3b25504d4b33b5b88015445a2ebe5e76f1029cd4582cd48700d5e4fee4bf72","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"ydponyyJESGAWY+bRF/EGLL4YYs68kM2MofwDLBGFWnJYFJzQChGLHUiwV8leb4F+yXukVyl1yHV4YP+7rhVYqqd5kuHwECKtAaivFOcesQpfhDryiSfGtq3LxrEIouJA1oQRBFYdCk7hAq8lw6L9Po+pO2dT4B3Qfe7sKeHOF9E3lSb94zX0Bwpmyndd8Ktzhd9EBE5zVLe6Jf4w6FeH55SuHFrL7k24/sPo4pofgO7fBpXX9M41ynGVuSUXdsTSJUNyhSVP4c+NQumrhEMxxm+RpAa6KY7Wa7vhgYKJYEe71yDDQ21M9Bu7CncGAYDF5gIedoVX/Iia/6gsBP90w=="}},"tbs_fingerprint":"7eb3169ea7620938614283cd5113f7e2e2ec33ba675c284cf12c22b3d057f788","tbs_noct_fingerprint":"8f10c33712121cb018d359f81cb570becf437042fec8726bda17f843cc3e8ffd","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 11:15:08 UTC","length":"7776000","start":"2018-03-19 11:15:08 UTC"},"version":"3"},"precert":true,"raw":"MIIFaDCCBFCgAwIBAgITAPpp7SNTwKpoA6k9c3LQzOUyhjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxMTE1MDhaFw0xODA2MTcxMTE1MDhaMB4xHDAaBgNVBAMTE3B1cmVwb3dlcnZyb3V3ZW4uYmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJ2mifLIkRIYBZj5tEX8QYsvhhizryQzYyh/AMsEYVaclgUnNAKEYsdSLBXyV5vgX7Je6RXKXXIdXhg/7uuFViqp3mS4fAQIq0BqK8U5x6xCl+EOvKJJ8a2rcvGsQii4kDWhBEEVh0KTuECryXDov0+j6k7Z1PgHdB97uwp4c4X0TeVJv3jNfQHCmbKd13wq3OF30QETnNUt7ol/jDoV4fnlK4cWsvuTbj+w+jimh+A7t8Gldf0zjXKcZW5JRd2xNIlQ3KFJU/hz41C6auEQzHGb5GkBropjtZru+GBgolgR7vXIMNDbUz0G7sKdwYBgMXmAh52hVf8iJr/qCwE/3TAgMBAAGjggKZMIIClTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFCmAYNSAlL0/8DSvCrKVNGa3RMNoMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzCBhgYDVR0RBH8wfYITcHVyZXBvd2VydnJvdXdlbi5iZYIfcHVyZXBvd2VydnJvdXdlbi5oczEuYml6MndlYi5ldYITcHVyZXBvd2VydnJvdXdlbi5ubIIXd3d3LnB1cmVwb3dlcnZyb3V3ZW4uYmWCF3d3dy5wdXJlcG93ZXJ2cm91d2VuLm5sMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAA/k2fagqZD4RR+mQUPCoBfIKBuIzpW26qh4jggTiRfvDmMDS0WWIgKpkztUKdZUuYTTWZbJkWIa1EWTTGfALL+W6Kf3RfS8nZZVdPivGq9BD78MzU4DLrKZ3k7wk2NEEcNV+4d0gAWqAK2wj4aG69Qh6hxd8KRvO32Auc/XdFf1fCAQPmXWepMIWw1En0pFYQCmtJcMUbgX1frNdpBD2bYfMUrg3Vh0/qfFe+dTQHWHXUZfH2gwbT+/CxoSDL/sEbRY2/2rehXNPQIGfi7yT329fym0A3I3YPhWugAGEfVY20OYLtow8U1go6F6qFZ07e8RGY3BOnld1g1j0tliVlQ=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 21:08:41 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 20:37:52 UTC","ct_to_censys_at":"2018-07-30 22:11:36 UTC","index":"15589106"}},"fingerprint_sha256":"46c2a0b4aa44c08b6f7a90202cd56778cc0b3795629e2d09f0ea0833164d0e8f","metadata":{"added_at":"2018-03-19 21:08:41 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 08:31:47 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 19:15:17 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["demo115591.ssl-test1.org"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"a9a9eb850807b1e3a029496f40766dd6c216f209"},"fingerprint_md5":"80f8c0614bbae919dec5152a8d1f71ad","fingerprint_sha1":"1307d4e039d666d3d5233a4c4d1d405f5a28ece2","fingerprint_sha256":"46c2a0b4aa44c08b6f7a90202cd56778cc0b3795629e2d09f0ea0833164d0e8f","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["demo115591.ssl-test1.org"],"redacted":false,"serial_number":"21844753063335814261747078768046204487279190","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"kFWOcANLiFPHKPvjgY+KHYeYKHaeX7vrk9bIvDeezIyG3yQM4MhtfMY6cyY/c2jHuKf18+qYaYQuouosMMSmM1IK5dTUbwl/A+B+/7uqosTtIBOG8Xmk7cHljjlCp7KNPrgqIfoQ7CIjBAt7j4+iGe87yrQlyRI9xgHEmr3QKv+BWqnm2mwMjhqYfXbpnVsCefIQNg+9/SmDYj77oS+S3jvO9RDJX7LGcZoLcJqEqXX7/QBqZKhEc/kE2hDjg67E0e3x4kQDqCwtZgiLEgbz46JwzUt/HL6OH8lDFhp8CIA8W3tqN2GnNbyJ4HX8sXDVncSxX6dfDiC9/Pbvzqi9sw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"88f4ba77096392f0d59e57b0326a00207d7f2bf22f326836379b513643d84211","subject":{"common_name":["demo115591.ssl-test1.org"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=demo115591.ssl-test1.org","subject_key_info":{"fingerprint_sha256":"80075f6b53fd13fd6b40d3bc7faaa9bf080da6752e22476387efc7ce6a1cc5cf","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"o81eNTz1ADiFRF0LgA8SjNCDKxff4Y7EsNbtOLt2g+wYWIiCWiN3nlZywC01kXnaSNH6O7oARXm6iAiZYJd4WT11n/CIaErQvZ6PYMdd2h5Y89Poep87+skaYghcp0xbz4KJnPK8S+9L3ZMYxHCwpIxV9nCOqqqImoIzzH/8BlD4pw7PGFmT7vnN+xLqytRCUzz9OUS5mAIZAKyGiLWfRpp6fpXMQknPbvYfPkDxx8ri30Z0y/mjbL0AklPAoboTtRlJmiYvHiGQctlGTxK5uYb02XIMdrkElvISNND4KZ56eWI8bZrXCTUqc/kfwO/UBczBCtHpNroc5Y+Qz+f4sw=="}},"tbs_fingerprint":"b6e0d54b8472d0647e7e8ce36c4e01f60278e5239efac86bb0004da44ed478c6","tbs_noct_fingerprint":"48adb3f360617c6427426329740210d53db893db940932549e376c14ad4c2cbf","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 19:37:51 UTC","length":"7776000","start":"2018-03-19 19:37:51 UTC"},"version":"3"},"precert":true,"raw":"MIIFCTCCA/GgAwIBAgITAPrD9aU+CPolTpU6bY4QV+UiVjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxOTM3NTFaFw0xODA2MTcxOTM3NTFaMCMxITAfBgNVBAMTGGRlbW8xMTU1OTEuc3NsLXRlc3QxLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKPNXjU89QA4hURdC4APEozQgysX3+GOxLDW7Ti7doPsGFiIglojd55WcsAtNZF52kjR+ju6AEV5uogImWCXeFk9dZ/wiGhK0L2ej2DHXdoeWPPT6HqfO/rJGmIIXKdMW8+CiZzyvEvvS92TGMRwsKSMVfZwjqqqiJqCM8x//AZQ+KcOzxhZk+75zfsS6srUQlM8/TlEuZgCGQCshoi1n0aaen6VzEJJz272Hz5A8cfK4t9GdMv5o2y9AJJTwKG6E7UZSZomLx4hkHLZRk8SubmG9NlyDHa5BJbyEjTQ+CmeenliPG2a1wk1KnP5H8Dv1AXMwQrR6Ta6HOWPkM/n+LMCAwEAAaOCAjUwggIxMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUqanrhQgHseOgKUlvQHZt1sIW8gkwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMCMGA1UdEQQcMBqCGGRlbW8xMTU1OTEuc3NsLXRlc3QxLm9yZzCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQCQVY5wA0uIU8co++OBj4odh5godp5fu+uT1si8N57MjIbfJAzgyG18xjpzJj9zaMe4p/Xz6phphC6i6iwwxKYzUgrl1NRvCX8D4H7/u6qixO0gE4bxeaTtweWOOUKnso0+uCoh+hDsIiMEC3uPj6IZ7zvKtCXJEj3GAcSavdAq/4FaqebabAyOGph9dumdWwJ58hA2D739KYNiPvuhL5LeO871EMlfssZxmgtwmoSpdfv9AGpkqERz+QTaEOODrsTR7fHiRAOoLC1mCIsSBvPjonDNS38cvo4fyUMWGnwIgDxbe2o3Yac1vIngdfyxcNWdxLFfp18OIL389u/OqL2z","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 18:39:03 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 17:58:28 UTC","ct_to_censys_at":"2018-07-30 22:11:24 UTC","index":"15585424"}},"fingerprint_sha256":"72939bf5713713a51084e7b1def70d47af34162ffc574477e5284dbd9d15657e","metadata":{"added_at":"2018-03-19 18:39:03 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 10:44:43 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 21:42:36 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["content.properm.ru"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"5e9d9b60b05a17eef1607e221d19bc62a21b7707"},"fingerprint_md5":"5492b14be5adb1638b8db07f93227da1","fingerprint_sha1":"a840bfa22dbd963d7b81c9a30ed1e2cb22026373","fingerprint_sha256":"72939bf5713713a51084e7b1def70d47af34162ffc574477e5284dbd9d15657e","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["content.properm.ru"],"redacted":false,"serial_number":"21825449767476131782545455733494872952194598","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"bDHN3JA12wTSX4vDnGyvYW2dXWENSOspnuPcE3urcjUNkMnBpRr4wZK8QfWDndnKrMC9b+fvBfUbLpijsMbtvkD1LiiKmWoWS+5tn9pwg5rG3+fVNGIa3G7UUhTGJ8k1AT8+DEQZ7Yt/kXM8c9odBfF6u73NByWuSoLoMpNibDuKLVJC/5yNJpTf0MUJ7S0IHcItyBovI8NkGlAC1w/UV7IIM6ExQqYooPucpTVj9crZuQvxjD1nJ+t/35Rnd1ngrKLdyS54BLomB5KJBKNmBMPJ36npmHgZSQLeaCMTLQjnjFz5AVy1GPiobZpWWycUMQxwccY/dC2I9eRNxNTkxg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"375842d7e5f53997f50aca357c899fbd7c5a191d259bed0a8d6ea947727395d8","subject":{"common_name":["content.properm.ru"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=content.properm.ru","subject_key_info":{"fingerprint_sha256":"ec2e8eb3570e36e002a251ba57f9e0b685055e8d7744cbcd221c9ae9e306310d","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"yE47Z71DGEQxP+6An9GA9l4obzTO9Qh2UsidtOB+474WnmqTSJ8fkj40fMjH9lo6DgSxyVHVvIXJ4PXUiojdLlfJO41Joa2eQzcKFdYzzNBl2sfwMiQcg5M5YiJd/ei2cqFXcCXDuz4Y+VjZbhpSa9gIuLhXUVPfyRi0sKU+SJmw7sunmrwu5KR90l0RjdWGMjWa3nV2n2QGpqEhESzoF9NRNmKWVCcdY6UnbeSVse8IZDnLJtNsJYSruntEsXRsQd4MUIGIiJ9Ja6G5IQ13Rf3bF0l+GcpldI+rmDnGh+uoVFROeyEstWFDNXhpEiJFRMmkjDMARnTlTjs11LFuZw=="}},"tbs_fingerprint":"626b063785f305184fcbc8255d9f19420ea2ded09102f6cc30f1c5d02155a2e5","tbs_noct_fingerprint":"32c8629128594c5bfd2b5b2d9e38e9c08001ddfcef973272fb3d28b0ef29a6ab","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 16:58:28 UTC","length":"7776000","start":"2018-03-19 16:58:28 UTC"},"version":"3"},"precert":true,"raw":"MIIE/TCCA+WgAwIBAgITAPqLO3WwrxZJNWpTJMJiXj7GJjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxNjU4MjhaFw0xODA2MTcxNjU4MjhaMB0xGzAZBgNVBAMTEmNvbnRlbnQucHJvcGVybS5ydTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMhOO2e9QxhEMT/ugJ/RgPZeKG80zvUIdlLInbTgfuO+Fp5qk0ifH5I+NHzIx/ZaOg4EsclR1byFyeD11IqI3S5XyTuNSaGtnkM3ChXWM8zQZdrH8DIkHIOTOWIiXf3otnKhV3Alw7s+GPlY2W4aUmvYCLi4V1FT38kYtLClPkiZsO7Lp5q8LuSkfdJdEY3VhjI1mt51dp9kBqahIREs6BfTUTZillQnHWOlJ23klbHvCGQ5yybTbCWEq7p7RLF0bEHeDFCBiIifSWuhuSENd0X92xdJfhnKZXSPq5g5xofrqFRUTnshLLVhQzV4aRIiRUTJpIwzAEZ05U47NdSxbmcCAwEAAaOCAi8wggIrMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUXp2bYLBaF+7xYH4iHRm8YqIbdwcwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMB0GA1UdEQQWMBSCEmNvbnRlbnQucHJvcGVybS5ydTCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQBsMc3ckDXbBNJfi8OcbK9hbZ1dYQ1I6yme49wTe6tyNQ2QycGlGvjBkrxB9YOd2cqswL1v5+8F9RsumKOwxu2+QPUuKIqZahZL7m2f2nCDmsbf59U0YhrcbtRSFMYnyTUBPz4MRBnti3+Rczxz2h0F8Xq7vc0HJa5Kgugyk2JsO4otUkL/nI0mlN/QxQntLQgdwi3IGi8jw2QaUALXD9RXsggzoTFCpiig+5ylNWP1ytm5C/GMPWcn63/flGd3WeCsot3JLngEuiYHkokEo2YEw8nfqemYeBlJAt5oIxMtCOeMXPkBXLUY+KhtmlZbJxQxDHBxxj90LYj15E3E1OTG","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 21:25:07 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 20:43:11 UTC","ct_to_censys_at":"2018-07-30 22:11:36 UTC","index":"15589228"}},"fingerprint_sha256":"689b12b1d2c7c52bcc86916802d800549f26dc10bde5ec3942782e36489759f8","metadata":{"added_at":"2018-03-19 21:25:07 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 11:03:44 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 22:07:32 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["demo215616.ssl-test1.org"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"f84a775e743940d03c8cdc7a6e5918828761ece3"},"fingerprint_md5":"c1744a77cb3cfed2d9fc159f26b0ddf9","fingerprint_sha1":"2675ef48f9e3f20acbb8b82b1eaf5a47c771d2a1","fingerprint_sha256":"689b12b1d2c7c52bcc86916802d800549f26dc10bde5ec3942782e36489759f8","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["demo215616.ssl-test1.org"],"redacted":false,"serial_number":"21829679914090304783254066218023230649640445","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"SSOdAnbSeduzOarRm+XCKfLUMoFbldsc/ie7ceECCsmmz+2TdWmmFsd2PQYFvymC+DOohQMDpeftfXJ4GZthomW2w+/6xaE6NYAK0Zl+jhbDoPuujaYZZxkfqa4hnSEq5vLOfSZfw+gC+yUN1rSfJiJPJO7Bl0bi1aM/c8DRmwnowIyl5McAYEr2QP+Xo3xn2XScvA3VnQogZgOcqKUoHGJtqzo+Lx/ZXVede5ZfXg2RDq2uwTs8uqNYkhNoTZBS7YFqqS0hHwRb+a9geA5x+3zF/0hkef6QToikRnrYAmnEfwUciCzpO5Qr6mA+iqcBoDs/g528mgk5MNARERMDxw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"c730af6a731b98cabbae6f160dd689b7264b3ad97f2e55eb3e0ab0b90d572d0e","subject":{"common_name":["demo215616.ssl-test1.org"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=demo215616.ssl-test1.org","subject_key_info":{"fingerprint_sha256":"0a7a7b7e886968716f10dc3a119d2ccc6765e43fa9daa58bf1c1f00f7a5e1d9b","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"zyvLyTfNs/gcpCwDIPcPNCeVmQfbloblsksR7aA8I5xBFYC0uP/KIaFOSql4ahG+W6C7mrhG+EsQFmM53DNaVmObZPRFpbpH6sg4xb4mRTux5PfB3FL2Lp+9Kn/DdiqS4igWOPJF1Ln6fv33gKgssBKgUU8nVzwe5Mk1g5q0u8QAULXcL8pty8CGy5msr5nUxcW5rRxriN78SjkM8G6Rsd/O1dSi55IJsdx5fgzCnYOm/2R7HbmmYqyRDukhIct0/3EHeHK/c/MIS3KpOD4/CqLoZz3DUDXAQ1FvKZDaTwvFTTgMk+2Ebf+0Uw3nILY+1aXq53F+5Hk5t9UcQ3tzOQ=="}},"tbs_fingerprint":"50ef526eb6424ca0345f32111aa4fe7386cb77e114a6b5d73526e586914306d3","tbs_noct_fingerprint":"1a470d5381d311b99d4d065334bd9e9086fff7b7c2559561fba3b1628e23621a","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 19:43:11 UTC","length":"7776000","start":"2018-03-19 19:43:11 UTC"},"version":"3"},"precert":true,"raw":"MIIFCTCCA/GgAwIBAgITAPqXqd5LI3kL9IAbO4y+mS+l/TANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxOTQzMTFaFw0xODA2MTcxOTQzMTFaMCMxITAfBgNVBAMTGGRlbW8yMTU2MTYuc3NsLXRlc3QxLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8ry8k3zbP4HKQsAyD3DzQnlZkH25aG5bJLEe2gPCOcQRWAtLj/yiGhTkqpeGoRvlugu5q4RvhLEBZjOdwzWlZjm2T0RaW6R+rIOMW+JkU7seT3wdxS9i6fvSp/w3YqkuIoFjjyRdS5+n7994CoLLASoFFPJ1c8HuTJNYOatLvEAFC13C/KbcvAhsuZrK+Z1MXFua0ca4je/Eo5DPBukbHfztXUoueSCbHceX4Mwp2Dpv9kex25pmKskQ7pISHLdP9xB3hyv3PzCEtyqTg+Pwqi6Gc9w1A1wENRbymQ2k8LxU04DJPthG3/tFMN5yC2PtWl6udxfuR5ObfVHEN7czkCAwEAAaOCAjUwggIxMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU+Ep3XnQ5QNA8jNx6blkYgodh7OMwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMCMGA1UdEQQcMBqCGGRlbW8yMTU2MTYuc3NsLXRlc3QxLm9yZzCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQBJI50CdtJ527M5qtGb5cIp8tQygVuV2xz+J7tx4QIKyabP7ZN1aaYWx3Y9BgW/KYL4M6iFAwOl5+19cngZm2GiZbbD7/rFoTo1gArRmX6OFsOg+66NphlnGR+priGdISrm8s59Jl/D6AL7JQ3WtJ8mIk8k7sGXRuLVoz9zwNGbCejAjKXkxwBgSvZA/5ejfGfZdJy8DdWdCiBmA5yopSgcYm2rOj4vH9ldV517ll9eDZEOra7BOzy6o1iSE2hNkFLtgWqpLSEfBFv5r2B4DnH7fMX/SGR5/pBOiKRGetgCacR/BRyILOk7lCvqYD6KpwGgOz+DnbyaCTkw0BEREwPH","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 14:39:30 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 13:58:55 UTC","ct_to_censys_at":"2018-07-30 22:11:04 UTC","index":"15578115"}},"fingerprint_sha256":"623a4a040b775d39749c9b35441058fe46597dc9a51e1a9f7e13b4d82fa9d5ad","metadata":{"added_at":"2018-03-19 14:39:30 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 08:31:39 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 11:27:19 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["fit4site.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"6ca3fc2b62eec84a92657f40cff71072a16cb0a6"},"fingerprint_md5":"faa15c9f53d6242fa7a365baaa367b0d","fingerprint_sha1":"8b06e322a4b4f447301fa3061ee3d41942ae2255","fingerprint_sha256":"623a4a040b775d39749c9b35441058fe46597dc9a51e1a9f7e13b4d82fa9d5ad","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["fit4site.com"],"redacted":false,"serial_number":"21841103790907611718001662601882960108598495","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"GaxIbFKef/HeDNM9RxUBDtmVtNLmG6LqhU3YRSnnelI+JfUZhmPWJzXqqG0Bq5m5YlIltVU/1YraMyf0xHmqRQLJkQLJ+2W2+I117olR6xWFFu90Zbu+TW/k0aMUOVcfmThUuxO9CPGiabhHBP825U7EYwRxTmx1hmz0KXdX9Zcvj5cFgRbbMM/kvfeev1WvZ715ILG2abN5T9xCWkPdlWNt/RKLUKCphWTHz3xtDt9y+3d8/Q7ncp9qUa13k0bdIBOl2eYpkj+HqeR9/4si33xz15NxK1M86PvGfmytj6SYEav5QaoRq3LhY9T+SjgnkebWqI2ZImkLai3OPfLuqQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"349529cb55722b9581e348b82a30dee4442ad800fa9e35ababfbe7b3d00d255e","subject":{"common_name":["fit4site.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=fit4site.com","subject_key_info":{"fingerprint_sha256":"66cf8c95af19e8cfb5abf3dba0349ab93fecb66b6763e559d32d3940a06207ca","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sFzCj8ZhAlUttXMBqMC+ugS9KVURn4I/jwh4jEw9+ebgEGDCeXuBhRKqnRGBzfJqQd+tBELleOey37GzeaEaCQ7pVJxhvymDJKCRvszSxSZ37M0hHNXy5lcRIBrV+Ma2dJmTnCiHLaYzDp8kdLQfLgige5v3BiJPIIFnZIGDivBO4tw6uxjjt8ZdZSHHNd0vnD0Les5EE3AJhYj8HCc1U00qhtbOUWATNsuxNXfW8tig3tcDujNjGq1Y+3jYdRpXoW4KAUpqSOhkiI7rw5hBq60l6KfcVt4/mEs3Q6fl4HobrShrCygZB6sQ74WQBmSkuY39QwzGVRf2OA6vZM7wDw=="}},"tbs_fingerprint":"333279b9dfd388361e03f8c95ba9e7275e37cc0ec123e94eab2e48c9a09119fc","tbs_noct_fingerprint":"c575f4919fa41f6d5cae0d16e1819505d1adc3c011ea355e7c3ef82c574d500d","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 12:58:55 UTC","length":"7776000","start":"2018-03-19 12:58:55 UTC"},"version":"3"},"precert":true,"raw":"MIIE8TCCA9mgAwIBAgITAPq5PDzwFzfWdzpLDQNJwto03zANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxMjU4NTVaFw0xODA2MTcxMjU4NTVaMBcxFTATBgNVBAMTDGZpdDRzaXRlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALBcwo/GYQJVLbVzAajAvroEvSlVEZ+CP48IeIxMPfnm4BBgwnl7gYUSqp0Rgc3yakHfrQRC5Xjnst+xs3mhGgkO6VScYb8pgySgkb7M0sUmd+zNIRzV8uZXESAa1fjGtnSZk5wohy2mMw6fJHS0Hy4IoHub9wYiTyCBZ2SBg4rwTuLcOrsY47fGXWUhxzXdL5w9C3rORBNwCYWI/BwnNVNNKobWzlFgEzbLsTV31vLYoN7XA7ozYxqtWPt42HUaV6FuCgFKakjoZIiO68OYQautJein3FbeP5hLN0On5eB6G60oawsoGQerEO+FkAZkpLmN/UMMxlUX9jgOr2TO8A8CAwEAAaOCAikwggIlMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUbKP8K2LuyEqSZX9Az/cQcqFssKYwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMBcGA1UdEQQQMA6CDGZpdDRzaXRlLmNvbTCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQAZrEhsUp5/8d4M0z1HFQEO2ZW00uYbouqFTdhFKed6Uj4l9RmGY9YnNeqobQGrmbliUiW1VT/VitozJ/TEeapFAsmRAsn7Zbb4jXXuiVHrFYUW73Rlu75Nb+TRoxQ5Vx+ZOFS7E70I8aJpuEcE/zblTsRjBHFObHWGbPQpd1f1ly+PlwWBFtswz+S9956/Va9nvXkgsbZps3lP3EJaQ92VY239EotQoKmFZMfPfG0O33L7d3z9Dudyn2pRrXeTRt0gE6XZ5imSP4ep5H3/iyLffHPXk3ErUzzo+8Z+bK2PpJgRq/lBqhGrcuFj1P5KOCeR5taojZkiaQtqLc498u6p","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 03:53:31 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 03:13:17 UTC","ct_to_censys_at":"2018-07-30 22:09:59 UTC","index":"15557349"}},"fingerprint_sha256":"0f1646b65fcd6981fe3473a3b3131557abaac46becdbbfa3f8ee92ed99432f66","metadata":{"added_at":"2018-03-19 03:53:31 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 20:23:31 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 04:04:01 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["blue.myrepublic.net","red.myrepublic.net"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"02743db8e71772ede36b0fd23ed11b60272f3784"},"fingerprint_md5":"a3cb05a3f8e9c2b4fc30aa05fd4e356e","fingerprint_sha1":"40a645faf13ec1d40d830502b9401e673fbd3d76","fingerprint_sha256":"0f1646b65fcd6981fe3473a3b3131557abaac46becdbbfa3f8ee92ed99432f66","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["blue.myrepublic.net","red.myrepublic.net"],"redacted":false,"serial_number":"21853687408332860087495834370338504540177387","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"SFn4xxaBB5aXlwzURnmwU65e6dGsmRL8PJvKbS8CHxT9QP6/aqa2jFM57o6+sybw0mgZ1gqP6YbuuYHQbaVCHS1A65FTlj5GbeBGBh09QdIImNzmQereH6Zhw2MFioopCvxSOhjXIPRylhOmd3lRPr1Tr0BBP7PNoGbChMlfwzU/cq4/YjIhtzgv9WVO0kG2rO0ngdA/hgp4CHWv3cIBLj+ym+biGLmWWnxoS8dZCrJE8UexsngSTLxPLJ/Tiwdw4XTR99bFKRPgL0pkyy+mM2VbTCVOgKOZvzEscmILI3ZALs6/v4ueQb10+NlxxN6muShJL3GxS4WbKaFYGoFSKQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"35d2188bc1f1631eac733074153e1027c01711cdf59bce3cbd7ebbe40d791452","subject":{"common_name":["red.myrepublic.net"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=red.myrepublic.net","subject_key_info":{"fingerprint_sha256":"35a3d130e7fe85e9c7fcdaba1d332b34a51ddf039a8cb00409796cb83f4630ea","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wpDk/4p6tTgp5rpbO3nyOu4tKtp61Oix/RnQ6OO1IXBUFmZhuh6SE9EPpBmool+kgsE48kk4vsdaHzMEuVk4h6oK1WR0CzYH1p2IWDr5dBwEwk6EpH5FaXCgSJVU1OPJCS5hv5NF76fYr1PlCGpNXt8e10g0PAxhA5BqHELjcFxaNhOP21wAk0cWWd3qaukCdVXnslcumfZR39azTYv4DHg1vyvILfvERMs9J9SZjUkSTXJ22Kj3w/Ba9K/h0pkMNuoyLzfwu03BbkTxI832bUEpqn4wnsZUhre/cNGps+OoHE/yg5HeTapzakikcseMI7vlnuYq+bw770G6cKLvBw=="}},"tbs_fingerprint":"f1472dc3a9c3ed740fb5fe3d112f44889e0f5bafefdc901e9985eda768c1423c","tbs_noct_fingerprint":"9ffa9d12e55721b8932941dec853279beb64fc200d5d17f926140c8800821aed","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 02:13:16 UTC","length":"7776000","start":"2018-03-19 02:13:16 UTC"},"version":"3"},"precert":true,"raw":"MIIFEjCCA/qgAwIBAgITAPreNxl/p8yhrpzZKslRQ+xD6zANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwMjEzMTZaFw0xODA2MTcwMjEzMTZaMB0xGzAZBgNVBAMTEnJlZC5teXJlcHVibGljLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMKQ5P+KerU4Kea6Wzt58jruLSraetTosf0Z0OjjtSFwVBZmYboekhPRD6QZqKJfpILBOPJJOL7HWh8zBLlZOIeqCtVkdAs2B9adiFg6+XQcBMJOhKR+RWlwoEiVVNTjyQkuYb+TRe+n2K9T5QhqTV7fHtdINDwMYQOQahxC43BcWjYTj9tcAJNHFlnd6mrpAnVV57JXLpn2Ud/Ws02L+Ax4Nb8ryC37xETLPSfUmY1JEk1ydtio98PwWvSv4dKZDDbqMi838LtNwW5E8SPN9m1BKap+MJ7GVIa3v3DRqbPjqBxP8oOR3k2qc2pIpHLHjCO75Z7mKvm8O+9BunCi7wcCAwEAAaOCAkQwggJAMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUAnQ9uOcXcu3jaw/SPtEbYCcvN4QwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMDIGA1UdEQQrMCmCE2JsdWUubXlyZXB1YmxpYy5uZXSCEnJlZC5teXJlcHVibGljLm5ldDCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQBIWfjHFoEHlpeXDNRGebBTrl7p0ayZEvw8m8ptLwIfFP1A/r9qpraMUznujr6zJvDSaBnWCo/phu65gdBtpUIdLUDrkVOWPkZt4EYGHT1B0giY3OZB6t4fpmHDYwWKiikK/FI6GNcg9HKWE6Z3eVE+vVOvQEE/s82gZsKEyV/DNT9yrj9iMiG3OC/1ZU7SQbas7SeB0D+GCngIda/dwgEuP7Kb5uIYuZZafGhLx1kKskTxR7GyeBJMvE8sn9OLB3DhdNH31sUpE+AvSmTLL6YzZVtMJU6Ao5m/MSxyYgsjdkAuzr+/i55BvXT42XHE3qa5KEkvcbFLhZspoVgagVIp","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 08:08:34 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 07:35:14 UTC","ct_to_censys_at":"2018-07-30 22:10:24 UTC","index":"15565432"}},"fingerprint_sha256":"78728849548f5debf13f12f192e824e316bdeb0d2249b901bb3532aa7dc01abe","metadata":{"added_at":"2018-03-19 08:08:34 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 07:44:14 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 10:31:11 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["multicraft.minehosting.com.br"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"908bf9ed7d7f9e76e4f53d9c4cdb97f714ff97fb"},"fingerprint_md5":"57b989b520b314b6f03b4832ade467da","fingerprint_sha1":"08ba4e14ac14b46c1ed22e4f80bf2d0bf9e60369","fingerprint_sha256":"78728849548f5debf13f12f192e824e316bdeb0d2249b901bb3532aa7dc01abe","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["multicraft.minehosting.com.br"],"redacted":false,"serial_number":"21834254704018565118189870480659845132491359","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"HVnZY+pSB3XdnLaaGJxPl3SFlQUcItAEjFJZqpHaaGgraFKCU/tEMiaaruECSu4ztJPe5Qy0UniEPrkbmd4OohfBabst2CEN5ZC8HyuR6lyVNRtbPQdOlbEWBVH7xiY9tZUVGGq1vHSzNDL1W3533wua6NDU2H25MGuxOjmyesqY9bYASCpAyGaHvANIjm9xufHdMczXjEeX7QDcs8+EhJ0goNi5MDFb/fPLhVt7awDwcQ3QslY8rumwXnQUIcxL4MUPhWebeDJf4KXWBb75POcUVxHdaStlyjMFtyPKUxudvUhxBqIAQ+gV5Eah8VUDWtAJRucYW7EssQq5Bxih8Q=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"22f24a05b7d9b9bd5e555c7e237b9668b8506e88c8e1e5ece1089f575805d5ab","subject":{"common_name":["multicraft.minehosting.com.br"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=multicraft.minehosting.com.br","subject_key_info":{"fingerprint_sha256":"5751c16979650f7f8238f217d865f4efc9367e5e0bd8cb5eaf18e1ccae3b0792","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sXdAkjtpslxjEIx/82PBmm/0gi0bHEMWp/dV1ahO+bQWIoltePz5+O7XCipHU9SObuX7tObaPvRDLeXJ57kVdTbm3PAvT9Itk0RpU3XCa31pmYExABzJqzAqagQAvupbovgHC8ZxsYXUN8qGXpjZv2uY+j/agJ8gIlXIekCCi3EcEA/RMgq3ole7Q1IeVrlm4tD1vj5nN0/yBCmtb1AL+zvqEJKVWEaVrOg6b/rav7Oy10+764jBG2hjTvjt741lKM0Vhv7eWUe0HyWwN663WjBR6UNvUT8t9GHdQSpqgwLvRoXn3qc3vBZIoEj+LCeUbq7UgRez7v+r89yw/RukHQ=="}},"tbs_fingerprint":"b013a70ebdcc58406f124af5dc9af23b4a88191088a4688cddf3494bf4183cdb","tbs_noct_fingerprint":"3970a72d0ce2217ec193990040152259a50eaff77760be34eb2401339891cd25","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 06:35:13 UTC","length":"7776000","start":"2018-03-19 06:35:13 UTC"},"version":"3"},"precert":true,"raw":"MIIFEzCCA/ugAwIBAgITAPqlG47I44cJVvOUubwCFuKaXzANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwNjM1MTNaFw0xODA2MTcwNjM1MTNaMCgxJjAkBgNVBAMTHW11bHRpY3JhZnQubWluZWhvc3RpbmcuY29tLmJyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsXdAkjtpslxjEIx/82PBmm/0gi0bHEMWp/dV1ahO+bQWIoltePz5+O7XCipHU9SObuX7tObaPvRDLeXJ57kVdTbm3PAvT9Itk0RpU3XCa31pmYExABzJqzAqagQAvupbovgHC8ZxsYXUN8qGXpjZv2uY+j/agJ8gIlXIekCCi3EcEA/RMgq3ole7Q1IeVrlm4tD1vj5nN0/yBCmtb1AL+zvqEJKVWEaVrOg6b/rav7Oy10+764jBG2hjTvjt741lKM0Vhv7eWUe0HyWwN663WjBR6UNvUT8t9GHdQSpqgwLvRoXn3qc3vBZIoEj+LCeUbq7UgRez7v+r89yw/RukHQIDAQABo4ICOjCCAjYwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSQi/ntfX+eduT1PZxM25f3FP+X+zAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wKAYDVR0RBCEwH4IdbXVsdGljcmFmdC5taW5laG9zdGluZy5jb20uYnIwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAHVnZY+pSB3XdnLaaGJxPl3SFlQUcItAEjFJZqpHaaGgraFKCU/tEMiaaruECSu4ztJPe5Qy0UniEPrkbmd4OohfBabst2CEN5ZC8HyuR6lyVNRtbPQdOlbEWBVH7xiY9tZUVGGq1vHSzNDL1W3533wua6NDU2H25MGuxOjmyesqY9bYASCpAyGaHvANIjm9xufHdMczXjEeX7QDcs8+EhJ0goNi5MDFb/fPLhVt7awDwcQ3QslY8rumwXnQUIcxL4MUPhWebeDJf4KXWBb75POcUVxHdaStlyjMFtyPKUxudvUhxBqIAQ+gV5Eah8VUDWtAJRucYW7EssQq5Bxih8Q==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 11:55:18 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 11:15:47 UTC","ct_to_censys_at":"2018-07-30 22:10:48 UTC","index":"15573928"}},"fingerprint_sha256":"e679b37cda9ac4fd281c1eb31e8b8b93593efc060cc1e2cf9be837f3d7ca5514","metadata":{"added_at":"2018-03-19 11:55:18 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 00:57:30 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 09:40:59 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["artifactory.deere.com","cert.artifactory.deere.com","ci-bsp-greenstar.cert.virtd.deere.com","ci-bsp-greenstar.isg.deere.com","ci-bsp-gsix.cert.virtd.deere.com","ci-bsp-gsix.isg.deere.com","ci-edge.cert.virtd.deere.com","ci-edge.isg.deere.com","ci-greenstar.cert.virtd.deere.com","ci-greenstar.isg.deere.com","ci-gsix-apps.cert.virtd.deere.com","ci-gsix-apps.virtd.deere.com","ci-gsix-midware.cert.virtd.deere.com","ci-gsix-midware.virtd.deere.com","ci-gsix-os.cert.virtd.deere.com","ci-gsix-os.dev.virtd.deere.com","ci-gsix-os.virtd.deere.com","ci-gsix-tools.cert.virtd.deere.com","ci-gsix-tools.virtd.deere.com","ci-gsix.isg.deere.com","ci-gsix.virtd.deere.com","ci-hiltest.cert.virtd.deere.com","ci-hiltest.isg.deere.com","ci-mjd.cert.virtd.deere.com","ci-mjd.isg.deere.com","ci-mtg.cert.virtd.deere.com","ci-mtg.isg.deere.com","ci-ops.cert.virtd.deere.com","ci-ops.isg.deere.com","ci-ops.virtd.deere.com","docker.deere.com","docs-internal.cert.virtd.deere.com","docs-internal.dev.virtd.deere.com","docs-internal.virtd.deere.com","docs.cert.virtd.deere.com","docs.dev.virtd.deere.com","docs.virtd.deere.com","dsm.artifactory.deere.com","gen4cc-apps.virtd.deere.com","gen4cc-dev-tools.virtd.deere.com","gen4cc-midware.virtd.deere.com","gen4cc-os.virtd.deere.com","icinga.cert.virtd.deere.com","icinga.virtd.deere.com","letsencrypt.deere.com","logs.cert.virtd.deere.com","logs.dev.virtd.deere.com","logs.virtd.deere.com","mhg.artifactory.deere.com","mli.artifactory.deere.com","pnq.artifactory.deere.com","team-aft.virtd.deere.com","team-architecture.virtd.deere.com","team-gen4-ci.virtd.deere.com","team-gen4-qi.virtd.deere.com","team-guidance.virtd.deere.com","team-ktown.virtd.deere.com","team-leader-follower.virtd.deere.com","team-machine-automation.dev.virtd.deere.com","team-machine-automation.virtd.deere.com","team-platform-health.virtd.deere.com","team-pune.virtd.deere.com","team-reprogramming.virtd.deere.com","team-universal.virtd.deere.com","team-wds.virtd.deere.com","uxtest.artifactory.deere.com","xibo.dev.virtd.deere.com","xibo.virtd.deere.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"0500a9e238c61785a8cd0ca87c4dffaef8260d9a"},"fingerprint_md5":"ecefd4db33fb38783c2de6f0d4cd0bc7","fingerprint_sha1":"a37c126c741f63d81d3969a8b12e8e7d6e1e1fe2","fingerprint_sha256":"e679b37cda9ac4fd281c1eb31e8b8b93593efc060cc1e2cf9be837f3d7ca5514","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["team-pune.virtd.deere.com","ci-gsix-os.cert.virtd.deere.com","gen4cc-dev-tools.virtd.deere.com","icinga.cert.virtd.deere.com","ci-bsp-greenstar.cert.virtd.deere.com","ci-greenstar.isg.deere.com","team-ktown.virtd.deere.com","team-machine-automation.dev.virtd.deere.com","ci-hiltest.cert.virtd.deere.com","ci-mjd.cert.virtd.deere.com","ci-ops.cert.virtd.deere.com","ci-gsix-tools.cert.virtd.deere.com","gen4cc-apps.virtd.deere.com","team-leader-follower.virtd.deere.com","docs-internal.dev.virtd.deere.com","mli.artifactory.deere.com","team-guidance.virtd.deere.com","team-machine-automation.virtd.deere.com","ci-edge.isg.deere.com","ci-gsix-midware.virtd.deere.com","ci-ops.virtd.deere.com","docker.deere.com","docs.dev.virtd.deere.com","icinga.virtd.deere.com","team-gen4-ci.virtd.deere.com","team-reprogramming.virtd.deere.com","ci-gsix-apps.virtd.deere.com","ci-gsix-os.dev.virtd.deere.com","ci-ops.isg.deere.com","artifactory.deere.com","ci-mjd.isg.deere.com","ci-gsix-midware.cert.virtd.deere.com","team-architecture.virtd.deere.com","ci-hiltest.isg.deere.com","ci-mtg.isg.deere.com","logs.virtd.deere.com","ci-bsp-greenstar.isg.deere.com","ci-gsix-apps.cert.virtd.deere.com","ci-gsix-tools.virtd.deere.com","xibo.dev.virtd.deere.com","dsm.artifactory.deere.com","logs.dev.virtd.deere.com","uxtest.artifactory.deere.com","docs-internal.virtd.deere.com","docs.cert.virtd.deere.com","mhg.artifactory.deere.com","team-wds.virtd.deere.com","letsencrypt.deere.com","ci-edge.cert.virtd.deere.com","ci-gsix.isg.deere.com","gen4cc-os.virtd.deere.com","team-platform-health.virtd.deere.com","cert.artifactory.deere.com","ci-greenstar.cert.virtd.deere.com","ci-mtg.cert.virtd.deere.com","team-universal.virtd.deere.com","ci-bsp-gsix.cert.virtd.deere.com","logs.cert.virtd.deere.com","pnq.artifactory.deere.com","docs.virtd.deere.com","ci-bsp-gsix.isg.deere.com","ci-gsix-os.virtd.deere.com","docs-internal.cert.virtd.deere.com","team-gen4-qi.virtd.deere.com","xibo.virtd.deere.com","ci-gsix.virtd.deere.com","gen4cc-midware.virtd.deere.com","team-aft.virtd.deere.com"],"redacted":false,"serial_number":"21835054646732576874661355751452143757769647","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"28vDvlYyMWDwCzs60noVJtkWPuidYwX8G57qzINTZzBp8gnwbti6cvlc8S+gA4dbPNcX60hzCa8cGlwTDtPdwdxWFWK/S9ioP8+Def7L5IzVpxIOP29ilYNw4s0vV6c8R1zmpzDvO6mZ9+kATNnRw1aZ0UpC5i7BV2G8OldCaoK9yrz2PyYLxAbZzCrvpgp+gIxgjZbYNjuyiNTSs++bu2d+9CQ3D90P5rroXOtICl37Io98+QVNAUqyg+KoThgOBMCuMq3avseURI9W1FTpyZOwJJ1fgnK3rjfMwWz8+4YD2kxZY0pjdkE9sanf1xqLD6irl1JJQpzfMxex9aQADA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"a37e14d3fb8356a378c5c967860fd784f20590c1a76d43d082d419eebf6e4cc7","subject":{"common_name":["letsencrypt.deere.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=letsencrypt.deere.com","subject_key_info":{"fingerprint_sha256":"d6491ad965e1eeef54480d82f1fd054c0a577b07ee3c3d898851cf8abb912365","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"rA1BY0uvF1nm9RREYtQiqoA8uMAUjcLhvGOeJf0ggnGnWvL/q+Ms/Ro5+VqJJJ9pgu5ofZdbFaGLEdriGlfndSttXrjxXC9bvCifq74wwTSaHgpHWyA4M0zCCPBlh5hssLeYpcGPq8+FmzrqdDtFlfpd1kOgD1xwEULvyIqhOm83UgANnJjoBabb/9B20MaXJnQub0uPG6Eiovmc3Oy6pGZ4ogAsuyV9/ftI3bzg4RkvYNSf5WtMYsKgfHH9xd5x3eR3ZND8DzcIyWu9Ow+hFPzxMP3V5py8zvCn09RQxM8KD16rM/tr/C2DjLfxiQkJj85xZ0qa0TEaKGgNiYJxWlRkuxwo1bfsTs6AztXp0C71foth8auxGww8/Y4HNAFOCHoWzzRdrcgm7LTBBQbmqUOO1nJy6yNq5xAhYckRi/P+V6Ug6BKo8/VOlwt/4io3XMgxbVmEvduZ9e4mu53gjunP7Ps1+2/JRvVNtuY/V6MR2R878l23orUvt7DA0/bTfAl8X81AlKEsy61ox/vm0opwex+2Yy3fWpG5lOQ6OhIIW2aKAfbWhcnIR4DOQEsG83zM0zG+XCRKEXzvxGIgEqwU9PNJpvSNpC9IjIp5prQv3t8T8NdNvb0FqZC/KqKWu2x9vNx53yV6YjCAJxkAmP6nM8SCRRzowHhPMVPtBCM="}},"tbs_fingerprint":"c56f8c40864ac1e117355564d221c69797c304e8d5af8bc60b620ca327bd519c","tbs_noct_fingerprint":"999907f29841ccbbe18174fc4167476f06ec4c1ec731f9c2ae451cf76bb31902","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 10:15:47 UTC","length":"7776000","start":"2018-03-19 10:15:47 UTC"},"version":"3"},"precert":true,"raw":"MIINvjCCDKagAwIBAgITAPqndV4lu4ghffnIkVMD6y87rzANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxMDE1NDdaFw0xODA2MTcxMDE1NDdaMCAxHjAcBgNVBAMTFWxldHNlbmNyeXB0LmRlZXJlLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKwNQWNLrxdZ5vUURGLUIqqAPLjAFI3C4bxjniX9IIJxp1ry/6vjLP0aOflaiSSfaYLuaH2XWxWhixHa4hpX53UrbV648VwvW7won6u+MME0mh4KR1sgODNMwgjwZYeYbLC3mKXBj6vPhZs66nQ7RZX6XdZDoA9ccBFC78iKoTpvN1IADZyY6AWm2//QdtDGlyZ0Lm9LjxuhIqL5nNzsuqRmeKIALLslff37SN284OEZL2DUn+VrTGLCoHxx/cXecd3kd2TQ/A83CMlrvTsPoRT88TD91eacvM7wp9PUUMTPCg9eqzP7a/wtg4y38YkJCY/OcWdKmtExGihoDYmCcVpUZLscKNW37E7OgM7V6dAu9X6LYfGrsRsMPP2OBzQBTgh6Fs80Xa3IJuy0wQUG5qlDjtZycusjaucQIWHJEYvz/lelIOgSqPP1TpcLf+IqN1zIMW1ZhL3bmfXuJrud4I7pz+z7NftvyUb1TbbmP1ejEdkfO/Jdt6K1L7ewwNP203wJfF/NQJShLMutaMf75tKKcHsftmMt31qRuZTkOjoSCFtmigH21oXJyEeAzkBLBvN8zNMxvlwkShF878RiIBKsFPTzSab0jaQvSIyKeaa0L97fE/DXTb29BamQvyqilrtsfbzced8lemIwgCcZAJj+pzPEgkUc6MB4TzFT7QQjAgMBAAGjggntMIIJ6TAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFAUAqeI4xheFqM0MqHxN/674Jg2aMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzCCB9kGA1UdEQSCB9AwggfMghVhcnRpZmFjdG9yeS5kZWVyZS5jb22CGmNlcnQuYXJ0aWZhY3RvcnkuZGVlcmUuY29tgiVjaS1ic3AtZ3JlZW5zdGFyLmNlcnQudmlydGQuZGVlcmUuY29tgh5jaS1ic3AtZ3JlZW5zdGFyLmlzZy5kZWVyZS5jb22CIGNpLWJzcC1nc2l4LmNlcnQudmlydGQuZGVlcmUuY29tghljaS1ic3AtZ3NpeC5pc2cuZGVlcmUuY29tghxjaS1lZGdlLmNlcnQudmlydGQuZGVlcmUuY29tghVjaS1lZGdlLmlzZy5kZWVyZS5jb22CIWNpLWdyZWVuc3Rhci5jZXJ0LnZpcnRkLmRlZXJlLmNvbYIaY2ktZ3JlZW5zdGFyLmlzZy5kZWVyZS5jb22CIWNpLWdzaXgtYXBwcy5jZXJ0LnZpcnRkLmRlZXJlLmNvbYIcY2ktZ3NpeC1hcHBzLnZpcnRkLmRlZXJlLmNvbYIkY2ktZ3NpeC1taWR3YXJlLmNlcnQudmlydGQuZGVlcmUuY29tgh9jaS1nc2l4LW1pZHdhcmUudmlydGQuZGVlcmUuY29tgh9jaS1nc2l4LW9zLmNlcnQudmlydGQuZGVlcmUuY29tgh5jaS1nc2l4LW9zLmRldi52aXJ0ZC5kZWVyZS5jb22CGmNpLWdzaXgtb3MudmlydGQuZGVlcmUuY29tgiJjaS1nc2l4LXRvb2xzLmNlcnQudmlydGQuZGVlcmUuY29tgh1jaS1nc2l4LXRvb2xzLnZpcnRkLmRlZXJlLmNvbYIVY2ktZ3NpeC5pc2cuZGVlcmUuY29tghdjaS1nc2l4LnZpcnRkLmRlZXJlLmNvbYIfY2ktaGlsdGVzdC5jZXJ0LnZpcnRkLmRlZXJlLmNvbYIYY2ktaGlsdGVzdC5pc2cuZGVlcmUuY29tghtjaS1tamQuY2VydC52aXJ0ZC5kZWVyZS5jb22CFGNpLW1qZC5pc2cuZGVlcmUuY29tghtjaS1tdGcuY2VydC52aXJ0ZC5kZWVyZS5jb22CFGNpLW10Zy5pc2cuZGVlcmUuY29tghtjaS1vcHMuY2VydC52aXJ0ZC5kZWVyZS5jb22CFGNpLW9wcy5pc2cuZGVlcmUuY29tghZjaS1vcHMudmlydGQuZGVlcmUuY29tghBkb2NrZXIuZGVlcmUuY29tgiJkb2NzLWludGVybmFsLmNlcnQudmlydGQuZGVlcmUuY29tgiFkb2NzLWludGVybmFsLmRldi52aXJ0ZC5kZWVyZS5jb22CHWRvY3MtaW50ZXJuYWwudmlydGQuZGVlcmUuY29tghlkb2NzLmNlcnQudmlydGQuZGVlcmUuY29tghhkb2NzLmRldi52aXJ0ZC5kZWVyZS5jb22CFGRvY3MudmlydGQuZGVlcmUuY29tghlkc20uYXJ0aWZhY3RvcnkuZGVlcmUuY29tghtnZW40Y2MtYXBwcy52aXJ0ZC5kZWVyZS5jb22CIGdlbjRjYy1kZXYtdG9vbHMudmlydGQuZGVlcmUuY29tgh5nZW40Y2MtbWlkd2FyZS52aXJ0ZC5kZWVyZS5jb22CGWdlbjRjYy1vcy52aXJ0ZC5kZWVyZS5jb22CG2ljaW5nYS5jZXJ0LnZpcnRkLmRlZXJlLmNvbYIWaWNpbmdhLnZpcnRkLmRlZXJlLmNvbYIVbGV0c2VuY3J5cHQuZGVlcmUuY29tghlsb2dzLmNlcnQudmlydGQuZGVlcmUuY29tghhsb2dzLmRldi52aXJ0ZC5kZWVyZS5jb22CFGxvZ3MudmlydGQuZGVlcmUuY29tghltaGcuYXJ0aWZhY3RvcnkuZGVlcmUuY29tghltbGkuYXJ0aWZhY3RvcnkuZGVlcmUuY29tghlwbnEuYXJ0aWZhY3RvcnkuZGVlcmUuY29tghh0ZWFtLWFmdC52aXJ0ZC5kZWVyZS5jb22CIXRlYW0tYXJjaGl0ZWN0dXJlLnZpcnRkLmRlZXJlLmNvbYIcdGVhbS1nZW40LWNpLnZpcnRkLmRlZXJlLmNvbYIcdGVhbS1nZW40LXFpLnZpcnRkLmRlZXJlLmNvbYIddGVhbS1ndWlkYW5jZS52aXJ0ZC5kZWVyZS5jb22CGnRlYW0ta3Rvd24udmlydGQuZGVlcmUuY29tgiR0ZWFtLWxlYWRlci1mb2xsb3dlci52aXJ0ZC5kZWVyZS5jb22CK3RlYW0tbWFjaGluZS1hdXRvbWF0aW9uLmRldi52aXJ0ZC5kZWVyZS5jb22CJ3RlYW0tbWFjaGluZS1hdXRvbWF0aW9uLnZpcnRkLmRlZXJlLmNvbYIkdGVhbS1wbGF0Zm9ybS1oZWFsdGgudmlydGQuZGVlcmUuY29tghl0ZWFtLXB1bmUudmlydGQuZGVlcmUuY29tgiJ0ZWFtLXJlcHJvZ3JhbW1pbmcudmlydGQuZGVlcmUuY29tgh50ZWFtLXVuaXZlcnNhbC52aXJ0ZC5kZWVyZS5jb22CGHRlYW0td2RzLnZpcnRkLmRlZXJlLmNvbYIcdXh0ZXN0LmFydGlmYWN0b3J5LmRlZXJlLmNvbYIYeGliby5kZXYudmlydGQuZGVlcmUuY29tghR4aWJvLnZpcnRkLmRlZXJlLmNvbTCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQDby8O+VjIxYPALOzrSehUm2RY+6J1jBfwbnurMg1NnMGnyCfBu2Lpy+VzxL6ADh1s81xfrSHMJrxwaXBMO093B3FYVYr9L2Kg/z4N5/svkjNWnEg4/b2KVg3DizS9XpzxHXOanMO87qZn36QBM2dHDVpnRSkLmLsFXYbw6V0Jqgr3KvPY/JgvEBtnMKu+mCn6AjGCNltg2O7KI1NKz75u7Z370JDcP3Q/muuhc60gKXfsij3z5BU0BSrKD4qhOGA4EwK4yrdq+x5REj1bUVOnJk7AknV+CcreuN8zBbPz7hgPaTFljSmN2QT2xqd/XGosPqKuXUklCnN8zF7H1pAAM","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 23:53:36 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 23:14:14 UTC","ct_to_censys_at":"2018-07-30 22:11:51 UTC","index":"15594038"}},"fingerprint_sha256":"e38b5255c7094b03130d33a028702371d5322d6fa9bfe87d9c9e43ba223fde7c","metadata":{"added_at":"2018-03-19 23:53:36 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 21:36:09 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 05:30:45 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["test.bontrax.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"1f586ff1099e50f05c56f2d00e5df09db0e0ef9f"},"fingerprint_md5":"d376ca4d6f3db8d308bd148a173f0732","fingerprint_sha1":"38ec98c4d03d0c32436e0c56989892b7e394e9f4","fingerprint_sha256":"e38b5255c7094b03130d33a028702371d5322d6fa9bfe87d9c9e43ba223fde7c","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["test.bontrax.com"],"redacted":false,"serial_number":"21856022565096730108929884990408956772469183","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"tfMyfmLIhb6XlJqUumI3a3sT56R+6v/Vm1cOqUVsSmoe1HUIppQsXkTICVltb0YWchkk5s513nCEmKaUqbs4627kef2q89VYpPYogpFf2ZgU7YUpcwrUp4rnzhS+vibGhnQPb2V2/SJBC1qDWi8uA8cfC1ZU4P2IObv2DSCFlyQpDXIrU27o11HD3ZMUMf3HtUXPOWXI+vfk9s71Ogrfc3PMKx7Cyy90X3iedWkzIKehUfhSJF1G5i7J2FQp1dGcqkQCUXr/8GsbLrB7sc5ZVaBaGo6qMrGQQ/pEBH79NMx1Bpn4Rd/tJyUKu8NKVFtSsTHB7gC1465PbSvODJ9q7A=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"184acdcc6919e5d17be35098850cd07b44ff54f7286291d917563c9461e9ff28","subject":{"common_name":["test.bontrax.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=test.bontrax.com","subject_key_info":{"fingerprint_sha256":"577b9380fa5505bef6896022dbe54f2270f3bdbdca25ccfc2cbc944310087a17","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"ygL5LTCWDn/eAotZ5f8gxFJ91UTnxdA8x6Ku/kjA1v7deqj65glRJeB4x5z0CSqJ4uq4fkX1bQVrPmGArMgSjzQTmC9gXF1sd8OH7/6va1ejkRKTrsHogJax29R+Ys6ESJbGbSdfnrvJh3NWiJ+JUmRcGYmnxv99WJkb+DM9j4MdUCBLoAG8y+OVfLOhfi63qZGAyt3MpFwO79dcmRH6h5BziB3/UvnoqpyPRTEin3KWbyNbe/2LlvzkcDwJK/w+V2ZnjsJF3bolpG1xSUCynz9m4uqqA+f4gtO9ZNuSPi/YktFYjFg+ALA8CzhEyWclWhiChzMC3N72/ERcqPhvhQ=="}},"tbs_fingerprint":"1d57d9b2aefb9ec595d002ea9758ac146b10a412e72b6a728d5d0ec2a4679b95","tbs_noct_fingerprint":"b060af4ec6304c0c87aa88a82fc76e94e5721533fce5c3d0932f93f4f91d858e","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 22:14:14 UTC","length":"7776000","start":"2018-03-19 22:14:14 UTC"},"version":"3"},"precert":true,"raw":"MIIE+TCCA+GgAwIBAgITAPrlE+BVERIn0OEhMQVVRrnJvzANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkyMjE0MTRaFw0xODA2MTcyMjE0MTRaMBsxGTAXBgNVBAMTEHRlc3QuYm9udHJheC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKAvktMJYOf94Ci1nl/yDEUn3VROfF0DzHoq7+SMDW/t16qPrmCVEl4HjHnPQJKoni6rh+RfVtBWs+YYCsyBKPNBOYL2BcXWx3w4fv/q9rV6OREpOuweiAlrHb1H5izoRIlsZtJ1+eu8mHc1aIn4lSZFwZiafG/31YmRv4Mz2Pgx1QIEugAbzL45V8s6F+LrepkYDK3cykXA7v11yZEfqHkHOIHf9S+eiqnI9FMSKfcpZvI1t7/YuW/ORwPAkr/D5XZmeOwkXduiWkbXFJQLKfP2bi6qoD5/iC071k25I+L9iS0ViMWD4AsDwLOETJZyVaGIKHMwLc3vb8RFyo+G+FAgMBAAGjggItMIICKTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFB9Yb/EJnlDwXFby0A5d8J2w4O+fMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAbBgNVHREEFDASghB0ZXN0LmJvbnRyYXguY29tMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBALXzMn5iyIW+l5SalLpiN2t7E+ekfur/1ZtXDqlFbEpqHtR1CKaULF5EyAlZbW9GFnIZJObOdd5whJimlKm7OOtu5Hn9qvPVWKT2KIKRX9mYFO2FKXMK1KeK584Uvr4mxoZ0D29ldv0iQQtag1ovLgPHHwtWVOD9iDm79g0ghZckKQ1yK1Nu6NdRw92TFDH9x7VFzzllyPr35PbO9ToK33NzzCsewssvdF94nnVpMyCnoVH4UiRdRuYuydhUKdXRnKpEAlF6//BrGy6we7HOWVWgWhqOqjKxkEP6RAR+/TTMdQaZ+EXf7SclCrvDSlRbUrExwe4AteOuT20rzgyfauw=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 10:08:21 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 09:37:15 UTC","ct_to_censys_at":"2018-07-30 22:10:36 UTC","index":"15569591"}},"fingerprint_sha256":"7c72243ae9be9780180bc95525b5d33970daaa48f019add3478d4058024c01c9","metadata":{"added_at":"2018-03-19 10:08:21 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 02:47:01 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 11:55:16 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["test.bontrax.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"75fb86e1a62627f309c7c2804187136a5eb6a6af"},"fingerprint_md5":"2be15f475fcc205102fcfc3fafb74d38","fingerprint_sha1":"8654e11ab2eaa8bca605dcccddaf22e54341080a","fingerprint_sha256":"7c72243ae9be9780180bc95525b5d33970daaa48f019add3478d4058024c01c9","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["test.bontrax.com"],"redacted":false,"serial_number":"21835726246560052552843298060778388760455724","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"fSsVJLJBqoBo9W1ExinezESmgaK4Y5MiRHdzyjorEBzHXRr1yIRruQCQ3wb9gmy4UimQLFJaY172AHxQFWD8EJhWsW0PN6CLXx0Q/MwtBEvyrGisp+LxCgR8bhjW8kdhuh2y5aY78xRRrHsoBp3wVAHIT+AMnW7qYCsU6PDLNSdKP17jtEIAVgHHgqNNhsLMAYMASRx6YIdAIMX1jrfv+2iYTMOwPjeCvKmVtaw+az0dVXqtpoa+712EjitMfgymFqiijbcXhR1N82NLHLgtbfnZFC8IXYHzCahyd6qi0CPAomeNYnveaGGdk+lnBgV+oAbML/4gkQjwLvxcQN4cfA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"2580b44c4ed45f8714435934bc5a9cc6f9597f430057f21e8706ae4eda57c06e","subject":{"common_name":["test.bontrax.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=test.bontrax.com","subject_key_info":{"fingerprint_sha256":"2079b330604055404923e2af743b9dd18a285f4785527db49092515fcbee5f38","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vt2EUneeSPIfBQjj40gRg5QUrS9oqE7GP0fg4uHTAlGAuV1/zYtGJvt0oqL65O1IhKXklYoC4S2uG9MVNQ6+j3rp6ICWss7zFlOdemcDeJzV59D5gse4IM/2I7kSLTadYf4PLySA8rnq0V+CfqTmB3mbnNmcrwvGZjRuhFBqqUdY6mb8KQP3TV7GLndu+yINM61ZNdTGalsmw77yUcmwtd4eUcGCIwEYDFw4ZthhZXSZaiQGjTCrQs4p5SBhseSkIcGwjI4pHillZOqGvb+KHsOat+ow+fha6WqrjnZemR8etlCwcNATIO/Db3IEZlR9Zql32+ekkjLavVkevVinJw=="}},"tbs_fingerprint":"bdf394092e7331f937f685ad6971b77c7f18d6d6fbbf13aadefeecb064b19bea","tbs_noct_fingerprint":"2daddef14c1d9933c456468d3c313cd134aa471b4b18626e79f59ad10806ac97","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 08:37:14 UTC","length":"7776000","start":"2018-03-19 08:37:14 UTC"},"version":"3"},"precert":true,"raw":"MIIE+TCCA+GgAwIBAgITAPqpbp+RuRyQrUFuQ5z+m15qLDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwODM3MTRaFw0xODA2MTcwODM3MTRaMBsxGTAXBgNVBAMTEHRlc3QuYm9udHJheC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+3YRSd55I8h8FCOPjSBGDlBStL2ioTsY/R+Di4dMCUYC5XX/Ni0Ym+3Siovrk7UiEpeSVigLhLa4b0xU1Dr6PeunogJayzvMWU516ZwN4nNXn0PmCx7ggz/YjuRItNp1h/g8vJIDyuerRX4J+pOYHeZuc2ZyvC8ZmNG6EUGqpR1jqZvwpA/dNXsYud277Ig0zrVk11MZqWybDvvJRybC13h5RwYIjARgMXDhm2GFldJlqJAaNMKtCzinlIGGx5KQhwbCMjikeKWVk6oa9v4oew5q36jD5+FrpaquOdl6ZHx62ULBw0BMg78NvcgRmVH1mqXfb56SSMtq9WR69WKcnAgMBAAGjggItMIICKTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFHX7huGmJifzCcfCgEGHE2petqavMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAbBgNVHREEFDASghB0ZXN0LmJvbnRyYXguY29tMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAH0rFSSyQaqAaPVtRMYp3sxEpoGiuGOTIkR3c8o6KxAcx10a9ciEa7kAkN8G/YJsuFIpkCxSWmNe9gB8UBVg/BCYVrFtDzegi18dEPzMLQRL8qxorKfi8QoEfG4Y1vJHYbodsuWmO/MUUax7KAad8FQByE/gDJ1u6mArFOjwyzUnSj9e47RCAFYBx4KjTYbCzAGDAEkcemCHQCDF9Y637/tomEzDsD43gryplbWsPms9HVV6raaGvu9dhI4rTH4Mphaooo23F4UdTfNjSxy4LW352RQvCF2B8wmocneqotAjwKJnjWJ73mhhnZPpZwYFfqAGzC/+IJEI8C78XEDeHHw=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 07:10:21 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 06:35:29 UTC","ct_to_censys_at":"2018-07-30 22:10:17 UTC","index":"15563419"}},"fingerprint_sha256":"36bf4c8787ccef1699b1d14c2d5eac98bd4d233112d546df2bd4d57871c9f909","metadata":{"added_at":"2018-03-19 07:10:21 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 21:18:42 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 05:08:21 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["21a8d0e1-a8c0-49ad-9f21-50b08605fe41.bot.vinz.opendnstest.net"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"a60396eb608f84985ac816afe26d69be1b21b71c"},"fingerprint_md5":"6d4f0765f475ee60b419d0ed409f40a6","fingerprint_sha1":"92a767187cd4b9e1b51e50571b48979edbcd96da","fingerprint_sha256":"36bf4c8787ccef1699b1d14c2d5eac98bd4d233112d546df2bd4d57871c9f909","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["21a8d0e1-a8c0-49ad-9f21-50b08605fe41.bot.vinz.opendnstest.net"],"redacted":false,"serial_number":"21846666683313207007456395325766744196741345","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"Z1Ncjqz9KUl/iC9nwhKIYHhoS2WMucY/7typYsFruvwSd7uHgOyr9R8DVjHLIAScFLkQ+hIWxjae49oMT6GEuGssy6VhqCGMilCVuwJYn7r42qiLxHI7128vCvsFExpXFlnfvRDcNdeIUQ9kISYxB/RhC6vLN5ALTEBLUeegomh1LbC6ahQAcytLbb4Ja0XV1s9O7VWFpNLz7a48WhxwgyaqpSVFl1WSjkWBnv7PTi+iYLNn8LKyaEXt1Wv5hNPZJWBBIen62VT8JB0du0RWf5kOMZfLjSVQfucd1JHjzV1n5sEWxAzQT7MIigY6WPXyJga+VMSo9lsC6PwmVbA+xQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"30ca90728429b9c1deac9908d188ca9b42662f348175572ebed14552bac7c3ae","subject":{"common_name":["21a8d0e1-a8c0-49ad-9f21-50b08605fe41.bot.vinz.opendnstest.net"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=21a8d0e1-a8c0-49ad-9f21-50b08605fe41.bot.vinz.opendnstest.net","subject_key_info":{"fingerprint_sha256":"48a5d7df23100d125451e61775c20acd8fa3f4e865f99f3699484b4288d1e607","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"0V/cjZ8aoyqpF/n7AUKyy+OLGt7gbBurAeS296c3S2VtZkjC6xjQa0rtUsaBRWsT7nRL+dBgnDt74L1b+hgm6f1CG/Z+PbvCPzwSma9ZhzrvImdEQ0liyyT9XMaIqbSSSWYm8yORiK47LAEV0iLhhQexhAMGf1b1HG1SBRVV6yN+SnWiPBHWV9iF2wtyqhF16p7aGaTIlsiWlfsQTd+WJNHUhApz74o73GLCDCuHthgPr2yIQiHaWA0Lb1l7/IFAWDTBF0xbY5yodsMlI//ZFX2gAhO/XTVJeWZBBaUFkZxB4SiaCgoJYsqPox7LvECnXcuJfodpXSvtODECes5WXw=="}},"tbs_fingerprint":"546aece6a71722fc0f571057005b32013917ad16fe87accf90592beec21194ee","tbs_noct_fingerprint":"3a702933ea0bd4da821ab14d99e5434eb3610714fc6d391368b8f794f77a7bee","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 05:35:29 UTC","length":"7776000","start":"2018-03-19 05:35:29 UTC"},"version":"3"},"precert":true,"raw":"MIIFUzCCBDugAwIBAgITAPrJlUsLQtFnrIDvEDw9zsd44TANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwNTM1MjlaFw0xODA2MTcwNTM1MjlaMEgxRjBEBgNVBAMTPTIxYThkMGUxLWE4YzAtNDlhZC05ZjIxLTUwYjA4NjA1ZmU0MS5ib3Qudmluei5vcGVuZG5zdGVzdC5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDRX9yNnxqjKqkX+fsBQrLL44sa3uBsG6sB5Lb3pzdLZW1mSMLrGNBrSu1SxoFFaxPudEv50GCcO3vgvVv6GCbp/UIb9n49u8I/PBKZr1mHOu8iZ0RDSWLLJP1cxoiptJJJZibzI5GIrjssARXSIuGFB7GEAwZ/VvUcbVIFFVXrI35KdaI8EdZX2IXbC3KqEXXqntoZpMiWyJaV+xBN35Yk0dSECnPvijvcYsIMK4e2GA+vbIhCIdpYDQtvWXv8gUBYNMEXTFtjnKh2wyUj/9kVfaACE79dNUl5ZkEFpQWRnEHhKJoKCgliyo+jHsu8QKddy4l+h2ldK+04MQJ6zlZfAgMBAAGjggJaMIICVjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFKYDlutgj4SYWsgWr+Jtab4bIbccMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzBIBgNVHREEQTA/gj0yMWE4ZDBlMS1hOGMwLTQ5YWQtOWYyMS01MGIwODYwNWZlNDEuYm90LnZpbnoub3BlbmRuc3Rlc3QubmV0MIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAGdTXI6s/SlJf4gvZ8ISiGB4aEtljLnGP+7cqWLBa7r8Ene7h4Dsq/UfA1YxyyAEnBS5EPoSFsY2nuPaDE+hhLhrLMulYaghjIpQlbsCWJ+6+Nqoi8RyO9dvLwr7BRMaVxZZ370Q3DXXiFEPZCEmMQf0YQuryzeQC0xAS1HnoKJodS2wumoUAHMrS22+CWtF1dbPTu1VhaTS8+2uPFoccIMmqqUlRZdVko5FgZ7+z04vomCzZ/CysmhF7dVr+YTT2SVgQSHp+tlU/CQdHbtEVn+ZDjGXy40lUH7nHdSR481dZ+bBFsQM0E+zCIoGOlj18iYGvlTEqPZbAuj8JlWwPsU=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 15:08:40 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 14:42:12 UTC","ct_to_censys_at":"2018-07-30 22:11:07 UTC","index":"15579051"}},"fingerprint_sha256":"cecf0ecc3cbc9cd67b48e748389b57f3e5556a797522a1fa746fbc43cf50b9f3","metadata":{"added_at":"2018-03-19 15:08:40 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 15:04:16 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-30 05:26:45 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["remote.greuter.nl"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"83190e5d8d56ac1bfbf433a6f3facc957137bd16"},"fingerprint_md5":"2973a69203ccf3700108b89dbb5dd56b","fingerprint_sha1":"5368267c65644e5c6d20cd1277cf090ede4caf97","fingerprint_sha256":"cecf0ecc3cbc9cd67b48e748389b57f3e5556a797522a1fa746fbc43cf50b9f3","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["remote.greuter.nl"],"redacted":false,"serial_number":"21832263073153968583693199377793288599296570","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"w7BJO/Zv1IsEPsf6aZJAbHL3uLbpCfgGk2J+HKJHgK01HE43tcxtuMmr4Ewp7ilXKwHEd3zaU7eM4Jf/vyOjiYMAUUIgWWdC+Ih3LpvNOBix+5aKBvUswUzHr3t75Yf2auhkB588xmAyCVZierASi0f3z+6aOqJDmT8KebEYUwBor/ZWA11YHf8OrtSX7xwQjdPLDLSDKnBsmFw44uya0UgWHAFwed+goqr5C5KR6Zl6b/ME0R4leOO6frHW/1Kxa3KtILxJM80HXS+PvTpndI2KHymiPA+qbGNssWI3EEk7VqXeSjIXS4KNWWNBxxmydn1k7crnBXlG2cXB8b+FyQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"4af40e6a93d06a602d8454e1c8f8b82873a11ab44d252bccd0070b4156bffb2d","subject":{"common_name":["remote.greuter.nl"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=remote.greuter.nl","subject_key_info":{"fingerprint_sha256":"b958feb849e5b4d0c60635363fdd01128f792ac9fb3b5fd954277e9684c17d31","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"3Oftu9fjupRbhHqDmVkh+Lhy1Y2upHTevQa/vca1rdWtvbE1c+CIQcyg6Za8UtBI8U0irZJ+QpRS+e72gCUhplyO0pzgKFRn6QDIc3M6UciMQwX7KYDbbOHkMlzOA7xbBmuSDMHuWqZWTEWC4Bd83HPy4G+j/Ds+nSQc+AHtmirK0ChxWYN12Dri1Gi4iObBCbj3NpVJ5EaMqKRRd6ZgVt79uhuIUa0vuSUJpbhA6cNzwWha7kzY7vrtzS2S/pVMWcd0Z6AMvZ21NlpI42KSGaLMQnvmiVGzoFVk+tTnXRSlXUmm0cQEXUWlzk4DDlGjN4fAnGJT6LhFX8vyITyjwQ=="}},"tbs_fingerprint":"928457592744bca99ba5e93296914fe937a77eedc47bad07a9146cf7f4bffd9a","tbs_noct_fingerprint":"b0ec526ead82c2f2c22474acc033c2a22dd9f5d984b896c177b347d189c59dce","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 13:42:11 UTC","length":"7776000","start":"2018-03-19 13:42:11 UTC"},"version":"3"},"precert":true,"raw":"MIIE+zCCA+OgAwIBAgITAPqfQTih+CPL0LwCJ5sKeljaOjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxMzQyMTFaFw0xODA2MTcxMzQyMTFaMBwxGjAYBgNVBAMTEXJlbW90ZS5ncmV1dGVyLm5sMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3Oftu9fjupRbhHqDmVkh+Lhy1Y2upHTevQa/vca1rdWtvbE1c+CIQcyg6Za8UtBI8U0irZJ+QpRS+e72gCUhplyO0pzgKFRn6QDIc3M6UciMQwX7KYDbbOHkMlzOA7xbBmuSDMHuWqZWTEWC4Bd83HPy4G+j/Ds+nSQc+AHtmirK0ChxWYN12Dri1Gi4iObBCbj3NpVJ5EaMqKRRd6ZgVt79uhuIUa0vuSUJpbhA6cNzwWha7kzY7vrtzS2S/pVMWcd0Z6AMvZ21NlpI42KSGaLMQnvmiVGzoFVk+tTnXRSlXUmm0cQEXUWlzk4DDlGjN4fAnGJT6LhFX8vyITyjwQIDAQABo4ICLjCCAiowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSDGQ5djVasG/v0M6bz+syVcTe9FjAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wHAYDVR0RBBUwE4IRcmVtb3RlLmdyZXV0ZXIubmwwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAw7BJO/Zv1IsEPsf6aZJAbHL3uLbpCfgGk2J+HKJHgK01HE43tcxtuMmr4Ewp7ilXKwHEd3zaU7eM4Jf/vyOjiYMAUUIgWWdC+Ih3LpvNOBix+5aKBvUswUzHr3t75Yf2auhkB588xmAyCVZierASi0f3z+6aOqJDmT8KebEYUwBor/ZWA11YHf8OrtSX7xwQjdPLDLSDKnBsmFw44uya0UgWHAFwed+goqr5C5KR6Zl6b/ME0R4leOO6frHW/1Kxa3KtILxJM80HXS+PvTpndI2KHymiPA+qbGNssWI3EEk7VqXeSjIXS4KNWWNBxxmydn1k7crnBXlG2cXB8b+FyQ==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 04:08:47 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 03:33:11 UTC","ct_to_censys_at":"2018-07-30 22:09:59 UTC","index":"15557942"}},"fingerprint_sha256":"1c913c4e7af90040b4879e647244dcac190d1a32b2336245b920bbeabd1d578b","metadata":{"added_at":"2018-03-19 04:08:47 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 15:26:24 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 20:06:09 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["remote.greuter.nl"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"165f6794a06e226b10d7d3e3ba34036d9fa3ba27"},"fingerprint_md5":"b18152904a4aeccd58752830c0d51e1b","fingerprint_sha1":"53d1e583aa60195c0f08829df9a10e61f3ed62b3","fingerprint_sha256":"1c913c4e7af90040b4879e647244dcac190d1a32b2336245b920bbeabd1d578b","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["remote.greuter.nl"],"redacted":false,"serial_number":"21779792188071102939211433175051883042510956","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"M8HsKHLnDWBFNtQquDxJ0GNpQfEfW2d1Qz5Yr98N3zdzjWkDkeqdwanSIMoU6lY8I/1bSU22wTWKElKumAP6F6PKfDePa0jKDMFBSZk4hpKuD/Poehy+MUmFarVYttvKOQa+eoii16dk5OdOyoWNK+p92zM3muwGflmRUj49YOZ53NaeGXYz+oLFyCz5UZxXfhgnhIqlHD+POnReuK/i0b4HpEU3V1K/5yTy6NG2N2Oag7Tv/A7yOJmNEQj0zzllV00/oH8Ik1twWd3b5ukzUi4FpAYVQduSOgrDx/HEsrQRFnfnU0ZhtU3I2AcCLuxfNu7JjXPxXgHINgDVg+xS6A=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"7880fb1981b69baa98c3bd3de9f5f06404959cd60355bdc83cbb0cc4743377e0","subject":{"common_name":["remote.greuter.nl"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=remote.greuter.nl","subject_key_info":{"fingerprint_sha256":"8d680c22cce3bbc37b6ec436d3a68c67f2ca4a0d2eaa2424df9f9d1cef9e2a30","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"071zdnmqarHPtCQfIaUfBKA2UlplRyYhttt9lWVsKK+nPQHuFnSHOpQS0uQAHtdmnEIAxG4HITinhYLmZv19/fQeP4FdlysT5JeUu/fazM4lTHQwPCxUxddwC5BChlFIq1vg+wEPSyFi062mDRyXqobJLfP5FnPrPj60Rk9JZn/4a54v2y6wGH29RN62p1UKoQos2jHnzWdyb4zTkT0UmavUWu+cunKs+nUR/WUcR0lXLWyp5wBUo2laJVrrNE6xm99H89DksQw8P3NCJn1in7DB5W6ewuQvpsEBoW6FEVN5Qn5oHGbmwz8yJOu4ZovZ47H/w3MuqPc0xsLWQ9Q3fQ=="}},"tbs_fingerprint":"43c88251e1ce94ca9c7beb798349f483543a16322d6002c8d89d2d442ecce81d","tbs_noct_fingerprint":"9be029f599c4df22c8eb4c2e28e23a485b50023a2f29d96f1f34ef9280dfa691","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 02:33:10 UTC","length":"7776000","start":"2018-03-19 02:33:10 UTC"},"version":"3"},"precert":true,"raw":"MIIE+zCCA+OgAwIBAgITAPoFDoPA9KqluS0h+Mjo8wcYbDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwMjMzMTBaFw0xODA2MTcwMjMzMTBaMBwxGjAYBgNVBAMTEXJlbW90ZS5ncmV1dGVyLm5sMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA071zdnmqarHPtCQfIaUfBKA2UlplRyYhttt9lWVsKK+nPQHuFnSHOpQS0uQAHtdmnEIAxG4HITinhYLmZv19/fQeP4FdlysT5JeUu/fazM4lTHQwPCxUxddwC5BChlFIq1vg+wEPSyFi062mDRyXqobJLfP5FnPrPj60Rk9JZn/4a54v2y6wGH29RN62p1UKoQos2jHnzWdyb4zTkT0UmavUWu+cunKs+nUR/WUcR0lXLWyp5wBUo2laJVrrNE6xm99H89DksQw8P3NCJn1in7DB5W6ewuQvpsEBoW6FEVN5Qn5oHGbmwz8yJOu4ZovZ47H/w3MuqPc0xsLWQ9Q3fQIDAQABo4ICLjCCAiowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQWX2eUoG4iaxDX0+O6NANtn6O6JzAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wHAYDVR0RBBUwE4IRcmVtb3RlLmdyZXV0ZXIubmwwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAM8HsKHLnDWBFNtQquDxJ0GNpQfEfW2d1Qz5Yr98N3zdzjWkDkeqdwanSIMoU6lY8I/1bSU22wTWKElKumAP6F6PKfDePa0jKDMFBSZk4hpKuD/Poehy+MUmFarVYttvKOQa+eoii16dk5OdOyoWNK+p92zM3muwGflmRUj49YOZ53NaeGXYz+oLFyCz5UZxXfhgnhIqlHD+POnReuK/i0b4HpEU3V1K/5yTy6NG2N2Oag7Tv/A7yOJmNEQj0zzllV00/oH8Ik1twWd3b5ukzUi4FpAYVQduSOgrDx/HEsrQRFnfnU0ZhtU3I2AcCLuxfNu7JjXPxXgHINgDVg+xS6A==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 08:08:34 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 07:33:57 UTC","ct_to_censys_at":"2018-07-30 22:10:24 UTC","index":"15565405"}},"fingerprint_sha256":"abc5804271002b2760698b0d670bacd8e5466497b45dd7a1ae827315f4d1348b","metadata":{"added_at":"2018-03-19 08:08:34 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 09:45:19 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 12:59:03 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["atlantacommercialgroup.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"ca73b95ac2ca49457cd602bcff07783e943148ff"},"fingerprint_md5":"4df813533b4ab85d9ebb84d90eae93cd","fingerprint_sha1":"921dc6634019dd5c4985e4a4c6859f900ff77e9d","fingerprint_sha256":"abc5804271002b2760698b0d670bacd8e5466497b45dd7a1ae827315f4d1348b","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["atlantacommercialgroup.com"],"redacted":false,"serial_number":"21803617057177668218364472339235970394233330","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"MXZ/0x4uiq50l7BQSZLYMN9kPnz+CRRIATfwDYSxocp5RPl3AUdwya/foLMEwK8fh+pKyDGndJ4cMqnY/o+FhoCRH0lUFBT1YdV2qOWct0J/8mAoePJ5x+kikzAbtMAvxdOiBYMciCSkQ+IBk5gnipMh6elX5aeMTpTpqqFZ1QnUiC3xNXNVGkbyEO/Ooe7vcGNnOaPc0U+WzrkoFbBLcOgd2fDyroF0q9xvM7Mw1sfZQTK0LxqtgkyhW7CWuZcCnhERmy4GLiNlaO+MXve1fzqnC1PDuccMNx55ia8HXinY4xaMEwtCXd72N0g1/JXo76JqTjvE+Ns8l71bhYgQ/Q=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"5cc93ec5bf7dfec91c1b2d59d6004f29bfa24a30e92a2f9989d277cb13ef76af","subject":{"common_name":["atlantacommercialgroup.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=atlantacommercialgroup.com","subject_key_info":{"fingerprint_sha256":"464de2ce7fc242b25e76b70e95dda86d354d848864dfd32bb5a2abcae56fbd8a","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"qcLW4ENz+oKu00BBurvZuI7zU4mPVrlwaHVwnc8W/qhMNQTrrK99ER8AvP4du6WATzuMFi4BOWSSrqUXhXDapSbKssqbUQYbo77/sYqNhGfenCRA66OaruUBnHoS2I0eStfLREmofEA42axdr7x4+twID1hLuZ/u7RVr4kDkTADP4J6lLGHIeU5zkB1bpwekPtVh1fJ9/OlUVStH9DItOAa9wQHwMKGPWbe6PmHH/3il6+KfkBthnek0cuxINn6XN5cZlNbqKefYIAkvDJxru7MSJ/GU7bfP9X/EvZuS+MTCqQns/E0+wKmdf5fRLI/nnP25RUWzD1b9ZTnIJ2fNaQ=="}},"tbs_fingerprint":"f51f459175457f44230ac0aea8bfe3f98c1a28c201a663ce29bbcc825560563d","tbs_noct_fingerprint":"e269f23cd954c389e2f80a6115116a53d07fbd477d4801980dd850db91e5a3b7","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 06:33:57 UTC","length":"7776000","start":"2018-03-19 06:33:57 UTC"},"version":"3"},"precert":true,"raw":"MIIFDTCCA/WgAwIBAgITAPpLElqjF4B6hGju2HBvPEIZ8jANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwNjMzNTdaFw0xODA2MTcwNjMzNTdaMCUxIzAhBgNVBAMTGmF0bGFudGFjb21tZXJjaWFsZ3JvdXAuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqcLW4ENz+oKu00BBurvZuI7zU4mPVrlwaHVwnc8W/qhMNQTrrK99ER8AvP4du6WATzuMFi4BOWSSrqUXhXDapSbKssqbUQYbo77/sYqNhGfenCRA66OaruUBnHoS2I0eStfLREmofEA42axdr7x4+twID1hLuZ/u7RVr4kDkTADP4J6lLGHIeU5zkB1bpwekPtVh1fJ9/OlUVStH9DItOAa9wQHwMKGPWbe6PmHH/3il6+KfkBthnek0cuxINn6XN5cZlNbqKefYIAkvDJxru7MSJ/GU7bfP9X/EvZuS+MTCqQns/E0+wKmdf5fRLI/nnP25RUWzD1b9ZTnIJ2fNaQIDAQABo4ICNzCCAjMwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTKc7lawspJRXzWArz/B3g+lDFI/zAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wJQYDVR0RBB4wHIIaYXRsYW50YWNvbW1lcmNpYWxncm91cC5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAMXZ/0x4uiq50l7BQSZLYMN9kPnz+CRRIATfwDYSxocp5RPl3AUdwya/foLMEwK8fh+pKyDGndJ4cMqnY/o+FhoCRH0lUFBT1YdV2qOWct0J/8mAoePJ5x+kikzAbtMAvxdOiBYMciCSkQ+IBk5gnipMh6elX5aeMTpTpqqFZ1QnUiC3xNXNVGkbyEO/Ooe7vcGNnOaPc0U+WzrkoFbBLcOgd2fDyroF0q9xvM7Mw1sfZQTK0LxqtgkyhW7CWuZcCnhERmy4GLiNlaO+MXve1fzqnC1PDuccMNx55ia8HXinY4xaMEwtCXd72N0g1/JXo76JqTjvE+Ns8l71bhYgQ/Q==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 02:54:27 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 02:12:57 UTC","ct_to_censys_at":"2018-07-30 22:09:53 UTC","index":"15555573"}},"fingerprint_sha256":"0f6549485cac713760aae1d014729103e56d77845a9757627bd878b2b0c8f29c","metadata":{"added_at":"2018-03-19 02:54:27 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 13:04:27 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 17:08:26 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["demo12025.ssl-test1.org"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"7ca67810f3037b3d00df97055911a1aa348f4655"},"fingerprint_md5":"66554292313c1e31dbcf2670ad9774d4","fingerprint_sha1":"af77d84738530580606be0845f6bca471a733dc0","fingerprint_sha256":"0f6549485cac713760aae1d014729103e56d77845a9757627bd878b2b0c8f29c","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["demo12025.ssl-test1.org"],"redacted":false,"serial_number":"21847649365029701203446308892371893233653373","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"J5YcBXfj71eLs5OH0vLYuSssFxjoQrwYSYSm7HE/AKSVXIAtXc5ufZm6qq3ws1qeXoyjEN/+4bHBAnbPErhYSNug+O09L+LYcuQxm9db1LNA4qCUp2N8jbXj1rqqQxt+kC/RwPmb7SbGbHGpf9LtRbQVlfbn2DDt3V2kkOpR/rODZGNBAF7rj4wuJujaboU2xr0SDOreLSn8X4YEF4kFLgSvjKnVQ5rwZFP4++xllt91lxyCDiudIMp7VP/TVdIuB7tzDhFm50j8tyLoFx5i2LlucycfKkhr42LF+6KDG+WJg3GcoQ1FEhxdZ7/xwHoMdOrt0sDc6PB7nbWNFjflKQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"ecc9b59b551ccf62bc235c8a9338d5f03ea86ae4eb184bd67996f679d71ae323","subject":{"common_name":["demo12025.ssl-test1.org"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=demo12025.ssl-test1.org","subject_key_info":{"fingerprint_sha256":"1348bd97e189a35f80a98b847dfb13bc137f776b0c19d7e73b892a300b908ac8","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"y19ffcr2+dMTj9OMsBHeoGjixxii6hzXbVZmPLQ1KLvzOtOOETCuo3k/OdLCEA0ggkJ4kASFDh5BNZuhiPVKQC3arWI0IiNyEs8P8Ik/3UtFw3B2SkQfqCaaEPd/iGwZuhMCZb5BNDtgIKuaCOrYTcnWIlBW7SG1VQ52DMqOeBqnUNxdjhXq8dzCxssHpCMwYVrbahGdYSpMTPKv3UnsscwFPQBJ9rhRvsvV26xGEcJxq890pmHfoKQ/IpqxL1wJoAXYAQT8QN/aeUBUHkC2N4MLsp5pd2BlubXY83yuxg+6DLP7p8LMFe5MB2cEo4UCrTbKKOTR/yX/Lfrte+cMLQ=="}},"tbs_fingerprint":"e700b06858f3f1eae7e2383ec5cf7e36dc23002c3dc6fc4eab3d21dc2a620f73","tbs_noct_fingerprint":"10199e9544bf93438ed7a7e49a810e27c35f93eddf9af158bef10753ded9ff6b","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 01:12:57 UTC","length":"7776000","start":"2018-03-19 01:12:57 UTC"},"version":"3"},"precert":true,"raw":"MIIFBzCCA++gAwIBAgITAPrMeJSoiYCBZFyh03NyucwWfTANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwMTEyNTdaFw0xODA2MTcwMTEyNTdaMCIxIDAeBgNVBAMTF2RlbW8xMjAyNS5zc2wtdGVzdDEub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy19ffcr2+dMTj9OMsBHeoGjixxii6hzXbVZmPLQ1KLvzOtOOETCuo3k/OdLCEA0ggkJ4kASFDh5BNZuhiPVKQC3arWI0IiNyEs8P8Ik/3UtFw3B2SkQfqCaaEPd/iGwZuhMCZb5BNDtgIKuaCOrYTcnWIlBW7SG1VQ52DMqOeBqnUNxdjhXq8dzCxssHpCMwYVrbahGdYSpMTPKv3UnsscwFPQBJ9rhRvsvV26xGEcJxq890pmHfoKQ/IpqxL1wJoAXYAQT8QN/aeUBUHkC2N4MLsp5pd2BlubXY83yuxg+6DLP7p8LMFe5MB2cEo4UCrTbKKOTR/yX/Lfrte+cMLQIDAQABo4ICNDCCAjAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBR8pngQ8wN7PQDflwVZEaGqNI9GVTAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wIgYDVR0RBBswGYIXZGVtbzEyMDI1LnNzbC10ZXN0MS5vcmcwgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAJ5YcBXfj71eLs5OH0vLYuSssFxjoQrwYSYSm7HE/AKSVXIAtXc5ufZm6qq3ws1qeXoyjEN/+4bHBAnbPErhYSNug+O09L+LYcuQxm9db1LNA4qCUp2N8jbXj1rqqQxt+kC/RwPmb7SbGbHGpf9LtRbQVlfbn2DDt3V2kkOpR/rODZGNBAF7rj4wuJujaboU2xr0SDOreLSn8X4YEF4kFLgSvjKnVQ5rwZFP4++xllt91lxyCDiudIMp7VP/TVdIuB7tzDhFm50j8tyLoFx5i2LlucycfKkhr42LF+6KDG+WJg3GcoQ1FEhxdZ7/xwHoMdOrt0sDc6PB7nbWNFjflKQ==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 06:23:42 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 05:48:57 UTC","ct_to_censys_at":"2018-07-30 22:10:12 UTC","index":"15561835"}},"fingerprint_sha256":"c6cedeb9a8596b7dd5ce12432568d3a38a6b2ee263ca1f0684c631f78af96dc7","metadata":{"added_at":"2018-03-19 06:23:42 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 05:13:26 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 07:29:39 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["atlantacommercialgroup.com"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"3f769da2506ee2dc0764a7f32fc41d9a9e14d21a"},"fingerprint_md5":"da0b023b022c82851044184e1b27e1c5","fingerprint_sha1":"4f92d8a8dc95eb1c13d4780237fd83253a6814a5","fingerprint_sha256":"c6cedeb9a8596b7dd5ce12432568d3a38a6b2ee263ca1f0684c631f78af96dc7","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["atlantacommercialgroup.com"],"redacted":false,"serial_number":"21809250010883116236416605163458877229895218","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"FFT4SLoh2oed0U/2m15WSX1QybxeKJ6RyxWDavk/EKCsLdYz0A9HRF2EJ+KwrFPfnkiG0i3aJmJBsmy269i+LnHAzVGWCdjvaEOf0eswumPO6ZhkBSi/Dw7Q3AJvDOoufVmQJJa+BKNzLm9bLemopg0b8+lj3mG2diXrbMrvHq2ZWT4CWrbWNJ6E4Rat2JKSvvpLXZxbbaWWmJqNtS4BCGBzkYVxZ8AS4LA0Wdw1nd7X56ReFpppz8tRWKSaT/WngwfvZmMGbnMzDL5CpFoEFdi8w+/t5tVz/S1GZVq+qtNKTTqIJ0hC1Irzn1i7ZuNRIHZy1FgrBjwIN9WTWPoWSA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"3bd32e4fe90ee9fe69cb53d2b685cb7c1ff2509533f9184dddc7beed14b93ac4","subject":{"common_name":["atlantacommercialgroup.com"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=atlantacommercialgroup.com","subject_key_info":{"fingerprint_sha256":"957eced1f2b979840812e691c7b9136284c8e69c772a2770881042ce0d44b35f","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"0KdHEzWldlOysW5BYV1pkvKsfP2zScd2k+Hat/dacTdMojoy7KgAzMSA5NSjFpRYaLU5Pjl4WQgvQCG20xSRlpNJuJRA+VL29B4lDZnHaeRK6J3ceAybBaC5flW/2XTSM5olmCLChwxrC0G1ku24cuuugo/hWQE5Ty3nr5Zcf0VJnFElm8yikdtGSXYMTsDMKRdPEBfEpvrSMVr7t7GYWWZmHziBCBLzBtvydGy7qkiqaQoFEut5gKCgqRIAm86WbIG/IweekK246MPWD/+kodYt3pPN105YTnvtBN4B8n+YiRVPwSHgg/KE7wZn12J3LBdkaS4XTZHntqCRIbS5aw=="}},"tbs_fingerprint":"174d2ba4f09559ed7d041bd916810fb40f1ec10f98c46db5e0ad572d9cbedf5d","tbs_noct_fingerprint":"250f9ad9adb5e4f4f7d8e03e531467da8ef756b12c0d9f0bca9854fc7ccaa591","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 04:48:57 UTC","length":"7776000","start":"2018-03-19 04:48:57 UTC"},"version":"3"},"precert":true,"raw":"MIIFDTCCA/WgAwIBAgITAPpboB4PCd3FHTmAA3lAQAAOMjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwNDQ4NTdaFw0xODA2MTcwNDQ4NTdaMCUxIzAhBgNVBAMTGmF0bGFudGFjb21tZXJjaWFsZ3JvdXAuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0KdHEzWldlOysW5BYV1pkvKsfP2zScd2k+Hat/dacTdMojoy7KgAzMSA5NSjFpRYaLU5Pjl4WQgvQCG20xSRlpNJuJRA+VL29B4lDZnHaeRK6J3ceAybBaC5flW/2XTSM5olmCLChwxrC0G1ku24cuuugo/hWQE5Ty3nr5Zcf0VJnFElm8yikdtGSXYMTsDMKRdPEBfEpvrSMVr7t7GYWWZmHziBCBLzBtvydGy7qkiqaQoFEut5gKCgqRIAm86WbIG/IweekK246MPWD/+kodYt3pPN105YTnvtBN4B8n+YiRVPwSHgg/KE7wZn12J3LBdkaS4XTZHntqCRIbS5awIDAQABo4ICNzCCAjMwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQ/dp2iUG7i3Adkp/MvxB2anhTSGjAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wJQYDVR0RBB4wHIIaYXRsYW50YWNvbW1lcmNpYWxncm91cC5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAFFT4SLoh2oed0U/2m15WSX1QybxeKJ6RyxWDavk/EKCsLdYz0A9HRF2EJ+KwrFPfnkiG0i3aJmJBsmy269i+LnHAzVGWCdjvaEOf0eswumPO6ZhkBSi/Dw7Q3AJvDOoufVmQJJa+BKNzLm9bLemopg0b8+lj3mG2diXrbMrvHq2ZWT4CWrbWNJ6E4Rat2JKSvvpLXZxbbaWWmJqNtS4BCGBzkYVxZ8AS4LA0Wdw1nd7X56ReFpppz8tRWKSaT/WngwfvZmMGbnMzDL5CpFoEFdi8w+/t5tVz/S1GZVq+qtNKTTqIJ0hC1Irzn1i7ZuNRIHZy1FgrBjwIN9WTWPoWSA==","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 08:27:05 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 07:56:10 UTC","ct_to_censys_at":"2018-07-30 22:10:27 UTC","index":"15566078"}},"fingerprint_sha256":"8db81ba78f3921a6781e0e0723049a9d29904899b71b53d6669cf86f9bfe10fb","metadata":{"added_at":"2018-03-19 08:27:05 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 20:26:07 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-29 04:07:41 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["phpmyadmin.sborislav.xyz"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"0d01d2854dcbda5e8e63e89f68bd3f44f6962716"},"fingerprint_md5":"ec38316cb5078ced88153de28581b1e4","fingerprint_sha1":"5fa68f4dccd398a026e3f37ba34bc4fe6814a160","fingerprint_sha256":"8db81ba78f3921a6781e0e0723049a9d29904899b71b53d6669cf86f9bfe10fb","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["phpmyadmin.sborislav.xyz"],"redacted":false,"serial_number":"21849027906833156888590369023548592245490469","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"NLr+gcgbNQ9ZvWMRVMeD761X+4hhjdlol+aHyU2bW82ALL2X4XlxqWEywQJj0/mtadpYi0ICzbTcEDNs7kscNo2NVtu/hfH6wzROwEg7Vgp3o/fqmF6ZXXv3MCAJ3waSlmmso4tJkPTpmyawySYk96TShw+5GQGqmKEnB2xx2l6pVJGlH8iBA+5EqR5mAPKwn8OKcPsBJltQez7kFj9FORdKRdsltiGVFP1RTi3IJfbTFjPTpb3iEo5sk47s0fVSpohdEut3QMw+2kSw8DoywIV++Lj4bKc9p8Xpf5V6+8Am1j4GkT1S4XvrDlpMPl6jCs7rUMrfzhtJfG0tYot5KQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"0f5155fcab1b53f35b3be323d9039a4ba3a4fa60ec3a8355328356a916804ef9","subject":{"common_name":["phpmyadmin.sborislav.xyz"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=phpmyadmin.sborislav.xyz","subject_key_info":{"fingerprint_sha256":"f0e0053bf35494e6e6eb5de7a76d3755a9b4a41ce7faf0f361b4219695c2ab94","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"tzM6jJzl/oZpNAZQ3S2RRhk8ZcN5eQViazFjxUeW3TV6JkB/7MfcS2M95CQREXXC8iNDjGWxmzYfQWawbzdxpGmobN6/UTLLftb+d64EF71ecUmSfS7ZmC/T/eseGv6AGy68T5xXakrJgweJjXEwjSn+ica1T/18T4NK6jStzc2Z5aWYDgTsG/h/xEO0ubXWOaTaJ933WYDIZWOAauUzkykG6ipnasUTObDpIEJAD+p/3bmaby/z7NcT/lTFt6ZfBCHmgDX3zTLVjN/x3AR8FEx2iU6Gi3MftW/mGwSOKT0OzL0YpNJPCgRdw0oq319vmEXNJClsTrT8m6JqOV700w=="}},"tbs_fingerprint":"7e72da9faa7bd3013610b3a71625c579a5db1570b231d4604dfff44f93bc6ce0","tbs_noct_fingerprint":"a6bc3f2911a8c5ef77eedd94aa366b4346e62a7d8e62f2c484c53e20f485a816","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 06:56:10 UTC","length":"7776000","start":"2018-03-19 06:56:10 UTC"},"version":"3"},"precert":true,"raw":"MIIFCTCCA/GgAwIBAgITAPrQha4m+NjOgz2oIi9/V6TDJTANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkwNjU2MTBaFw0xODA2MTcwNjU2MTBaMCMxITAfBgNVBAMTGHBocG15YWRtaW4uc2JvcmlzbGF2Lnh5ejCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczOoyc5f6GaTQGUN0tkUYZPGXDeXkFYmsxY8VHlt01eiZAf+zH3EtjPeQkERF1wvIjQ4xlsZs2H0FmsG83caRpqGzev1Eyy37W/neuBBe9XnFJkn0u2Zgv0/3rHhr+gBsuvE+cV2pKyYMHiY1xMI0p/onGtU/9fE+DSuo0rc3NmeWlmA4E7Bv4f8RDtLm11jmk2ifd91mAyGVjgGrlM5MpBuoqZ2rFEzmw6SBCQA/qf925mm8v8+zXE/5UxbemXwQh5oA1980y1Yzf8dwEfBRMdolOhotzH7Vv5hsEjik9Dsy9GKTSTwoEXcNKKt9fb5hFzSQpbE60/Juiajle9NMCAwEAAaOCAjUwggIxMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUDQHShU3L2l6OY+ifaL0/RPaWJxYwHwYDVR0jBBgwFoAUwMwDRrlYIMxccnDz4S7LIKb1aDowdwYIKwYBBQUHAQEEazBpMDIGCCsGAQUFBzABhiZodHRwOi8vb2NzcC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMCMGA1UdEQQcMBqCGHBocG15YWRtaW4uc2JvcmlzbGF2Lnh5ejCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQA0uv6ByBs1D1m9YxFUx4PvrVf7iGGN2WiX5ofJTZtbzYAsvZfheXGpYTLBAmPT+a1p2liLQgLNtNwQM2zuSxw2jY1W27+F8frDNE7ASDtWCnej9+qYXplde/cwIAnfBpKWaayji0mQ9OmbJrDJJiT3pNKHD7kZAaqYoScHbHHaXqlUkaUfyIED7kSpHmYA8rCfw4pw+wEmW1B7PuQWP0U5F0pF2yW2IZUU/VFOLcgl9tMWM9OlveISjmyTjuzR9VKmiF0S63dAzD7aRLDwOjLAhX74uPhspz2nxel/lXr7wCbWPgaRPVLhe+sOWkw+XqMKzutQyt/OG0l8bS1ii3kp","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 23:38:43 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 23:12:27 UTC","ct_to_censys_at":"2018-07-30 22:11:48 UTC","index":"15593982"}},"fingerprint_sha256":"4f35d271a38bd3765a1394c7fccf8601e9c9ac683b0a85dfc97dcb0af2619641","metadata":{"added_at":"2018-03-19 23:38:43 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-29 15:30:44 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-30 06:03:32 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["lereseauavanceidf.sncf-reseau.fr","www.lereseauavanceidf.sncf-reseau.fr"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"d46151ba0790237c6502023b0b21191bd0e5d7eb"},"fingerprint_md5":"18f3a68ccb9d73edef26587d18b62649","fingerprint_sha1":"4e602177e2d8afec99494f7378fa2e6c349ffbd2","fingerprint_sha256":"4f35d271a38bd3765a1394c7fccf8601e9c9ac683b0a85dfc97dcb0af2619641","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["lereseauavanceidf.sncf-reseau.fr","www.lereseauavanceidf.sncf-reseau.fr"],"redacted":false,"serial_number":"21837177347766682105514232657362222728852859","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"jhH7SB3fQa6HMmpVC0Rof/hv9bds8rDqJbFFJa4/HfeRREIBrGVhqP/2px48IMQfSz0NfX4rzWlb0X4cJtPpYZUEmcwkn1/Og9zgfFgVJ384xKS9Fp3ubQbM5tDTZw1H3AH2iVB/ZN5idMRec4340cRjquEWbK3P/boxzFw2Y63Xyf9cWHyoekLCcM6NoHvZxM+WV6STWlZfjPT6zs0PHvMq2Y42/itK1B7igP29tlAXb5uJYpo2GGPf6gQytRyaH2NI6RckBikNAVnzWbI24orfehRaAXsbUL49qiGL4VzJIYZoPCahljDI0ZpKEW9wkBwdf1ekhpUTWqxKE34ouA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"e292f3567f5a06ea6dfa1d4e33c8a50e82138683c2b88be3e7e8880bd4fafa2b","subject":{"common_name":["lereseauavanceidf.sncf-reseau.fr"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=lereseauavanceidf.sncf-reseau.fr","subject_key_info":{"fingerprint_sha256":"a82801f7272ca74b9a5bb5dd1d992caee206d3bea596bdc90903a2157c0fb0f7","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"oSOI+tOZtlF+r8W/EW6A8sK4lI3kWgdOGrMIhPLII8Y879H64yG4Mj7zfBRyQy4tTNPErWiJQGB6H7LH1CblMwwioOUeqWCGY8AeV/9+Tw0i1bCJrQveXRr5EjF4/A5IkT93Adu8cr5kCrIGeTLq3I5dYMcm8Y/wiIbXreoHLAYI022XRZKGT+nn0rPON2uQCBhrJTd6zF/52Q1pFFzlBN4lfm9w7RIQQfXqcsF7SX+058bcF42gKod15u7S8EylB45iYF3c7UDRmDbeeBYURcWJkK2tinwivq2PtcHzpiz6u6FMa/8eC6aquamwKnvFl4aloE24YXoZasFywSOXgQ=="}},"tbs_fingerprint":"2747453c9c764eb8960d3964bc4aef55c4ddf924435e29339c453f977eff0ce5","tbs_noct_fingerprint":"0959326d50327f49337430b11b275711e9028370ac645a440b6dd504ace4f65e","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 22:12:27 UTC","length":"7776000","start":"2018-03-19 22:12:27 UTC"},"version":"3"},"precert":true,"raw":"MIIFPzCCBCegAwIBAgITAPqtsk9+7/ofo4LTbl1Qt2O1ezANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkyMjEyMjdaFw0xODA2MTcyMjEyMjdaMCsxKTAnBgNVBAMTIGxlcmVzZWF1YXZhbmNlaWRmLnNuY2YtcmVzZWF1LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoSOI+tOZtlF+r8W/EW6A8sK4lI3kWgdOGrMIhPLII8Y879H64yG4Mj7zfBRyQy4tTNPErWiJQGB6H7LH1CblMwwioOUeqWCGY8AeV/9+Tw0i1bCJrQveXRr5EjF4/A5IkT93Adu8cr5kCrIGeTLq3I5dYMcm8Y/wiIbXreoHLAYI022XRZKGT+nn0rPON2uQCBhrJTd6zF/52Q1pFFzlBN4lfm9w7RIQQfXqcsF7SX+058bcF42gKod15u7S8EylB45iYF3c7UDRmDbeeBYURcWJkK2tinwivq2PtcHzpiz6u6FMa/8eC6aquamwKnvFl4aloE24YXoZasFywSOXgQIDAQABo4ICYzCCAl8wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTUYVG6B5AjfGUCAjsLIRkb0OXX6zAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB3BggrBgEFBQcBAQRrMGkwMgYIKwYBBQUHMAGGJmh0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnMDMGCCsGAQUFBzAChidodHRwOi8vY2VydC5zdGctaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wUQYDVR0RBEowSIIgbGVyZXNlYXVhdmFuY2VpZGYuc25jZi1yZXNlYXUuZnKCJHd3dy5sZXJlc2VhdWF2YW5jZWlkZi5zbmNmLXJlc2VhdS5mcjCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQCOEftIHd9BrocyalULRGh/+G/1t2zysOolsUUlrj8d95FEQgGsZWGo//anHjwgxB9LPQ19fivNaVvRfhwm0+lhlQSZzCSfX86D3OB8WBUnfzjEpL0Wne5tBszm0NNnDUfcAfaJUH9k3mJ0xF5zjfjRxGOq4RZsrc/9ujHMXDZjrdfJ/1xYfKh6QsJwzo2ge9nEz5ZXpJNaVl+M9PrOzQ8e8yrZjjb+K0rUHuKA/b22UBdvm4limjYYY9/qBDK1HJofY0jpFyQGKQ0BWfNZsjbiit96FFoBextQvj2qIYvhXMkhhmg8JqGWMMjRmkoRb3CQHB1/V6SGlRNarEoTfii4","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} +{"added_at":"2018-03-19 17:56:33 UTC","ct":{"google_testtube":{"added_to_ct_at":"2018-03-19 17:21:11 UTC","ct_to_censys_at":"2018-07-30 22:11:20 UTC","index":"15584453"}},"fingerprint_sha256":"c7148262724e33d9b0ea2fa67ae18775c9fc11c5f1c93ebeab443578c315ab25","metadata":{"added_at":"2018-03-19 17:56:33 UTC","parse_status":"success","parse_version":"1","post_processed":true,"post_processed_at":"2018-08-28 18:08:22 UTC","seen_in_scan":false,"source":"ct","updated_at":"2018-08-28 23:28:24 UTC"},"parents":[],"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.stg-int-x1.letsencrypt.org/"],"ocsp_urls":["http://ocsp.stg-int-x1.letsencrypt.org"]},"authority_key_id":"c0cc0346b95820cc5c7270f3e12ecb20a6f5683a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":[],"id":"2.23.140.1.2.1","user_notice":[]},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1","user_notice":[{"explicit_text":"This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/","notice_reference":[]}]}],"crl_distribution_points":[],"ct_poison":true,"extended_key_usage":{"client_auth":true,"server_auth":true,"unknown":[],"value":[]},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[],"subject_alt_name":{"directory_names":[],"dns_names":["jrm-web.fr"],"edi_party_names":[],"email_addresses":[],"ip_addresses":[],"other_names":[],"registered_ids":[],"uniform_resource_identifiers":[]},"subject_key_id":"e8a490d6cdf9dc3b5d22ffa99a146ef70469e557"},"fingerprint_md5":"679dabf1a1684b4ad47b309a8381c5f0","fingerprint_sha1":"0d31015df88666d830150388fdebc7507ec5a099","fingerprint_sha256":"c7148262724e33d9b0ea2fa67ae18775c9fc11c5f1c93ebeab443578c315ab25","issuer":{"common_name":["Fake LE Intermediate X1"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"issuer_dn":"CN=Fake LE Intermediate X1","names":["jrm-web.fr", "first_file_testdomain12", "first_file_testdomain3.gov"],"redacted":false,"serial_number":"21813491103223494347342650797518222965967678","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"0dKkylpDkk54kcaaWXKAHPXZkkRW1o8+mtXT5g7/t6ebr0fQfM9BDY1AIDtD9Ll+/0/KpUvdL//GIXwkK/R/w8ZrJ4tA4r/g8EoxxJWHpr16wYjke6FguK3VrQFBGHCU6Gij8zak1YSjhL7rNZGUi6gOLWMq3DtjFN4FqKgVsGg5nONFWuTBsEdKx9LJ5bF4tUm7qPJRS3kc/exBi1gG1DfMNVpDzMbJIcuTyNKGISXnHhuWN7EGXSX3r2rVgKwGBX4v1iDJ7eYfd6bn+bJ1W3GolRdIDImsQQB2ykUfF8IwdGSN55I+dk3VUwHdeVZHpu0awOXW2Xb5O3RvF4q47w=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"91fe4e0da702e60968c0bd845ce8905ba041419ea37d08fc5938c66ea6ec66b7","subject":{"common_name":["jrm-web.fr"],"country":[],"domain_component":[],"email_address":[],"given_name":[],"jurisdiction_country":[],"jurisdiction_locality":[],"jurisdiction_province":[],"locality":[],"organization":[],"organization_id":[],"organizational_unit":[],"postal_code":[],"province":[],"serial_number":[],"street_address":[],"surname":[]},"subject_dn":"CN=jrm-web.fr","subject_key_info":{"fingerprint_sha256":"5dc2452f4534d7d4c633f096a1c17e3f050c9f6ef19c653b39addf5aa735545b","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1MUtGN/fPEZIGaaFIu4J3Dcxj/uVUDgLYNK/ntPo/IuIXmcnJ/HNlEVVoOWYCvMbFmE5wrHx5+dMjZg7pfaUon3+agrQRy1ptVB3edb6j5Q45WoV6aqcvR3fJgkqKyumWqEWgPBlt1qfI9cP7r4aPUfV5n5HPqri8nQmlKsqTBvUVXsv5rT3IoT/XFg0gVbtozx9xn6Pwudj6zNzHGmj6AA8/h/pGPZvgoxDIUqpodg+bEwmno8ZRafHzLkqPYIIRlUYPtQ8EHKWcyr+vMovzatoUSGcvrMQIR6uC0zLN89nNshSjCWZQkdXquEP2PT7waBr0RAvWIaiS56WDHKpvw=="}},"tbs_fingerprint":"86e4f3f0e55b24b080397e138acdf4f9f7af0d8bcfb002fb4afbc6541b116357","tbs_noct_fingerprint":"52d7d1b652d4da8edf56858412bf5cbbe4705047bda056d6b61d27b391f339e5","unknown_extensions":[],"validation_level":"DV","validity":{"end":"2018-06-17 16:21:10 UTC","length":"7776000","start":"2018-03-19 16:21:10 UTC"},"version":"3"},"precert":true,"raw":"MIIE7TCCA9WgAwIBAgITAPpoFsK7dfi0qEO2Gvz8RnGLPjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxNjIxMTBaFw0xODA2MTcxNjIxMTBaMBUxEzARBgNVBAMTCmpybS13ZWIuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUxS0Y3988RkgZpoUi7gncNzGP+5VQOAtg0r+e0+j8i4heZycn8c2URVWg5ZgK8xsWYTnCsfHn50yNmDul9pSiff5qCtBHLWm1UHd51vqPlDjlahXpqpy9Hd8mCSorK6ZaoRaA8GW3Wp8j1w/uvho9R9Xmfkc+quLydCaUqypMG9RVey/mtPcihP9cWDSBVu2jPH3Gfo/C52PrM3McaaPoADz+H+kY9m+CjEMhSqmh2D5sTCaejxlFp8fMuSo9gghGVRg+1DwQcpZzKv68yi/Nq2hRIZy+sxAhHq4LTMs3z2c2yFKMJZlCR1eq4Q/Y9PvBoGvREC9YhqJLnpYMcqm/AgMBAAGjggInMIICIzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOikkNbN+dw7XSL/qZoUbvcEaeVXMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAVBgNVHREEDjAMggpqcm0td2ViLmZyMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBANHSpMpaQ5JOeJHGmllygBz12ZJEVtaPPprV0+YO/7enm69H0HzPQQ2NQCA7Q/S5fv9PyqVL3S//xiF8JCv0f8PGayeLQOK/4PBKMcSVh6a9esGI5HuhYLit1a0BQRhwlOhoo/M2pNWEo4S+6zWRlIuoDi1jKtw7YxTeBaioFbBoOZzjRVrkwbBHSsfSyeWxeLVJu6jyUUt5HP3sQYtYBtQ3zDVaQ8zGySHLk8jShiEl5x4bljexBl0l969q1YCsBgV+L9Ygye3mH3em5/mydVtxqJUXSAyJrEEAdspFHxfCMHRkjeeSPnZN1VMB3XlWR6btGsDl1tl2+Tt0bxeKuO8=","tags":["ct","expired","precert"],"validation":{"apple":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"google_ct_primary":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"microsoft":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false},"nss":{"blacklisted":false,"had_trusted_path":false,"in_revocation_set":false,"parents":[],"paths":[],"trusted_path":false,"type":"unknown","valid":false,"was_valid":false,"whitelisted":false}},"zlint":{"errors_present":false,"fatals_present":false,"lints":{"e_basic_constraints_not_critical":"na","e_ca_common_name_missing":"na","e_ca_country_name_invalid":"na","e_ca_country_name_missing":"na","e_ca_crl_sign_not_set":"na","e_ca_is_ca":"na","e_ca_key_cert_sign_not_set":"na","e_ca_key_usage_missing":"na","e_ca_key_usage_not_critical":"na","e_ca_organization_name_missing":"na","e_ca_subject_field_empty":"na","e_cab_dv_conflicts_with_locality":"pass","e_cab_dv_conflicts_with_org":"pass","e_cab_dv_conflicts_with_postal":"pass","e_cab_dv_conflicts_with_province":"pass","e_cab_dv_conflicts_with_street":"pass","e_cab_iv_requires_personal_name":"na","e_cab_ov_requires_org":"na","e_cert_contains_unique_identifier":"pass","e_cert_extensions_version_not_3":"pass","e_cert_policy_iv_requires_country":"na","e_cert_policy_iv_requires_province_or_locality":"na","e_cert_policy_ov_requires_country":"na","e_cert_policy_ov_requires_province_or_locality":"na","e_cert_unique_identifier_version_not_2_or_3":"na","e_distribution_point_incomplete":"na","e_dnsname_bad_character_in_label":"pass","e_dnsname_contains_bare_iana_suffix":"pass","e_dnsname_empty_label":"pass","e_dnsname_hyphen_in_sld":"pass","e_dnsname_label_too_long":"pass","e_dnsname_left_label_wildcard_correct":"pass","e_dnsname_not_valid_tld":"pass","e_dnsname_underscore_in_sld":"pass","e_dnsname_wildcard_only_in_left_label":"pass","e_dsa_correct_order_in_subgroup":"na","e_dsa_improper_modulus_or_divisor_size":"na","e_dsa_params_missing":"na","e_dsa_shorter_than_2048_bits":"na","e_dsa_unique_correct_representation":"na","e_ec_improper_curves":"na","e_ev_business_category_missing":"na","e_ev_country_name_missing":"na","e_ev_organization_name_missing":"na","e_ev_serial_number_missing":"na","e_ev_valid_time_too_long":"na","e_ext_aia_marked_critical":"pass","e_ext_authority_key_identifier_critical":"pass","e_ext_authority_key_identifier_missing":"pass","e_ext_authority_key_identifier_no_key_identifier":"pass","e_ext_cert_policy_disallowed_any_policy_qualifier":"pass","e_ext_cert_policy_duplicate":"pass","e_ext_cert_policy_explicit_text_ia5_string":"pass","e_ext_cert_policy_explicit_text_too_long":"pass","e_ext_duplicate_extension":"pass","e_ext_freshest_crl_marked_critical":"na","e_ext_ian_dns_not_ia5_string":"na","e_ext_ian_empty_name":"na","e_ext_ian_no_entries":"na","e_ext_ian_rfc822_format_invalid":"na","e_ext_ian_space_dns_name":"na","e_ext_ian_uri_format_invalid":"na","e_ext_ian_uri_host_not_fqdn_or_ip":"na","e_ext_ian_uri_not_ia5":"na","e_ext_ian_uri_relative":"na","e_ext_key_usage_cert_sign_without_ca":"pass","e_ext_key_usage_without_bits":"pass","e_ext_name_constraints_not_critical":"na","e_ext_name_constraints_not_in_ca":"na","e_ext_policy_constraints_empty":"na","e_ext_policy_constraints_not_critical":"na","e_ext_policy_map_any_policy":"na","e_ext_san_contains_reserved_ip":"pass","e_ext_san_directory_name_present":"pass","e_ext_san_dns_name_too_long":"pass","e_ext_san_dns_not_ia5_string":"pass","e_ext_san_edi_party_name_present":"pass","e_ext_san_empty_name":"pass","e_ext_san_missing":"pass","e_ext_san_no_entries":"pass","e_ext_san_not_critical_without_subject":"pass","e_ext_san_other_name_present":"pass","e_ext_san_registered_id_present":"pass","e_ext_san_rfc822_format_invalid":"pass","e_ext_san_rfc822_name_present":"pass","e_ext_san_space_dns_name":"pass","e_ext_san_uniform_resource_identifier_present":"pass","e_ext_san_uri_format_invalid":"pass","e_ext_san_uri_host_not_fqdn_or_ip":"pass","e_ext_san_uri_not_ia5":"pass","e_ext_san_uri_relative":"pass","e_ext_subject_directory_attr_critical":"na","e_ext_subject_key_identifier_critical":"pass","e_ext_subject_key_identifier_missing_ca":"na","e_generalized_time_does_not_include_seconds":"na","e_generalized_time_includes_fraction_seconds":"na","e_generalized_time_not_in_zulu":"na","e_ian_bare_wildcard":"na","e_ian_dns_name_includes_null_char":"na","e_ian_dns_name_starts_with_period":"na","e_ian_wildcard_not_first":"na","e_inhibit_any_policy_not_critical":"na","e_international_dns_name_not_unicode":"pass","e_invalid_certificate_version":"pass","e_issuer_field_empty":"pass","e_name_constraint_empty":"na","e_name_constraint_maximum_not_absent":"na","e_name_constraint_minimum_non_zero":"na","e_old_root_ca_rsa_mod_less_than_2048_bits":"na","e_old_sub_ca_rsa_mod_less_than_1024_bits":"na","e_old_sub_cert_rsa_mod_less_than_1024_bits":"na","e_path_len_constraint_improperly_included":"pass","e_path_len_constraint_zero_or_less":"pass","e_public_key_type_not_allowed":"pass","e_root_ca_extended_key_usage_present":"na","e_root_ca_key_usage_must_be_critical":"na","e_root_ca_key_usage_present":"na","e_rsa_exp_negative":"pass","e_rsa_mod_less_than_2048_bits":"pass","e_rsa_no_public_key":"pass","e_rsa_public_exponent_not_odd":"pass","e_rsa_public_exponent_too_small":"pass","e_san_bare_wildcard":"pass","e_san_dns_name_includes_null_char":"pass","e_san_dns_name_starts_with_period":"pass","e_san_wildcard_not_first":"pass","e_serial_number_longer_than_20_octets":"pass","e_serial_number_not_positive":"pass","e_signature_algorithm_not_supported":"pass","e_sub_ca_aia_does_not_contain_ocsp_url":"na","e_sub_ca_aia_marked_critical":"na","e_sub_ca_aia_missing":"na","e_sub_ca_certificate_policies_missing":"na","e_sub_ca_crl_distribution_points_does_not_contain_url":"na","e_sub_ca_crl_distribution_points_marked_critical":"na","e_sub_ca_crl_distribution_points_missing":"na","e_sub_cert_aia_does_not_contain_ocsp_url":"pass","e_sub_cert_aia_marked_critical":"pass","e_sub_cert_aia_missing":"pass","e_sub_cert_cert_policy_empty":"pass","e_sub_cert_certificate_policies_missing":"pass","e_sub_cert_country_name_must_appear":"pass","e_sub_cert_crl_distribution_points_does_not_contain_url":"na","e_sub_cert_crl_distribution_points_marked_critical":"na","e_sub_cert_eku_missing":"pass","e_sub_cert_eku_server_auth_client_auth_missing":"pass","e_sub_cert_given_name_surname_contains_correct_policy":"na","e_sub_cert_key_usage_cert_sign_bit_set":"pass","e_sub_cert_key_usage_crl_sign_bit_set":"pass","e_sub_cert_locality_name_must_appear":"pass","e_sub_cert_locality_name_must_not_appear":"pass","e_sub_cert_not_is_ca":"pass","e_sub_cert_or_sub_ca_using_sha1":"pass","e_sub_cert_postal_code_must_not_appear":"pass","e_sub_cert_province_must_appear":"pass","e_sub_cert_province_must_not_appear":"pass","e_sub_cert_street_address_should_not_exist":"pass","e_subject_common_name_max_length":"pass","e_subject_common_name_not_from_san":"pass","e_subject_contains_noninformational_value":"pass","e_subject_contains_reserved_ip":"pass","e_subject_country_not_iso":"pass","e_subject_empty_without_san":"pass","e_subject_info_access_marked_critical":"na","e_subject_locality_name_max_length":"pass","e_subject_not_dn":"pass","e_subject_organization_name_max_length":"pass","e_subject_organizational_unit_name_max_length":"pass","e_subject_state_name_max_length":"pass","e_utc_time_does_not_include_seconds":"pass","e_utc_time_not_in_zulu":"pass","e_validity_time_not_positive":"pass","e_wrong_time_format_pre2050":"pass","n_ca_digital_signature_not_set":"na","n_contains_redacted_dnsname":"pass","n_sub_ca_eku_not_technically_constrained":"na","n_subject_common_name_included":"notice","w_distribution_point_missing_ldap_or_uri":"na","w_dnsname_underscore_in_trd":"pass","w_dnsname_wildcard_left_of_public_suffix":"pass","w_eku_critical_improperly":"pass","w_ext_aia_access_location_missing":"pass","w_ext_cert_policy_contains_noticeref":"pass","w_ext_cert_policy_explicit_text_includes_control":"pass","w_ext_cert_policy_explicit_text_not_nfc":"pass","w_ext_cert_policy_explicit_text_not_utf8":"pass","w_ext_crl_distribution_marked_critical":"na","w_ext_ian_critical":"na","w_ext_key_usage_not_critical":"pass","w_ext_policy_map_not_critical":"na","w_ext_policy_map_not_in_cert_policy":"na","w_ext_san_critical_with_subject_dn":"pass","w_ext_subject_key_identifier_missing_sub_cert":"pass","w_ian_iana_pub_suffix_empty":"na","w_issuer_dn_leading_whitespace":"pass","w_issuer_dn_trailing_whitespace":"pass","w_multiple_issuer_rdn":"pass","w_name_constraint_on_edi_party_name":"na","w_name_constraint_on_registered_id":"na","w_name_constraint_on_x400":"na","w_root_ca_basic_constraints_path_len_constraint_field_present":"na","w_root_ca_contains_cert_policy":"na","w_rsa_mod_factors_smaller_than_752":"pass","w_rsa_mod_not_odd":"pass","w_rsa_public_exponent_not_in_range":"pass","w_san_iana_pub_suffix_empty":"pass","w_serial_number_low_entropy":"pass","w_sub_ca_aia_does_not_contain_issuing_ca_url":"na","w_sub_ca_certificate_policies_marked_critical":"na","w_sub_ca_eku_critical":"na","w_sub_ca_name_constraints_not_critical":"na","w_sub_cert_aia_does_not_contain_issuing_ca_url":"pass","w_sub_cert_certificate_policies_marked_critical":"pass","w_sub_cert_eku_extra_values":"pass","w_sub_cert_sha1_expiration_too_long":"na","w_subject_dn_leading_whitespace":"pass","w_subject_dn_trailing_whitespace":"pass"},"notices_present":true,"version":"3","warnings_present":false}} diff --git a/backend/src/tasks/helpers/__mocks__/censysIpv4Sample.json b/backend/src/tasks/helpers/__mocks__/censysIpv4Sample.json new file mode 100644 index 00000000..52876b0b --- /dev/null +++ b/backend/src/tasks/helpers/__mocks__/censysIpv4Sample.json @@ -0,0 +1,130 @@ +{"address":"210.7.24.59","ipint":"3523680315","p8080":{"http":{"get":{"body":"\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\t
\r\n \t
\r\n
\r\n
\r\n\t\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n\t\r\n\t
\r\n\t\r\n\t
\r\n\t\t\r\n\t\t
\r\n \t
\r\n
\r\n\t\t\t\t\t
预览
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n
\r\n\t\t\t\t\t
回放
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n
\r\n\t\t\t\t\t
参数设置
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n
\r\n\t\t\t\t\t
录像路径
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n
\r\n\t\t\t\t\t
注销
\r\n\t\t\t\t
\r\n
\r\n
\r\n\t\t\r\n\t\t
\r\n\t\t
\r\n\t
\r\n\t\r\n\t
\r\n\t\t\r\n\t\t
\r\n \t\r\n\t\t\t\r\n\t\t\t
\r\n \r\n
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t
\r\n\t\t\t\t
\r\n \t
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\t\t\t\t\t\t\t
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\t\t\t\t\t\t\t
\r\n
\r\n
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n
\r\n
\r\n
\r\n\t\t\t\t\t\t\t
\r\n
\r\n
\r\n
\r\n
\r\n\t\t\t\t\t\t\t
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n
\r\n
\r\n
\r\n\t\t\t\t\t
\r\n \t\r\n
\r\n \r\n
\r\n \t
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\t\r\n
\t\r\n
\t\r\n
\t\r\n
\t\r\n
\t\r\n
\t\r\n
\r\n
\t\r\n
\t\r\n
\t\r\n
\r\n\t\t\t\t\t\t\t\t\t
\r\n
\r\n
\r\n \t
\r\n
\r\n
\r\n
\r\n
\r\n
\t\r\n
\r\n
\r\n\t\t\t\t
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\t\t\t
\r\n \r\n \t\t\t
\r\n\t\t\t\r\n\t\t
\r\n\t
\r\n \r\n
\r\n
\r\n\t
\r\n\t\t
  • \r\n\t
    \r\n\t
    \r\n \t
    \r\n
    \r\n \t\r\n
    \r\n
    \r\n\t\t\r\n\t\t\r\n\t\r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t
  • \r\n\t
    \r\n\t
    \r\n\t\t
  • \r\n\t\t\t\r\n\t\t
  • \r\n\t\t
  • \r\n\t\t\t\r\n\t\t\t\r\n\t\t
  • \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t
  • \r\n\t
    \r\n\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t
  • \r\n\t
    \r\n\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t
  • \r\n\t
    \r\n\t\r\n\t
    \r\n\t\t
  • \r\n\t\t\t\r\n\t\t
  • \r\n\t\t
  • \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t
  • \r\n\t
    \r\n
    \r\n\r\n\r\n\r\n","body_sha256":"f833726f1ab4fbd04453bc86b4ada85ac19bd9323c98b5eae3b1da8fe574fe3c","headers":{"accept_ranges":"bytes","connection":"Keep-Alive","content_length":"21570","content_type":"text/html","last_modified":"Fri, 09 Dec 2016 09:23:50 GMT","server":"Boa/0.94.14rc21","unknown":[{"key":"date","value":"Fri, 10 Jul 2020 13:02:10 GMT"},{"key":"keep_alive","value":"timeout=10, max=1000"}]},"metadata":{"description":"Boa 0.94.14rc21","product":"Boa","version":"0.94.14rc21"},"status_code":"200","status_line":"200 OK","timestamp":"2020-07-10T13:02:12Z"}}},"updated_at":"2020-07-10T13:02:12Z","ip":"210.7.24.59","location":{"country_code":"FJ","continent":"Oceania","timezone":"Pacific/Fiji","latitude":-18.0,"longitude":175.0,"registered_country":"Fiji","registered_country_code":"FJ","country":"Fiji"},"autonomous_system":{"description":"IS-FJ-AS Telecom Fiji Limited","routed_prefix":"210.7.0.0/19","asn":"4638","country_code":"FJ","name":"IS-FJ-AS Telecom Fiji Limited","path":["11164","4637","1221","45349","4638"]},"ports":["8080"],"protocols":["8080/http"],"ipinteger":"991430610","version":"0","tags":["http"]} +{"address":"78.169.217.1","ipint":"1319753985","updated_at":"2020-07-05T15:41:45Z","ip":"78.169.217.1","location":{"country_code":"TR","continent":"Asia","city":"Akalan","postal_code":"55400","timezone":"Europe/Istanbul","province":"Samsun","latitude":41.2748,"longitude":35.7197,"registered_country":"Turkey","registered_country_code":"TR","country":"Turkey"},"autonomous_system":{"description":"TTNET","routed_prefix":"78.169.128.0/17","asn":"9121","country_code":"TR","name":"TTNET","path":["7018","3320","9121"]},"ports":["53"],"protocols":["53/dns"],"ipinteger":"31041870","version":"0","p53":{"dns":{"lookup":{"errors":false,"open_resolver":false,"questions":[{"name":"c.afekv.com","type":"A"}],"resolves_correctly":false,"support":true,"timestamp":"2020-07-05T15:41:45Z"}}},"tags":["dns"]} +{"metadata":{"os":"Ubuntu"},"address":"195.201.37.109","ip":"195.201.37.109","ports":["22"],"version":"0","tags":["ssh"],"p22":{"ssh":{"v2":{"banner":{"comment":"Ubuntu-4ubuntu2.8","raw":"SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.8","software":"OpenSSH_7.2p2","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"KhM7C/p1vnOQtwyuNAdv2v0Hp2YQ22uTkECYamxcHjU="}},"metadata":{"description":"OpenSSH 7.2p2","product":"OpenSSH","version":"7.2p2"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"4cX/sdzau7JVMSo7gOiWH3yGH5DtPBzbT4YrDmNDPSU=","y":"VysnwhHWhx2Xtnl5BD/oCaR8ptsuvTm+pI3NTVzY138="},"fingerprint_sha256":"9886fe6edc2039e233030fea143b6aaebb5ca82927c4562043c7261cdb77dd00","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ecdsa-sha2-nistp256","ssh-ed25519"],"kex_algorithms":["curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group14-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T17:31:47Z"}}},"ipint":"3284739437","updated_at":"2020-07-14T17:31:47Z","location":{"country_code":"DE","continent":"Europe","timezone":"Europe/Berlin","latitude":51.2993,"longitude":9.491,"registered_country":"Germany","registered_country_code":"DE","country":"Germany"},"autonomous_system":{"description":"HETZNER-AS","routed_prefix":"195.201.0.0/16","asn":"24940","country_code":"DE","name":"HETZNER-AS","path":["7018","1299","24940","24940"]},"protocols":["22/ssh"],"ipinteger":"1831193027"} +{"p22":{"ssh":{"v2":{"banner":{"raw":"SSH-2.0-dropbear_2016.74","software":"dropbear_2016.74","version":"2.0"},"metadata":{"description":"Dropbear SSH 2016.74","product":"Dropbear SSH","version":"2016.74"},"support":{"client_to_server":{"ciphers":["twofish128-cbc","3des-ctr","3des-cbc"],"compressions":["none"],"macs":["hmac-sha1-96","hmac-sha1","hmac-sha2-256","hmac-sha2-512","hmac-md5"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa"],"kex_algorithms":["curve25519-sha256@libssh.org","ecdh-sha2-nistp521","ecdh-sha2-nistp384","ecdh-sha2-nistp256","diffie-hellman-group14-sha1","diffie-hellman-group1-sha1","kexguess2@matt.ucc.asn.au"],"server_to_client":{"ciphers":["twofish128-cbc","3des-ctr","3des-cbc"],"compressions":["none"],"macs":["hmac-sha1-96","hmac-sha1","hmac-sha2-256","hmac-sha2-512","hmac-md5"]}},"timestamp":"2020-07-14T18:19:30Z"}}},"address":"174.16.125.139","ipint":"2920316299","updated_at":"2020-07-14T18:19:30Z","ip":"174.16.125.139","location":{"country_code":"US","continent":"North America","city":"Denver","postal_code":"80233","timezone":"America/Denver","province":"Colorado","latitude":39.9038,"longitude":-104.9419,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"CENTURYLINK-US-LEGACY-QWEST","routed_prefix":"174.16.0.0/16","asn":"209","country_code":"US","name":"CENTURYLINK-US-LEGACY-QWEST","path":["7018","3356","209"]},"ports":["22"],"protocols":["22/ssh"],"ipinteger":"-1954738002","version":"0","tags":["embedded","ssh"]} +{"metadata":{"os":"Ubuntu,Ubuntu,Ubuntu"},"address":"52.74.149.117","ip":"52.74.149.117","p80":{"http":{"get":{"body":"\n\n\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\n\n\n\n\t
    \n\t
    \n\t\n\t
    \n\t
    \n\t
    \n\t
    \n\t
    \n\n\t\n\t\n\t\t\n\t\n\t\n\n\n","body_sha256":"c546fde38e668872101dc4397c9d224bbb1655281b9624407de4e35f4240cdd0","headers":{"accept_ranges":"bytes","content_type":"text/html","last_modified":"Thu, 19 Sep 2019 10:07:28 GMT","server":"Apache/2.4.18 (Ubuntu)","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 07:16:59 GMT"},{"key":"etag","value":"\"7cb-592e51ef39800-gzip\""}],"vary":"Accept-Encoding"},"metadata":{"description":"Apache httpd 2.4.18","manufacturer":"Apache","product":"httpd","version":"2.4.18"},"status_code":"200","status_line":"200 OK","timestamp":"2020-07-14T07:16:45Z"}}},"ports":["80","22","27017","443"],"version":"0","tags":["database","http","https","mongodb","ssh"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.int-x3.letsencrypt.org/"],"ocsp_urls":["http://ocsp.int-x3.letsencrypt.org"]},"authority_key_id":"a84a6a63047dddbae6d139b7a64565eff3a8eca1","basic_constraints":{"is_ca":false},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"sh4FzIuizYogTodm+Su5iiUgZ2va+nDnsklTLe+LkF4=","signature":"BAMARzBFAiEAwhO5IAdK5G5mYt5fUWYrK8DtmZrcerkzuGPyEILUsJ0CIFr7AzhyL+9Aresjg3w+naLXwbjx+1gYCZbx66qYniow","timestamp":"1583670380","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMASDBGAiEA+UvPCa63vZpGFr8tENEoD6HzEpmKmiRaErsKsJ2MJLwCIQCuQY9COEO90fsRA3Fw2YWOPz/NbII+gPptzMgLgGyhwg==","timestamp":"1583670380","version":"0"}],"subject_alt_name":{"dns_names":["www.qutrix.io"]},"subject_key_id":"15fe468b1082e83f74a63bff89e7e43f121ab981"},"fingerprint_md5":"a036039237681543846d469f6ec7a91f","fingerprint_sha1":"eb7b949bc27b8658028d2e281c87c915f718f27a","fingerprint_sha256":"2b0c0742cc20379124cac9a5033197f23c5017860b29f3fca01801da20b75298","issuer":{"common_name":["Let's Encrypt Authority X3"],"country":["US"],"organization":["Let's Encrypt"]},"issuer_dn":"C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3","names":["www.qutrix.io"],"redacted":false,"serial_number":"272865425057829337380701653641131382618839","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"RVMlDKSXEIwCAsM+DmRZXJBsWRuJr9xPe7VsT6QBFVcoI214Gq1HagThzUWnx47c5tElI1U+6Ew6eU0RunXgWsRauRR72DGhjr0MWLkWHivuD7icNepWgviIrMwWN2Cw+wL966qwhw1/CBWyOilCfEYuH++G7zOgjxWBbVUXB5ZBoWeZyRALy43yIZ9FlLy2aFr/eRcfDkk8O2FyZv5bVTzhtEk1zdarMUAGSOWcC2Jr4alReeLUVNaf3tTdxQ4vXCU7Y1bVLtNYHaxLs4WevhVYnoNVaiEIudOnk6PUOq9l7QJuBr1xU83qFdrzpju8A+wRWggX6xh9NjHmvPGpuA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"52da5b0201c8006023175ebd6406427d49a940f128596467f57fd1871f32f422","subject":{"common_name":["www.qutrix.io"]},"subject_dn":"CN=www.qutrix.io","subject_key_info":{"fingerprint_sha256":"c2e20a68d40c74d7e31bafb7482871aac340a46528d6656f253ae66ebe8fe56d","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"oESkMYc5Vk3ovqdRgmNhsXO5fWYQLopuk7DxtHAeHrnM9A+NM562YZYeNCCWYsTQMybF/jvQTLPHV6jVfOsGclu8048SW5D58IJ6/dvGhbpvhM8WzQm23u50GKg+IzjK3ZtxuhRJKw4FUD1JgsfvK8j53aiykN9brm4WKm0Piw8+Lvg+IE3BvbeogzH4BptDDUfIgsi30Kj1Ab0ug75Q43Q1KN+TSW393Qfun5evqS0SIDtNlW1JGMRw9PsEB+z9cXmTj8nDohNdmtvwvWdySY2uZJxS/1Xlblig7tioiMpaZ3Sd9elJkSPc3ETgujrjsb4Plsh+FSnAPr8x3O5p9w=="}},"tbs_fingerprint":"2d3f8612b0d11b1d5b2267615fb29d5344355543bf9a50eb49a0b1b4c6824686","tbs_noct_fingerprint":"6f414c0a4fa6e3fb8a29ae97cffb38dd498bd6209564f4a84ed4882ea74b02b7","validation_level":"DV","validity":{"end":"2020-06-06T11:26:20Z","length":"7776000","start":"2020-03-08T11:26:20Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://apps.identrust.com/roots/dstrootcax3.p7c"],"ocsp_urls":["http://isrg.trustid.ocsp.identrust.com"]},"authority_key_id":"c4a7b1a47b2c71fadbe14b9075ffc41560858910","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["http://cps.root-x1.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1"}],"crl_distribution_points":["http://crl.identrust.com/DSTROOTCAX3CRL.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"a84a6a63047dddbae6d139b7a64565eff3a8eca1"},"fingerprint_md5":"b15409274f54ad8f023d3b85a5ecec5d","fingerprint_sha1":"e6a3b45b062d509b3382282d196efe97d5956ccb","fingerprint_sha256":"25847d668eb4f04fdd40b12b6b0740c567da7d024308eb6c2c96fe41d9de218d","issuer":{"common_name":["DST Root CA X3"],"organization":["Digital Signature Trust Co."]},"issuer_dn":"O=Digital Signature Trust Co., CN=DST Root CA X3","redacted":false,"serial_number":"13298795840390663119752826058995181320","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJouM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwuX4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlGPfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"78d2913356ad04f8f362019df6cb4f4f8b003be0d2aa0d1cb37d2fd326b09c9e","subject":{"common_name":["Let's Encrypt Authority X3"],"country":["US"],"organization":["Let's Encrypt"]},"subject_dn":"C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3","subject_key_info":{"fingerprint_sha256":"60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"nNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EFq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWAa6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3Dkw=="}},"tbs_fingerprint":"3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838","tbs_noct_fingerprint":"3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838","validation_level":"DV","validity":{"end":"2021-03-17T16:40:46Z","length":"157766400","start":"2016-03-17T16:40:46Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"192","lifetime_hint":"300"},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: certificate has expired or is not yet valid","browser_trusted":false},"version":"TLSv1.2","timestamp":"2020-07-09T09:01:29Z"},"heartbleed":{"heartbeat_enabled":true,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T09:59:29Z"},"get":{"body":"\r\n\r\n\r\n\r\n \r\n Qutrix | Redefining Quality\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n \r\n

    \"cloudautom

    \r\n
    \r\n\r\n \r\n \r\n
    \r\n
    \r\n \r\n\r\n \r\n
    \r\n
    \r\n
    \r\n\r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \"\"
      \r\n
      \r\n
      \r\n



      Get The Quality You Deserve...

      \r\n

      For every data-center product development or testing challenges in R&D engineering, there are many solutions. Experience the best with Qutrix Solution for the quality matrix you deserve.

      \r\n Go Qutrix\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \"\"
      \r\n
      \r\n
      \r\n



      DevTestOps, STLC, Test Automation

      \r\n

      QaaSBox & CloudAuTOM - Pace The Race with our next-generation framework and solution for all your product test operations and test automation requirements. Get-Set-Test!

      \r\n Simplify It!\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \"\"
      \r\n
      \r\n
      \r\n



      Software Solutions, Services

      \r\n

      The uniqueness of our offerings comes from the DNA of blending product company's innovation with excellence of service company's commitment. Grow your business world non-stop.

      \r\n At Your Service\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \"\"
      \r\n
      \r\n
      \r\n



      Building, Nurturing Talent Pool

      \r\n

      Evergrowing data-center industry needs fresh talent in India and nurturing of skills. Qutrix Academia invests time in identifying and building talent pool through efficient inhouse workshops.

      \r\n Build Talent\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \"\"
      \r\n
      \r\n
      \r\n



      Beyond Auditing, Certification

      \r\n

      Qutrix Quality Quotient assessment program provides you blueprint of your engineering quotient beyond any auditing or certification programs offer. Have a WILL to know? This is the WAY.

      \r\n Quotient'ify\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n\r\n \r\n \r\n Previous\r\n \r\n\r\n \r\n \r\n Next\r\n \r\n\r\n
      \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n\r\n \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n

      DEARER TO R&D OPEX

      \r\n

      Beat your target with better value for investment when you engage us in your SDLC, STLC phases.

      \r\n
      \r\n\r\n
      \r\n \r\n

      GTM AT EASE

      \r\n

      Go-To-Market at ease. Eliminate 11th hour blocker product defects. Tame your fast ticking clock.

      \r\n
      \r\n\r\n
      \r\n \r\n

      REDEFINE QUALITY

      \r\n

      A quality partner to rely on. Start the journey to redefine your product quality to newer heights.

      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n \r\n\r\n \r\n
      \r\n
      \r\n \r\n
      \r\n

      QaaSBox, Quality Testing Simplified

      \r\n

      Unbox Quality-As-A-Solution software and a platform for your product that empowers your product management, development and test experts to adapt STLC at ease for achieving quality testing. QaaSBox enables the users gain competitive advantage and achieve faster go-to-market cycle.
      \r\n\t Sign Up Today & Avail Benefits As Beta User!

      \r\n
      \r\n\r\n
      \r\n \r\n \"\"\r\n \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n

      Product Test Management

      \r\n

      Come and join to access the get-set-go* tests or create your own online collaboration team or setup enterprise QaaS edition. Explore our innovative and niche offerings for you. System Softwares or Enterprise Products or Mobile/Web Apps - QaaSBox is your new TestOps Compass.

      \r\n Explore More \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n\r\n
      \r\n

      CloudAuTOM, Test Automation Solution

      \r\n

      We offer custom-build Test Automation SaaS and AaaS products with integrated STLC management modules, which enable our partners gain competitive advantage and achieve faster go-to-market cycle. As subject matter experts, we understand the domain and micro-aspects of complexity involved in building an effective product test automation eco-system for your R&D engineering operations.

      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n 3\r\n

      Superior Frameworks

      \r\n
      \r\n\r\n
      \r\n 18\r\n

      Powerful Features

      \r\n
      \r\n\r\n
      \r\n 45\r\n

      *Minutes To Deploy AaaS Cloud

      \r\n
      \r\n\r\n
      \r\n 1010\r\n

      Man Days Crafted (*Ticking)

      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \"\"\r\n\r\n
      \r\n\r\n \r\n
      \r\n
      \r\n

      Product Test Automation

      \r\n

      There are 8 unique ways to revolutionize the operations of your R&D Product Engineering Development and Testing. We customize test automation solutions and help our customers by creating private or hybrid cloud ecosystem for data-center product testing of Servers, Adapters, Controllers, Drives, Flash, Arrays, Modules and many more. Explore our innovative and niche offerings for you.

      \r\n Explore More \r\n
      \r\n
      \r\n \r\n\r\n
      \r\n
      \r\n \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n

      Software Solutions, Services

      \r\n

      Experience a highly reliable solution or outstanding service when you engage us for your R&D software engineering development and testing requirements of STORAGE, NETWORK products. Quality is just a consequence of our relentless effort. Our success is to make you succeed.

      \r\n
      \r\n\r\n
      \r\n \r\n

      \r\n
      \r\n\r\n
      \r\n

      Engineering Development Services, Solutions


      \r\n

      Respecting talent and balancing your RoI are essential. Find a new genre of business strategist in us. Access the true developers!

      \r\n
      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n

      ENG Dev

      \r\n

      Whether offshore development or demand basis engagement model, our business SLAs might reveal unexplored possibilities.

      \r\n

      \r\n
      \r\n\r\n
      \r\n
      \r\n

      ENG Tools

      \r\n

      Offload the hassles of developing tools or utilites for your day-to-day SW engineering activities in any programming languages.

      \r\n
      \r\n\r\n
      \r\n
      \r\n

      ENG Web

      \r\n

      Build your powerful intranet sites while you design core products. We know pulse of software engineering and art of app.

      \r\n
      \r\n\r\n\r\n
      \r\n\r\n
      \r\n

      Product Test Automation Services, Solutions


      \r\n

      In software engineering, test automation is an unique breed of thinking. Testers in Breaking! Developers in Logic! Hackers in Approach!

      \r\n
      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n

      AuTOM-Creator

      \r\n

      Creating test automation framework for data-center products is synonymous to us. Get it created from the scratch.

      \r\n

      \r\n
      \r\n\r\n
      \r\n
      \r\n

      AuTOM-Developer

      \r\n

      Optimizing/developing existing framework and library is totally a different skill. We also enhance your proprietary framework.

      \r\n
      \r\n\r\n
      \r\n
      \r\n

      AuTOM-Maintainer

      \r\n

      At times, test automation regression is underestimated. Maintenance is a quality and not a mere work. We never overlook.

      \r\n

      \r\n
      \r\n
      \r\n\r\n
      \r\n

      Testing/Quality Assurance Services, Solutions


      \r\n

      Feel the subtle differences of business minds running technology projects vs subject matter experts running business in technology.

      \r\n
      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n

      ArchiTest

      \r\n

      Engage subject matter expert Test Architects on full-time or flexible terms. Their influence on product is multi-fold.

      \r\n
      \r\n\r\n
      \r\n
      \r\n

      Q-Bench

      \r\n

      Benchmark Desk: Get deeper insights of your product performance, benchmarking metrics dissected and analyzed.

      \r\n

      \r\n
      \r\n\r\n
      \r\n
      \r\n

      IndepTest

      \r\n

      Offers End-To-End independent and indepth testing services/solution for all your data-center product validation.

      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n\r\n \r\n
      \r\n \r\n\r\n \r\n
      \r\n
      \r\n\r\n
      \r\n

      Academia Workshops

      \r\n

      Only less than 5% of engineers graduating in India are employable for software start-ups and IT product companies (Source: Industry, Media, Expert Reports). Qutrix academia designed career awareness workshop programs in data-center domain for college students, fresh graduates in an attempt to find the hidden-gems from the left-out 95% for the benefit of national and international talent needs.

      \r\n

      Did You Know? It just takes less than 1/4th of a second for your social-networking Likes or Posts to reach your friend in USA from India? It's time you learn HOW! Come, explore, learn the magnitude and sophistication involved behind your Internet World - conceptually and practically. THE ONLY THING THAT CAN STOP YOU IS YOUR OWN APPETITE TO DEEP-DIVE!!!

      \r\n

      Career Workshop Programs - Learn From Experts

      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n \"\"\r\n \r\n \r\n
      \r\n\r\n
      \r\n
      #1 Domain/Technology Awareness
      \r\n

      Conceptual + Hands-On Exposure

      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n \"\"\r\n \r\n \r\n
      \r\n\r\n
      \r\n
      #2 Data-Center Test Expertise
      \r\n

      Architectural Testing Exposure

      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n \"\"\r\n \r\n \r\n
      \r\n\r\n
      \r\n
      #3 Data-Center Test Automation
      \r\n

      Product Test Automation Exposure

      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n \r\n\r\n \r\n\r\n
      \r\n
      \r\n\r\n
      \r\n

      Assess Engineering Quotient

      \r\n

      Enroll for Qutrix Quality Quotient (Q-Cube) assessment program and benefit immensely from the insightful data on your R&D Engineering Operations. Q-Cube assessment is offerred in TWO modes. a) Team Mode (Basic Method) b) Expert Mode (Advance Method)

      \r\n
      \r\n\r\n
      \r\n\r\n

      Sample Report With 52.9 Points Scored Based On 10x10 (100-Scale) Point Assessment Model:

      \r\n\r\n
      \r\n
      \r\n Hiring Quotient 25%\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n Talent Quotient 39%\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n Domain Quotient 39%\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n Product Quotient 24%\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n Process Quotient 39%\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n Development Quotient 42%\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n Testing Quotient 75%\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n Synergy Quotient 90%\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n Innovation Quotient 90%\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n Operations Quotient 66%\r\n
      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n\r\n \r\n\r\n \r\n
      \r\n
      \r\n\r\n
      \r\n

      About Qutrix

      \r\n

      Qutrix is a private limited company established in Bangalore, Silicon Valley Of India. Our culture is built upon the values of product company's innovation and service company's commitment. We offer world-class experience to our customers partnering with us. Our success stories have all the compelling reasons to scale up the business operations with the blessings of satisfied customers.

      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n \"\"\r\n
      \r\n
      \r\n

      Qutrix Mission

      \r\n

      \r\n

      To accomplish a purposeful existence in the industry,

      \r\n\t\tBy creating employment opportunity for deserving, \r\n\t\tBy treating suppliers as valuable as customers,\r\n\t\tBy partnering with visionary customers & investors\r\n\t
      \r\n

      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n \"\"\r\n
      \r\n
      \r\n

      Qutrix Vision

      \r\n

      \r\n

      To be your next generation business partner with perfection in every step we take with our creative minds at work
      \r\n

      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n \"\"\r\n
      \r\n
      \r\n

      Qutrix Commitment

      \r\n

      \r\n

      Our commitment to grow your business is essentially built over 9 pillars of traits:

      \r\n Creativity and Innovation
      \r\n Trust and Transperancy
      \r\n Commitment and Ethics
      \r\n Quality and Excellence
      \r\n Business Continuity
      \r\n
      \r\n

      \r\n
      \r\n
      \r\n\r\n\r\n
      \r\n\r\n
      \r\n
      \r\n \r\n\r\n \r\n\r\n \r\n
      \r\n
      \r\n
      \r\n

      Our Team

      \r\n

      Meet our passionate team working towards building every atom of the company. Start-up in energy and attitude! Corporate in focus and execution!

      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n

      \r\n \r\n
      \r\n \r\n \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n \"\"\r\n
      \r\n
      \r\n

      Vijay Koteeswaran

      \r\n Founder Director\r\n
      \r\n \r\n \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      Vijay Koteeswaran \r\n
      Founder Director\r\n
      \r\n

      A Stanford IGNITE'd technology entrepreneur with deep expertise in storage and networking domains. Holds Masters Degree in Information Science and Application. Created strong foot-prints in key roles like Test Intrapreneur, Global Test Architect, Product Test and Project Manager. With 19 Years of data-center industry experience, played significant roles in many global companies like Broadcom, LSI, Cisco, Wipro and many associated clients.

      \r\n
      \r\n\r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n

      \r\n \r\n
      \r\n \r\n \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n\r\n
      \r\n\r\n

      Team Qutrix

      \r\n

      Our vibrant team having fun after coding & business hours. We Are Qutrixians!

      \r\n
      \r\n \r\n
      \r\n

      *Ex-Qutrixians are also shown in the team pictures.

      \r\n
      \r\n\r\n
      \r\n
      \r\n\r\n \r\n \r\n
      \r\n
      \r\n
      \r\n

      Career Path

      \r\n

      Nothing fancy about working for start-up unless you think your growth and knowledge matter to you. Dare to build the wall together? Please Apply.

      \r\n
      \r\n\r\n
      \r\n
      \r\n \"career\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
      Job ID Title Type Job RoleApply
      QJR1801IC R&D Engineer (Level 1-3)\r\n Full-Time or Part-Time\r\n \r\n Web & Database Architecture/Programming Mailto: career@qutrixsolution.com
      QJR1802\r\n IC R&D Engineer (Level 1-3)Full-Time or Part-Time\r\n Test Automation Designing/Programming Mailto: career@qutrixsolution.com
      QJR1803\r\n Business Development Executive Full-Time or Part-Time\r\n Product & Service Business Development Mailto: career@qutrixsolution.com
      \r\n
      \r\n
      \r\n
      \r\n

      Note: Internship opportunities are available. Interested candidates can mail their profiles to career@qutrixsolution.com

      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n\r\n
      \r\n

      Startup Social Responsibility (SSR)

      \r\n \"ssr\r\n
      \r\n\r\n

      SSR Initiatives

      \r\n

      We believe that engaging in social responsibility activities even in startup stage is good for setting up the culture of the company. This creates ample opportunity for employees to look aspects beyond business goals and lead a difference in human's life however small it may be. We dedicate half a day every month in programs listed below. Qutrix SSR plans to increase the list of activities over the time.

      \r\n
      \r\n\r\n
      \r\n
      Program
      \r\n

      Fun Day @ Old-Age Homes

      \r\n

      Celebration @ Children Homes

      \r\n

      Career Insights & Guidance

      \r\n\r\n
      \r\n\r\n
      \r\n
      Description
      \r\n

      Celebrate life with old-age citizens to cheer them up with fun-filled activities

      \r\n

      Birthday celebration for underprivileged kids and games to cheer them up

      \r\n

      Career guidance program to empower women engineering & managment graduates

      \r\n\r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n\r\n
      \r\n

      Contact Us

      \r\n

      Thank you for your interest in Qutrix. Engaging with us is just a ping away.

      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n \r\n

      Email

      \r\n

      info@qutrixsolution.com

      \r\n
      \r\n
      \r\n\r\n \r\n\r\n
      \r\n
      \r\n \r\n

      Phone Number

      \r\n

      India: +91 984 530 7360

      \r\n
      \r\n
      \r\n\r\n
      \r\n\r\n \r\n\r\n
      \r\n
      \r\n \r\n\r\n
      \r\n \r\n\r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n

      Qutrix Solution

      \r\n

      Qutrix emanated from Quality Matrix as we envision to redefine your product quality to greater heights with our creative minds at work and innovative products lined up for you.

      \r\n
      \r\n\r\n
      \r\n

      Useful Links

      \r\n \r\n
      \r\n\r\n
      \r\n

      Contact Us

      \r\n

      \r\n Qutrix Solution Private Limited
      \r\n Synerge II Workspace,
      \r\n #362/7, 2nd Floor, 16th Main Rd,
      \r\n 4th T Block East, Jayanagar,
      \r\n Bangalore - 560 041,
      \r\n KA, INDIA.
      \r\n Phone: +91 984 530 7360
      \r\n Email: info@qutrixsolution.com
      \r\n

      \r\n\r\n
      \r\n \r\n \r\n \r\n \r\n \r\n
      \r\n\r\n
      \r\n\r\n \r\n\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n © 2018-19 Qutrix Solution Private Limited. All Rights Reserved.\r\n
      \r\n\r\n
      \r\n\r\n \r\n \r\n \r\n \r\n\r\n
      \r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n\r\n\r\n","body_sha256":"9c1487d94deba78126aedf06640325567d712176bd905601a86774eccf27acf3","headers":{"accept_ranges":"bytes","content_type":"text/html","last_modified":"Tue, 22 Oct 2019 07:51:03 GMT","server":"Apache/2.4.18 (Ubuntu)","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 06:27:22 GMT"},{"key":"etag","value":"\"b3ed-5957b0fdbdb00-gzip\""}],"vary":"Accept-Encoding"},"metadata":{"description":"Apache httpd 2.4.18","manufacturer":"Apache","product":"httpd","version":"2.4.18"},"status_code":"200","status_line":"200 OK","title":"Qutrix | Redefining Quality","timestamp":"2020-07-13T06:27:08Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T09:56:24Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T06:46:33Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqsqmj//////////w=="}},"support":true,"timestamp":"2020-07-12T07:52:51Z"}}},"p22":{"ssh":{"v2":{"banner":{"comment":"Ubuntu-4ubuntu2.8","raw":"SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.8","software":"OpenSSH_7.2p2","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"dBq0WRs9WsHGNqAt31aCy1XXMrUqJAWxEELH/d/m8Ts="}},"metadata":{"description":"OpenSSH 7.2p2","product":"OpenSSH","version":"7.2p2"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"KDvemVyf618PrzfPXJZ36kEACirBP31MJqcx1eW8voA=","y":"5qksTDYeAnKF1cNTYztboKdVSf5QZOD/yALpsjJLjZE="},"fingerprint_sha256":"10e58d265b79146d031aad32b01fb028426c1787caf4bebdab8d72f876949831","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ecdsa-sha2-nistp256","ssh-ed25519"],"kex_algorithms":["curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group14-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T20:07:06Z"}}},"ipint":"877303157","updated_at":"2020-07-14T20:07:06Z","p27017":{"mongodb":{"banner":{"build_info":{"build_environment":{"cc":"/opt/mongodbtoolchain/v2/bin/gcc: gcc (GCC) 5.4.0","cc_flags":"-fno-omit-frame-pointer -fno-strict-aliasing -ggdb -pthread -Wall -Wsign-compare -Wno-unknown-pragmas -Winvalid-pch -Werror -O2 -Wno-unused-local-typedefs -Wno-unused-function -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-missing-braces -fstack-protector-strong -fno-builtin-memcmp","cxx":"/opt/mongodbtoolchain/v2/bin/g++: g++ (GCC) 5.4.0","cxx_flags":"-Woverloaded-virtual -Wno-maybe-uninitialized -std=c++14","dist_arch":"x86_64","dist_mod":"ubuntu1604","link_flags":"-pthread -Wl,-z,now -rdynamic -Wl,--fatal-warnings -fstack-protector-strong -fuse-ld=gold -Wl,--build-id -Wl,--hash-style=gnu -Wl,-z,noexecstack -Wl,--warn-execstack -Wl,-z,relro","target_arch":"x86_64","target_os":"linux"},"git_version":"c389e7f69f637f7a1ac3cc9fae843b635f20b766","version":"4.0.10"},"is_master":{"is_master":true,"logical_session_timeout_minutes":"30","max_bson_object_size":"16777216","max_message_size_bytes":"48000000","max_wire_version":"7","max_write_batch_size":"100000","read_only":false},"supported":true,"timestamp":"2020-07-10T07:04:15Z"}}},"location":{"country_code":"SG","continent":"Asia","city":"Singapore","postal_code":"18","timezone":"Asia/Singapore","latitude":1.2929,"longitude":103.8547,"registered_country":"United States","registered_country_code":"US","country":"Singapore"},"autonomous_system":{"description":"AMAZON-02","routed_prefix":"52.74.0.0/16","asn":"16509","country_code":"US","name":"AMAZON-02","path":["7018","174","16509"]},"protocols":["22/ssh","27017/mongodb","443/https","80/http"],"ipinteger":"1972718132"} +{"address":"46.200.11.50","ipint":"784862002","updated_at":"2020-07-14T04:12:50Z","ip":"46.200.11.50","p80":{"http":{"get":{"body":"\r\n\r\n\r\n\t\r\n\t\r\n\t\r\n\t\r\n\t\r\n\t\r\n\r\n\r\n\r\n\r\n","body_sha256":"8b71379a4c9449b0d652659f4d7da15d904b2744cee3c0b17d05f6129aa1eca6","headers":{"connection":"keep-alive","content_length":"480","content_type":"text/html","last_modified":"Wed, 18 Jan 2017 10:56:45 GMT","server":"DNVRS-Webs","unknown":[{"key":"keep_alive","value":"timeout=60, max=99"},{"key":"date","value":"Tue, 14 Jul 2020 07:10:32 GMT"},{"key":"etag","value":"\"0-7e0-1e0\""}]},"metadata":{"description":"DNVRS Webs","manufacturer":"DNVRS","product":"Webs"},"status_code":"200","status_line":"200 OK","timestamp":"2020-07-14T04:12:50Z"}}},"location":{"country_code":"UA","continent":"Europe","timezone":"Europe/Kiev","latitude":50.4522,"longitude":30.5287,"registered_country":"Ukraine","registered_country_code":"UA","country":"Ukraine"},"autonomous_system":{"description":"UKRTELNET","routed_prefix":"46.200.8.0/22","asn":"6849","country_code":"UA","name":"UKRTELNET","path":["7018","174","6849"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"839632942","version":"0","tags":["http"]} +{"metadata":{"os":"Ubuntu"},"address":"78.46.120.210","ip":"78.46.120.210","p80":{"http":{"get":{"body":"\n\n401 Unauthorized\n\n

      Unauthorized

      \n

      This server could not verify that you\nare authorized to access the document\nrequested. Either you supplied the wrong\ncredentials (e.g., bad password), or your\nbrowser doesn't understand how to supply\nthe credentials required.

      \n\n","body_sha256":"ff6d14f77e27f7b90cb2f20bce408189f5f388961f3fcd13fe2df2cc0a002dc3","headers":{"content_length":"381","content_type":"text/html; charset=iso-8859-1","server":"Apache/2.4","unknown":[{"key":"date","value":"Tue, 30 Jun 2020 13:44:18 GMT"}],"www_authenticate":"Basic realm=\"Panel administracyjny\""},"metadata":{"description":"Apache httpd 2.4","manufacturer":"Apache","product":"httpd","version":"2.4"},"status_code":"401","status_line":"401 Unauthorized","title":"401 Unauthorized","timestamp":"2020-06-30T13:44:18Z"}}},"ports":["80","22"],"version":"0","tags":["http","ssh"],"p443":{"https":{"rsa_export":{"support":false,"timestamp":"2020-07-09T04:10:24Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T09:07:58Z"},"dhe":{"support":false,"timestamp":"2020-07-12T04:24:27Z"}}},"p22":{"ssh":{"v2":{"banner":{"comment":"Ubuntu-4","raw":"SSH-2.0-OpenSSH_7.6p1 Ubuntu-4","software":"OpenSSH_7.6p1","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"f5Ze/bjxxWpbQCC96JbBgbpbpmjf1GiGRoeysKQAcmk="}},"metadata":{"description":"OpenSSH 7.6p1","product":"OpenSSH","version":"7.6p1"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"HMDpSnuR78ncaqSjqDl/8sdcI1VOUvtNKE0Tu6T9Ns0=","y":"tvPVc3kvgaWBMDG+yRRmrEzAvzrfBK6fbPpk9dkjt9c="},"fingerprint_sha256":"10fcfabbb59cc776e6c94d646615b2f67e3e323754ae6af0a541fed55a2e8b42","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ecdsa-sha2-nistp256","ssh-ed25519"],"kex_algorithms":["curve25519-sha256","curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group16-sha512","diffie-hellman-group18-sha512","diffie-hellman-group14-sha256","diffie-hellman-group14-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T09:03:11Z"}}},"ipint":"1311668434","updated_at":"2020-07-14T09:03:11Z","location":{"country_code":"DE","continent":"Europe","timezone":"Europe/Berlin","latitude":51.2993,"longitude":9.491,"registered_country":"Germany","registered_country_code":"DE","country":"Germany"},"autonomous_system":{"description":"HETZNER-AS","routed_prefix":"78.46.0.0/15","asn":"24940","country_code":"DE","name":"HETZNER-AS","path":["7018","1299","24940","24940"]},"protocols":["22/ssh","80/http"],"ipinteger":"-763875762"} +{"metadata":{"os":"Windows,Windows,Windows"},"address":"154.219.11.69","ip":"154.219.11.69","p80":{"http":{"get":{"body":"\r\n\r\n\r\n\r\nIIS7\r\n\r\n\r\n\r\n
      \r\n\"IIS7\"\r\n
      \r\n\r\n","body_sha256":"370be45f65276b3b8de42a29adfb1220fc44a5e018c37e3e9b62fa7d5b523fd0","headers":{"accept_ranges":"bytes","content_type":"text/html","last_modified":"Mon, 30 Jul 2018 12:41:17 GMT","server":"Microsoft-IIS/7.5","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 12:54:49 GMT"},{"key":"etag","value":"\"e5499c228d41:0\""}],"vary":"Accept-Encoding","x_powered_by":"ASP.NET"},"metadata":{"description":"Microsoft IIS 7.5","manufacturer":"Microsoft","product":"IIS","version":"7.5"},"status_code":"200","status_line":"200 OK","title":"IIS7","timestamp":"2020-07-07T12:55:44Z"}}},"ports":["80","21","443"],"version":"0","p21":{"ftp":{"banner":{"banner":"220 Microsoft FTP Service","metadata":{"description":"IIS","product":"IIS"},"timestamp":"2020-07-13T17:24:32Z"}}},"tags":["ftp","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"extended_key_usage":{"server_auth":true},"key_usage":{"data_encipherment":true,"digital_signature":true,"key_encipherment":true,"value":"13"}},"fingerprint_md5":"83c5a79bc16ad199fb767ae2da4fce2d","fingerprint_sha1":"80569536ec75d4e0f2f002af54203690d4e23230","fingerprint_sha256":"f2db2e95f4e6e5e485dc18382fcc92d54ed21c0002fcd29b4e4abf5b998119fe","issuer":{"common_name":["WMSvc-WIN-ESHAJ5C50VE"]},"issuer_dn":"CN=WMSvc-WIN-ESHAJ5C50VE","redacted":false,"serial_number":"168583011980065740092568276198085631246","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"Bzr1pdZ8px7v2rCCTMMYexzEiTWNnuEoIE8Dxcw3vA17jnFWY6Rv6o+Buo0zXee0yWl4UncBe+V8w8ll8vGfyy9DY3mltx4UtyQlFMhBwlMCmKaDuuLgtOTl+gZ51eH7vJGw2d5lpC9GRGbena955tlChoegNaCzBkW8cMWQlkvVYxWeDS1QChBm7XItnNwOIqFjhVpNMTmVxKM1mg3Qajb9o8Br4iRXAh6XOtySUAPE6WWB68AC51CsYKO/pXAkBkK/tdIq27FjHEFvWYKZcaMxgDeT81Ro+q/AJLb9J18fOJHz7bIGvyWK92rGL5omZm/NkkFesRqAjCTzbo4P6A=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"b4479595869466d05405ebd61176517ebe2cd09cc6192c52fed191e629a6b970","subject":{"common_name":["WMSvc-WIN-ESHAJ5C50VE"]},"subject_dn":"CN=WMSvc-WIN-ESHAJ5C50VE","subject_key_info":{"fingerprint_sha256":"c5a2ae6e8cac3cbf260b0b904cd8f73ff2e26f8aa3f8b5fc5a82bf27535bf83e","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"m+foMKJ3pH34oGlMPIvfmEBz20cT0Jq9QFQeUonny+pkW+g90Odc5VqGVUFlWUXGrU+hvgPKYh6+97rDK0vy8Y360NJ2mJgqQSlwh09iXdHUWfqbMH/yzQ6ovXYZD41Z06ckplX07Axx6ngCmOzh0TCr41aCv11L/R+nFVTOYqmHbHYFz0MnldaI1MO3sO1cs0hJhhyxpawvmul0FCsJTV/fpQqnupo8HGGAWziOSJD04lMdd8QQ+7th7DrKEHF3Sj5sLmQaDyXfMBWKfZ3HRAiuTvJkDuqVwZFniJE0yatHKAEVHkL1SvIabO5q4WKRkb8qF56XjmXZ0mX+XI6R3Q=="}},"tbs_fingerprint":"ae5ddc7416fbaeb68f3733728373861c44235d56100f3c87191a0b01a5a79bbe","tbs_noct_fingerprint":"ae5ddc7416fbaeb68f3733728373861c44235d56100f3c87191a0b01a5a79bbe","validation_level":"unknown","validity":{"end":"2030-05-03T09:26:13Z","length":"315360000","start":"2020-05-05T09:26:13Z"},"version":"3"}},"cipher_suite":{"id":"0xC014","name":"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.0","timestamp":"2020-07-09T10:24:44Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T11:43:50Z"},"ssl_3":{"support":true,"timestamp":"2020-07-15T09:36:57Z"},"get":{"body":"\r\nNot Found\r\n\r\n

      Not Found

      \r\n

      HTTP Error 404. The requested resource is not found.

      \r\n\r\n","body_sha256":"ce7127c38e30e92a021ed2bd09287713c6a923db9ffdb43f126e8965d777fbf0","headers":{"content_length":"315","content_type":"text/html; charset=us-ascii","server":"Microsoft-HTTPAPI/2.0","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 16:24:19 GMT"}]},"metadata":{"description":"Microsoft HTTPAPI 2.0","manufacturer":"Microsoft","product":"HTTPAPI","version":"2.0"},"status_code":"404","status_line":"404 Not Found","title":"Not Found","timestamp":"2020-07-14T16:25:07Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T05:52:42Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T10:05:55Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"1024","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5lOB//////////8="}},"support":true,"timestamp":"2020-07-12T11:03:58Z"}}},"ipint":"2598046533","updated_at":"2020-07-15T09:36:57Z","location":{"country_code":"US","continent":"North America","city":"Los Angeles","postal_code":"90009","timezone":"America/Los_Angeles","province":"California","latitude":34.0544,"longitude":-118.244,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"IKGUL-26484","routed_prefix":"154.219.11.0/24","asn":"26484","country_code":"US","name":"IKGUL-26484","path":["11164","4134","26484","26484"]},"protocols":["21/ftp","443/https","80/http"],"ipinteger":"1158405018"} +{"address":"60.222.11.239","p8080":{"http":{"get":{"body":"\r\n404 Not Found\r\n\r\n

      404 Not Found

      \r\n
      lt-shanxi-yuncheng-2-60-222-11-239
      \r\n
      nginx
      \r\n\r\n\r\n","body_sha256":"900a4deabd9142b7d6d3e9cfc0cb17cc6604cf384789af55caa18d704784d8ae","headers":{"connection":"keep-alive","content_length":"203","content_type":"text/html","server":"nginx","unknown":[{"key":"date","value":"Fri, 10 Jul 2020 03:01:53 GMT"}]},"metadata":{"description":"nginx","product":"nginx"},"status_code":"404","status_line":"404 Not Found","title":"404 Not Found","timestamp":"2020-07-10T03:01:53Z"}}},"ip":"60.222.11.239","p80":{"http":{"get":{"body":"\r\n404 Not Found\r\n\r\n

      404 Not Found

      \r\n
      lt-shanxi-yuncheng-2-60-222-11-239
      \r\n
      nginx
      \r\n\r\n\r\n","body_sha256":"900a4deabd9142b7d6d3e9cfc0cb17cc6604cf384789af55caa18d704784d8ae","headers":{"connection":"keep-alive","content_length":"203","content_type":"text/html","server":"nginx","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 05:55:32 GMT"}]},"metadata":{"description":"nginx","product":"nginx"},"status_code":"404","status_line":"404 Not Found","title":"404 Not Found","timestamp":"2020-07-07T05:55:29Z"}}},"ports":["80","8080","53","443"],"version":"0","p53":{"dns":{"lookup":{"errors":false,"open_resolver":false,"questions":[{"name":"c.afekv.com","type":"A"}],"resolves_correctly":false,"support":true,"timestamp":"2020-07-12T03:25:23Z"}}},"tags":["dns","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cacerts.geotrust.com/GeoTrustRSACA2018.crt"],"ocsp_urls":["http://status.geotrust.com"]},"authority_key_id":"9058ffb09c75a8515477b1edf2a34316389e6cc5","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.1"},{"id":"2.23.140.1.2.2"}],"crl_distribution_points":["http://cdp.geotrust.com/GeoTrustRSACA2018.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"sh4FzIuizYogTodm+Su5iiUgZ2va+nDnsklTLe+LkF4=","signature":"BAMARzBFAiEAw1JiNOGaKCmZ/JpyO89vpk/EBIH1mDrv8uAWi7mxv9cCIFmhhtwtO1iq8qse3nEO0y9/TQCQjkGkrCCR99gI4kho","timestamp":"1586248710","version":"0"},{"log_id":"8JWkWfIA0YJAEC0vk4iOrUv+HUfjmeHQNKawqKqOsnM=","signature":"BAMASDBGAiEAuD3z7h3WZxRRYkWkD4ITDUzqPEFmvuV9qPUyopLukykCIQD1RCoLtvY1g+dUYyxOcJDnapd34srjKFRKkO+hxVVkTA==","timestamp":"1586248711","version":"0"}],"subject_alt_name":{"dns_names":["www.baishancloud.com","baishancloud.com","xinwen.duba.com","vivotestapk.baishancdnx.cn","news.xunyou.com","image.xunyou.com","newsbsc.v.live.baishancdnx.cn","sams.lenovomm.com","hls.cntv.qingcdn.com","cctv5bsh5ca.v.live.baishancdnx.cn","desk123.duba.com","image.wan.liebao.cn","cctvhds.v.live.qingcdn.com","cctvhds.v.live.baishancdnx.cn","vivotestdt.baishancdnx.cn","cctv5bsw.v.live.baishancdnx.cn","ent.duba.com","c.m.163.com","cctvbsh5flvc.v.live.baishancdnx.cn","image3by.haier.com","sportsbsc.v.live.baishancdnx.cn","hls.cntv.baishancdnx.cn","cctv5bsh5c.v.live.baishancdnx.cn","ncpabsc.v.live.baishancdnx.cn","12371bsc.v.live.baishancdnx.cn","cdn3by.haier.com","studiobsc.v.live.baishancdnx.cn","cctvbsh5c.v.live.baishancdnx.cn","www.uu114.cn","partnerunion.xunyou.com","asp.cntv.baishancdnx.cn","img.cmcmcdn.com","asp.cntv.qingcdn.com","cdn.wan.liebao.cn","cctvbsw.v.live.baishancdnx.cn","www.newduba.cn","cctv5bsh5flvc.v.live.baishancdnx.cn","mlivebsc.v.live.baishancdnx.cn","www.duba.com","img1.duba.com","hotnews.duba.com","gcbsc.v.live.baishancdnx.cn","cctvbsh5ca.v.live.baishancdnx.cn","dl.doyo.cn"]},"subject_key_id":"3b724df6b12a99376ec4b199198479289eaf283c"},"fingerprint_md5":"e59226cad3f598800d959b752d8132a1","fingerprint_sha1":"79015b7946c2b6d5b62ce9db6518cd707735cef0","fingerprint_sha256":"ffc7b189c177cbf23044469e7f9b6a8a910977ce7578c56830331eead0703af6","issuer":{"common_name":["GeoTrust RSA CA 2018"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=GeoTrust RSA CA 2018","names":["sportsbsc.v.live.baishancdnx.cn","asp.cntv.baishancdnx.cn","cctvbsw.v.live.baishancdnx.cn","img1.duba.com","www.baishancloud.com","desk123.duba.com","image3by.haier.com","cdn3by.haier.com","partnerunion.xunyou.com","asp.cntv.qingcdn.com","vivotestapk.baishancdnx.cn","newsbsc.v.live.baishancdnx.cn","www.newduba.cn","mlivebsc.v.live.baishancdnx.cn","hls.cntv.baishancdnx.cn","cctvbsh5c.v.live.baishancdnx.cn","cctvbsh5flvc.v.live.baishancdnx.cn","cctv5bsh5c.v.live.baishancdnx.cn","12371bsc.v.live.baishancdnx.cn","studiobsc.v.live.baishancdnx.cn","cctv5bsw.v.live.baishancdnx.cn","ent.duba.com","vivotestdt.baishancdnx.cn","cctv5bsh5flvc.v.live.baishancdnx.cn","www.duba.com","news.xunyou.com","cctvhds.v.live.qingcdn.com","c.m.163.com","www.uu114.cn","img.cmcmcdn.com","cctvbsh5ca.v.live.baishancdnx.cn","sams.lenovomm.com","image.wan.liebao.cn","ncpabsc.v.live.baishancdnx.cn","cdn.wan.liebao.cn","hotnews.duba.com","dl.doyo.cn","cctv5bsh5ca.v.live.baishancdnx.cn","cctvhds.v.live.baishancdnx.cn","image.xunyou.com","hls.cntv.qingcdn.com","gcbsc.v.live.baishancdnx.cn","baishancloud.com","xinwen.duba.com"],"redacted":false,"serial_number":"11492094237806294166829934701039148588","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"lJDYQJ9ssl514aZscdwIVZ4nSygFzqLJp5TRBMqtPp//AphvPGwpVmJjmTbN3hGN4qi5g5AeDO3QmZuKQBJMbezeE7p1X3oGHMCcr+ZlVaR5pMTZKYUBBoAYjFUNO92CAnqp2WFq8hnbrRLUSlRP1oTDdd9224zGsDWTLtRxStcPLHW9Np4ZsVz5CtUUZoHfQsQaqAdq+4wFEJGuwjOQSe2jTUV/stRNdBfm2SPztT3NCncuLqLgW8yPur2zufBvYbEKoEzvHePNyAVnVtAB6mckUqizo4+MtDfZrmqHM5TEYjDlgjnCvR58OCPa1V0AywVqnCzztOT7SxoduBMj1A=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"5f23b37c175c4a87ce7640558bbbbe042d9abef246297d0561578bf6d76e1371","subject":{"common_name":["www.baishancloud.com"],"country":["CN"],"locality":["Anshun"],"organization":["Guizhou BaishanCloud Technology Co., Ltd."],"province":["Guizhou"]},"subject_dn":"C=CN, ST=Guizhou, L=Anshun, O=Guizhou BaishanCloud Technology Co., Ltd., CN=www.baishancloud.com","subject_key_info":{"fingerprint_sha256":"fd1075b55e64c606b125f17d2a412ca8bd972f9d4c85bce6db5082cabe0db78c","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"qg5CkVr2QBKZbYkpBFOmTKGY3os0zXcuaUl1Uhsq5JrEPbb9s7c7zXzHyTN5lk608CiU4/V4GazQR9SiaGALAt6SSINBX+WomJL5y8vdcU+29NHsAqhBkdIbAPiUbNsK745pLNOiQHgWzYhNfo8ZNUbWcmHZZJKcEmEoJXAJ9OgtG5IfFNAYZ/APCaHEqvkF6bz1VLkOl0ZBLJjvqc+xac7CSuakkUurE96Dpb9q/NTREtgs8sg7cCOfMg3V8Smct8YVtpXIRbZyDLQJtFPwoMlBzSez0W4AeIfByxPq2XsQOKrqmYPf68Ase233u4RoYtwIHLjJDV3x5SDZG6sJGw=="}},"tbs_fingerprint":"ddcfbd89362ab1c35d2cb7446adddec8f7158001e26b30babd74aacfcd3f1496","tbs_noct_fingerprint":"cb692415717660e8b4e91bffe4482d95e144b03f049913f825b43376fb6e7588","validation_level":"OV","validity":{"end":"2020-08-03T12:00:00Z","length":"10238400","start":"2020-04-07T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"03de503556d14cbb66f0a3e21b1bc397b23dd155","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl3.digicert.com/DigiCertGlobalRootCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"9058ffb09c75a8515477b1edf2a34316389e6cc5"},"fingerprint_md5":"a95d7f13a64a5ebe00364d8be67deced","fingerprint_sha1":"7ccc2a87e3949f20572b18482980505fa90cac3b","fingerprint_sha256":"8cc34e11c167045824ade61c4907a6440edb2c4398e99c112a859d661f8e2bc7","issuer":{"common_name":["DigiCert Global Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","redacted":false,"serial_number":"7014754403668890451052340637799309683","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"MPGHVT2ECPwuXmq6fNLN1SzjvgLaXYl37fTpVsCS8CpVLUX3HCo/EFvz6eG+4ekAJbn3o8EDG+OeTo6SGwmVUvmsGP0fKQGLFwpzNPRnElXuIrzLMMqAmT/7zxJ/yz0YR4XYFD5PDJQ/e/URqFFs+6hgMKiQoYtvLkXbN7Ycfr0WWSGxMmetjaNLST87Ehks/J0P/4z/ASMK8wQFB+VnAQG5r4Fn6ynLr/j8hj6kXHOE+eU5c6wZ8wM2d6ApaPX07zvT7ohzCqwulepoItLNrGv4G15Twg/WduF1DMSRJcCFUw7igdEOGDDJZ6Tf0AoSeAdABbEPg1NDQjvn+/F3+w=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"54807f609be5726db4b8d1ffc1dbe273221b74fbf0afa083683d3741ed929ac5","subject":{"common_name":["GeoTrust RSA CA 2018"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"subject_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=GeoTrust RSA CA 2018","subject_key_info":{"fingerprint_sha256":"cd422b691368fb826801803b44e7968c046d228378ac811b0a97c24504fa37a0","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"v4rRY03hGOqHXegWPI9/tr6HFzekDPgxP59FVEAh150Hm8oDI0q9m+2FAmM/n4W57Cjv8oYi2/hNVEHFtEJ/zzMXAQ6CkFLTxzSkwaEB2jKgQK0fWeQz/KDDlqxobNPomXOMJhB3y7c/OTLo0lko7geG4gk7hfiqafapa59YrXLIW4dmrgjgdPstU0Nigz2PhUwRl9we/FAwuIMIMl5cXMThdSBK66XWdS3cLX184ND+fHWhTkAChJrZDVouoKzzNYoq6tZaWmyOLKv23v14RyZ5eqoi6qnmcRID0/i6U9J5nL1krPYbY7tNjzgC+PBXXcWqJVoMXcUw/iBTGWzpww=="}},"tbs_fingerprint":"4601ecf1c603e85159bdfa0e816cacf11925c8f02e2aa58c9a49195be0be8dc4","tbs_noct_fingerprint":"4601ecf1c603e85159bdfa0e816cacf11925c8f02e2aa58c9a49195be0be8dc4","validation_level":"unknown","validity":{"end":"2027-11-06T12:23:45Z","length":"315532800","start":"2017-11-06T12:23:45Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":true,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"176","lifetime_hint":"86400"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T21:45:08Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T11:54:26Z"},"get":{"body":"ERROR: ACCESS DENIED

      ERROR: ACCESS DENIED


      \n
      Mon, 13 Jul 2020 04:41:36 GMT (taikoo/BC237_lt-shanxi-yuncheng-2-cache-4)
      \n\n","body_sha256":"1c53ca4b2cb1c1f226f00bd0e21bd437320b5d1dde191b2d9b5849043dfa9051","headers":{"connection":"keep-alive","content_length":"235","content_type":"text/html","expires":"Mon, 13 Jul 2020 04:41:36 GMT","server":"web cache","unknown":[{"key":"x_ser","value":"BC237_lt-shanxi-yuncheng-2-cache-4"},{"key":"date","value":"Mon, 13 Jul 2020 04:41:36 GMT"}]},"metadata":{"description":"web","product":"web"},"status_code":"403","status_line":"403 Forbidden","title":"ERROR: ACCESS DENIED","timestamp":"2020-07-13T04:41:35Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T08:58:25Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T11:04:22Z"},"dhe":{"support":false,"timestamp":"2020-07-12T11:56:40Z"}}},"ipint":"1021185007","updated_at":"2020-07-14T11:54:26Z","location":{"country_code":"CN","continent":"Asia","city":"Yuncheng","timezone":"Asia/Shanghai","province":"Shanxi","latitude":35.0231,"longitude":110.9928,"registered_country":"China","registered_country_code":"CN","country":"China"},"autonomous_system":{"description":"CHINA169-BACKBONE CHINA UNICOM China169 Backbone","routed_prefix":"60.220.0.0/14","asn":"4837","country_code":"CN","name":"CHINA169-BACKBONE CHINA UNICOM China169 Backbone","path":["7018","4837"]},"protocols":["443/https","53/dns","80/http","8080/http"],"ipinteger":"-284434884"} +{"address":"82.213.212.193","ip":"82.213.212.193","p80":{"http":{"get":{"body":"\n\n\n\n\n\n\n
      \n
      \n
      \n
      502
      \n
      \n
      \n

      \n
      \n\n
      \n
      \n\n\n","body_sha256":"968b979aed80e45020000500c92c3d7a75ef208d3adeed86d704ef7e35bfd03f","headers":{"connection":"keep-alive","content_length":"3322","content_type":"text/html","unknown":[{"key":"keep_alive","value":"timeout=20"},{"key":"etag","value":"\"5d42c936-cfa\""},{"key":"date","value":"Tue, 07 Jul 2020 07:31:49 GMT"}]},"status_code":"502","status_line":"502 Bad Gateway","timestamp":"2020-07-07T07:31:49Z"}}},"ports":["80","443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.int-x3.letsencrypt.org/"],"ocsp_urls":["http://ocsp.int-x3.letsencrypt.org"]},"authority_key_id":"a84a6a63047dddbae6d139b7a64565eff3a8eca1","basic_constraints":{"is_ca":false},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"8JWkWfIA0YJAEC0vk4iOrUv+HUfjmeHQNKawqKqOsnM=","signature":"BAMASDBGAiEAw6MCbIYj28J+79AxaRngmXJBbiMvWUJY8Mac1O4qUAwCIQDiw+meeGk3MniMssinafAQQpkCJuuIIgc6H8vZ2FScVA==","timestamp":"1590778558","version":"0"},{"log_id":"sh4FzIuizYogTodm+Su5iiUgZ2va+nDnsklTLe+LkF4=","signature":"BAMASDBGAiEAroBkMvugUlCGsAw0VTRCUONKTIWUKAEJODdjWTNb0aACIQC/1d7+loR6ZHIImRbjYMIu5kzZjUsqvZHLcWlp0HOj3Q==","timestamp":"1590778558","version":"0"}],"subject_alt_name":{"dns_names":["guardalotodo.es"]},"subject_key_id":"d77937f217dc40bbf15729cbb1d7e65084b6904e"},"fingerprint_md5":"aec96c91afe07cf18dd3a94d8e56dad7","fingerprint_sha1":"032e78db797ac311cc4343ae322627d7ce2b55dc","fingerprint_sha256":"1fd117241deaa9a94086f18121c0f888ca8118dcc3354470da9705ba5cae9c1a","issuer":{"common_name":["Let's Encrypt Authority X3"],"country":["US"],"organization":["Let's Encrypt"]},"issuer_dn":"C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3","names":["guardalotodo.es"],"redacted":false,"serial_number":"430151937632010937926053050519442274200455","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"bR2KQFGc7ee3XgbQCGoW4wbTnHrCRI1d0qQpxAMRlh8otQDMH80rCDZvV42iEBCgN+qe73wnfgHHGM7wg0pfRSHjXMV6CpjS+YB77Bkvmi1m30BP2jZozAzXFwRKuC4sVkG32BuV/tDLmi/OcBscg9qnVz6I5tVm2eMxxHpDJYOyMiR53nFwdabQynSGHvddF5VfQEvrCF864XdEqA3wJitD7ul16lfvYU4u4AzhXX4pddt9cKdwXFblOhxEeT09v9ZwLDANf44VldrBr3cnpfNuwQmJrP73ULl5L2Z0YlUVKV444iY1oKhuCSVVzMAoy0kFPIgNVdycXRXRSou3QQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"70bb8c51d8d15cd2cc3e623dc0c0b525b73a05e74517d873df897267fee1b3f4","subject":{"common_name":["guardalotodo.es"]},"subject_dn":"CN=guardalotodo.es","subject_key_info":{"fingerprint_sha256":"fd6b04b2ae62368308988cf383fb72cab5b79414a789463333ab3006f294bbbd","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"y9s22kCA+AK/B8XjO5nMX1AwalwwWT9KHUrOA7EuQNlPi92UfsT6AExPkwkDeAF42xVu7qsokZrLuodgLlppMMbTuQu5WXPvdUj+uA1EjsvfeH8zjXPToeXPVwy2WgZellMKT/GtS9ausuGn1WEJOianvFcXKT/QzLayqzM4Bx/0l1bjm0RVqWAgEfxp2FlsfVQHiafjw9D2F2s2XJ8Awm0kUSfOKaBNh5snXaNKDHcBMLZHDADuiwMF4A2sDZ0KIoL+7PPnJdta+Du/kKgis27C6/ICqAiBiOAOnZEebfZUfBGKXkMjbYtb4RuMt1FE29JJ5oxelnsD8FgNbtbDNQ=="}},"tbs_fingerprint":"9831408fdd5e39c79676c8c3cd683e3e5ee110741ac47be0f3cf0441d5e8ba09","tbs_noct_fingerprint":"24211dbe370150c671c25b27206a364c8daf04145b872386fc84e33314b7c4cf","validation_level":"DV","validity":{"end":"2020-08-27T17:55:58Z","length":"7776000","start":"2020-05-29T17:55:58Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://apps.identrust.com/roots/dstrootcax3.p7c"],"ocsp_urls":["http://isrg.trustid.ocsp.identrust.com"]},"authority_key_id":"c4a7b1a47b2c71fadbe14b9075ffc41560858910","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["http://cps.root-x1.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1"}],"crl_distribution_points":["http://crl.identrust.com/DSTROOTCAX3CRL.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"a84a6a63047dddbae6d139b7a64565eff3a8eca1"},"fingerprint_md5":"b15409274f54ad8f023d3b85a5ecec5d","fingerprint_sha1":"e6a3b45b062d509b3382282d196efe97d5956ccb","fingerprint_sha256":"25847d668eb4f04fdd40b12b6b0740c567da7d024308eb6c2c96fe41d9de218d","issuer":{"common_name":["DST Root CA X3"],"organization":["Digital Signature Trust Co."]},"issuer_dn":"O=Digital Signature Trust Co., CN=DST Root CA X3","redacted":false,"serial_number":"13298795840390663119752826058995181320","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJouM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwuX4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlGPfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"78d2913356ad04f8f362019df6cb4f4f8b003be0d2aa0d1cb37d2fd326b09c9e","subject":{"common_name":["Let's Encrypt Authority X3"],"country":["US"],"organization":["Let's Encrypt"]},"subject_dn":"C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3","subject_key_info":{"fingerprint_sha256":"60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"nNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EFq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWAa6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3Dkw=="}},"tbs_fingerprint":"3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838","tbs_noct_fingerprint":"3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838","validation_level":"DV","validity":{"end":"2021-03-17T16:40:46Z","length":"157766400","start":"2016-03-17T16:40:46Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T07:57:57Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T12:14:07Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T08:16:08Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"rIToGfdcz9E8ywwRSRO3qiaNJ/aFDAGDCz8Rq9JoPucdq16MM3ZiVJrevDuE7TPgxUDwtI8AmwM19EL0Y98B5FtI9HwzlMoZqBsTRCzm+swPWNq0D7Vo8PVuKB1yB5vXLIMV6yMLVzau2oUbxAoE4PHtQ6YvMrLfJVvgeAnJ0PDJNQKhnAS68r1O+LCn5AzJYdR432LoncK8WBOrf31zWP5ty/vvPE4Flq5yj6aKuyurYJvh6sE/ZgPow00PReh+4jdtZ5o6tC1q/akbHZm/5pX96KQLLgONz4xz3Xab55cRywUf25qkhGDqoMDH+WFINLHpiUaEKf60+zsmEJRYaw=="}},"support":true,"timestamp":"2020-07-12T06:46:09Z"}}},"ipint":"1389745345","updated_at":"2020-07-12T06:46:09Z","location":{"country_code":"ES","continent":"Europe","city":"Villalbilla","postal_code":"28810","timezone":"Europe/Madrid","province":"Madrid","latitude":40.4304,"longitude":-3.299,"registered_country":"Spain","registered_country_code":"ES","country":"Spain"},"autonomous_system":{"description":"AS15704","routed_prefix":"82.213.192.0/19","asn":"15704","country_code":"ES","name":"AS15704","path":["7018","1299","15704"]},"protocols":["443/https","80/http"],"ipinteger":"-1043016366"} +{"address":"185.182.187.240","ipint":"3115760624","updated_at":"2020-07-07T16:48:05Z","ip":"185.182.187.240","p80":{"http":{"get":{"status_code":"502","status_line":"502 Bad Gateway","timestamp":"2020-07-07T16:48:05Z"}}},"location":{"country_code":"US","continent":"North America","city":"Los Angeles","postal_code":"90014","timezone":"America/Los_Angeles","province":"California","latitude":34.0549,"longitude":-118.2578,"registered_country":"Germany","registered_country_code":"DE","country":"United States"},"autonomous_system":{"description":"QUICKPACKET","routed_prefix":"185.182.184.0/22","asn":"46261","country_code":"US","name":"QUICKPACKET","path":["11164","3491","46261"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"-256133447","version":"0","tags":["http"]} +{"address":"181.28.136.196","ipint":"3038546116","updated_at":"2020-07-15T12:23:46Z","p7547":{"cwmp":{"get":{"body":"401 Unauthorized

      Authorization Required

      This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required


      ","body_sha256":"721e96983952a29827a40e04ffddf6807212e81923bd0af4f1d90dcd482f504b","headers":{"connection":"Keep-Alive","content_length":"387","content_type":"text/html;charset=iso-8859-1","server":"Cisco-CcspCwmpTcpCR/1.0","www_authenticate":"Digest realm=\"Cisco_CCSP_CWMP_TCPCR\", nonce=\"04403200230b6fae6e8644d6c616bae8\", algorithm=\"MD5\", domain=\"/\", qop=\"auth\", stale=\"true\""},"status_code":"401","status_line":"401 Unauthorized","title":"401 Unauthorized","timestamp":"2020-07-15T12:23:46Z"}}},"ip":"181.28.136.196","location":{"country_code":"AR","continent":"South America","city":"Buenos Aires","postal_code":"1871","timezone":"America/Argentina/Buenos_Aires","province":"Buenos Aires F.D.","latitude":-34.6021,"longitude":-58.3845,"registered_country":"Argentina","registered_country_code":"AR","country":"Argentina"},"autonomous_system":{"description":"Telecom Argentina S.A.","routed_prefix":"181.28.128.0/19","asn":"10318","country_code":"AR","name":"Telecom Argentina S.A.","path":["7018","3356","10481","10318"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-997712715","version":"0","tags":["cwmp"]} +{"address":"223.26.49.46","ip":"223.26.49.46","p80":{"http":{"get":{"body":" \r\n\r\n\r\n\r\n皇冠比分网-中国人民银行征信中心\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n安全提示:征信中心未授权任何第三方应用程序(APP)提供个人信用报告查询服务,敬请广大用户注意.\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n\r\n
      \r\n

      征信客服电话:400-810-8866

      \r\n\r\n
      \r\n\r\n\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n\r\n客户服务\r\n
      \r\n\r\n\r\n
      \r\n \r\n\r\n
      \r\n
      \r\n精彩视频更多>>\r\n
      \r\n
      \r\n\r\n\r\n\r\n \r\n
      \r\n
      \r\n\r\n\r\n
      \r\n
      \r\n更多>>\r\n征信系统共享成员\r\n
      \r\n\r\n
      \r\n \r\n\r\n
      \r\n\r\n
      \r\n\r\n
      核心业务
      \r\n
      \r\n\r\n\r\n\r\n\r\n \r\n
      \r\n\r\n
      \r\n\r\n
      征信业务问答
      \r\n\r\n\r\n
      \r\n\r\n\r\n\r\n\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n\r\n\r\n","body_sha256":"14475e94a2faafd81260a2c7f31021ce465a504c3cd42043b611cd8082211d7a","headers":{"content_type":"text/html; charset=utf-8","server":"Apache/2","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 06:50:43 GMT"},{"key":"cputime","value":"26"}],"vary":"Accept-Encoding,User-Agent","x_powered_by":"PHP/5.2.17"},"metadata":{"description":"Apache httpd 2","manufacturer":"Apache","product":"httpd","version":"2"},"status_code":"200","status_line":"200 OK","title":"皇冠比分网-中国人民银行征信中心","timestamp":"2020-07-14T06:50:46Z"}}},"ports":["80","21","443"],"version":"0","p21":{"ftp":{"banner":{"banner":"220 ProFTPD 1.3.4b Server ready.","metadata":{"description":"ProFTPD 1.3.4 b","product":"ProFTPD","revision":"b","version":"1.3.4"},"timestamp":"2020-07-13T03:42:23Z"}}},"tags":["ftp","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"fingerprint_md5":"74170781b24d5b60c184e71887efefc2","fingerprint_sha1":"5a8214c8718a9e2d65d1cd628059b3abe5830fd4","fingerprint_sha256":"0d628069fae4750897489f463985b83b1943106517589aa28f0cacb68ee4c3da","issuer":{"common_name":["localhost"],"country":["US"],"email_address":["webmaster@localhost"],"locality":["Sometown"],"organization":["none"],"organizational_unit":["none"],"province":["Someprovince"]},"issuer_dn":"C=US, ST=Someprovince, L=Sometown, O=none, OU=none, CN=localhost, emailAddress=webmaster@localhost","redacted":false,"serial_number":"14466090654504114154","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"jkxComtTsGYoPJ+wGD2pxb3TGMGtG9Ur9RlFOm3ziE3Q/5eDx9DB9FHt3L+FWN04DL+jm29+NWpQ7srBUcmjE2myZ3bHpfFlphQLRuJr1rQ/5T5WsBkwGiuHfmRMsZ35PMH2NH9ErLMyN5hDeDY2JNH9iuInvpM1eNeLRvqHWJM="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"340e7b735eae4aaa2405c7bd47f6c880af9e27e4283c24a2efdd3e70b5580c9a","subject":{"common_name":["localhost"],"country":["US"],"email_address":["webmaster@localhost"],"locality":["Sometown"],"organization":["none"],"organizational_unit":["none"],"province":["Someprovince"]},"subject_dn":"C=US, ST=Someprovince, L=Sometown, O=none, OU=none, CN=localhost, emailAddress=webmaster@localhost","subject_key_info":{"fingerprint_sha256":"8f08b52883a79d4d3295e49463419fdc29f9c66a8760b073d6f1150069437619","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"tCGq/muK3ZnmyeQFksaMoxy+d59116HnouyKfMEjjYGDH0Rq3skga8mGGSOaJOKJV2o5VIjFKszmChTXfsEBgjwV7CHIlAezHg+vDRbR6p+oo07kVrX4ARMW3vHMItfJQ1p6OgA2X5kHOu7zmzMInPKDPfRkp6rUv6l362pIHp0="}},"tbs_fingerprint":"bc110fa60a56d405ac59d35e791aa87b078e2e13a712e4d836312be9e9f1d543","tbs_noct_fingerprint":"8bfb71298855d99839c911c801797f18d2df022f582722a368546058f57a415d","validation_level":"unknown","validity":{"end":"2040-08-11T17:14:07Z","length":"863913600","start":"2013-03-27T17:14:07Z"},"version":"2"}},"cipher_suite":{"id":"0x0005","name":"TLS_RSA_WITH_RC4_128_SHA"},"ocsp_stapling":false,"session_ticket":{"length":"192","lifetime_hint":"300"},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2","timestamp":"2020-07-10T04:33:00Z"},"heartbleed":{"heartbeat_enabled":true,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T11:48:43Z"},"ssl_3":{"support":true,"timestamp":"2020-07-15T09:22:56Z"},"get":{"body":"Apache is functioning normally\n","body_sha256":"9e57007b15edab321b71b57c500e3d677eeb54fb37017527dae0a5e52358eb69","headers":{"accept_ranges":"bytes","content_type":"text/html","last_modified":"Wed, 27 Mar 2013 17:14:07 GMT","server":"Apache/2","unknown":[{"key":"date","value":"Wed, 15 Jul 2020 03:13:39 GMT"},{"key":"etag","value":"\"4c116c-2c-4d8eb2a6dd47e\""}],"vary":"Accept-Encoding,User-Agent"},"metadata":{"description":"Apache httpd 2","manufacturer":"Apache","product":"httpd","version":"2"},"status_code":"200","status_line":"200 OK","timestamp":"2020-07-15T03:13:40Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T06:26:17Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T09:30:32Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"1024","value":"1n3kQMu73Bk21pPTSv0K1QyE0jmkX1ILuIF0y5i86VGEn5EuY5xy+xO0tNcXfhbVWsF5ukILKin+MkpGemNegf9ZATd77dz9MxaKRhqtO3La6IYAeARbB6fbynh0CH0VEOqfzJ3dMwUH3WLbiK6qdH3g9NbivWiw5zk+DyQhjrM="}},"support":true,"timestamp":"2020-07-12T14:12:24Z"}}},"ipint":"3743035694","updated_at":"2020-07-15T09:22:56Z","location":{"country_code":"HK","continent":"Asia","timezone":"Asia/Hong_Kong","latitude":22.25,"longitude":114.1667,"registered_country":"Hong Kong","registered_country_code":"HK","country":"Hong Kong"},"autonomous_system":{"description":"SUNHK-DATA-AS-AP Sun Network (Hong Kong) Limited - HongKong Backbone","routed_prefix":"223.26.49.0/24","asn":"38197","country_code":"HK","name":"SUNHK-DATA-AS-AP Sun Network (Hong Kong) Limited - HongKong Backbone","path":["11164","3491","64050","38197","38197"]},"protocols":["21/ftp","443/https","80/http"],"ipinteger":"774970079"} +{"address":"92.242.58.87","ip":"92.242.58.87","p80":{"http":{"get":{"body":"\r\n404 Not Found\r\n\r\n

      404 Not Found

      \r\n
      nginx
      \r\n\r\n\r\n","body_sha256":"55f7d9e99b8e2d4e0e193b2f0275501e6d9c1ebd29cadbea6a0da48a8587e3e0","headers":{"connection":"keep-alive","content_length":"146","content_type":"text/html","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 06:23:39 GMT"}]},"status_code":"404","status_line":"404 Not Found","title":"404 Not Found","timestamp":"2020-07-07T06:23:39Z"}}},"ports":["80","443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"basic_constraints":{"is_ca":false},"extended_key_usage":{"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"subject_alt_name":{"dns_names":["ingress.local"]}},"fingerprint_md5":"28852943ea92e0accf1c914c62e2a517","fingerprint_sha1":"af019214e7f334eea25a7c16bea199e0d6780406","fingerprint_sha256":"e9aa1d1bb9c1697a7d69a2508615407c7b5847ab93a4e0218d84400be1d12a57","issuer":{"common_name":["Kubernetes Ingress Controller Fake Certificate"],"organization":["Acme Co"]},"issuer_dn":"O=Acme Co, CN=Kubernetes Ingress Controller Fake Certificate","names":["ingress.local"],"redacted":false,"serial_number":"307931631484551462025559046936547114038","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"gInB7ZbHY/yRuwbpqUQm4Ew0q410q5FYUM3KpUC7++S9jl5e6FNG2wrZS69dG+xRb1GPe17BvdVVhcbMNsZSSJHzE3d9qQHyan3Z8bPakLB1/o4juBtAssXz04qqNDFQGnJlI4f1pwYT8TkjrPcPoNkOAi9BTh5igxREsPrR/kAt/ogjJyQw+/y0qndHi5scVR0Cqx4B3+TsVqRrQlI3f31cOVk9ANGrR3N+KhHq8VLNtKDTGtgfrAlrIF637YAvTvMdlj1H3f0MojiyZrB+UJkmCOZ3Px2ABytMi1/IbP2YKjDuFrXeBGQfqGx4Tt2QpBxP7Al53GqmxFX+/vvLdA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d3c8052b710366633b8de41fc8947c9b3843b171e3ac8e85c666eb1961c747f7","subject":{"common_name":["Kubernetes Ingress Controller Fake Certificate"],"organization":["Acme Co"]},"subject_dn":"O=Acme Co, CN=Kubernetes Ingress Controller Fake Certificate","subject_key_info":{"fingerprint_sha256":"efaae9fb4118e7913ae19c13c1363e1e5c8105722efdaae897bc371d35d6cc41","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"lF3syUigeCctwFy3dsBriKW5EumH1HWrigDygtUbJW5rA4hewu705AHYlGCm4I00gDXeLqoaZv+BysTk2xuZR4u9j3/C4qR1B1S5kizSOaryJJiarbMQmmMYGA09++tLxlwH7zOtJJBY7QbK2bNMDc2Wzky3rKe7SOxo25dgBNB7NCiiC6cDBXt9h6Xa+T4v9KZi1/hd/NEpd7hh7nNdWVJUYnMJb1vJDm2GY7FRyd9N3aLdjIjLINsv605L1JiAVeIuylDvzlAZ1Uq7LKFaPZFjg4EnmCnh3PLcNLH/0tYb8vteHjzXzRrVkEq9vhqEOdyh/+alUQ0kAdl4+abWpw=="}},"tbs_fingerprint":"197bf4c0978b12576f8ec18f86bc7aa8fc0a09fe0bc867062dbded4ca71dff99","tbs_noct_fingerprint":"197bf4c0978b12576f8ec18f86bc7aa8fc0a09fe0bc867062dbded4ca71dff99","validation_level":"unknown","validity":{"end":"2021-07-05T23:03:37Z","length":"31536000","start":"2020-07-05T23:03:37Z"},"version":"3"}},"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"176","lifetime_hint":"600"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2","timestamp":"2020-07-10T03:54:58Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T04:14:31Z"},"get":{"body":"\r\n404 Not Found\r\n\r\n

      404 Not Found

      \r\n
      nginx
      \r\n\r\n\r\n","body_sha256":"55f7d9e99b8e2d4e0e193b2f0275501e6d9c1ebd29cadbea6a0da48a8587e3e0","headers":{"connection":"keep-alive","content_length":"146","content_type":"text/html","strict_transport_security":"max-age=15724800","unknown":[{"key":"date","value":"Wed, 15 Jul 2020 01:38:48 GMT"}]},"status_code":"404","status_line":"404 Not Found","title":"404 Not Found","timestamp":"2020-07-15T01:38:47Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T11:18:42Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T05:43:15Z"},"dhe":{"support":false,"timestamp":"2020-07-12T11:58:26Z"}}},"ipint":"1559378519","updated_at":"2020-07-15T01:38:47Z","location":{"country_code":"RU","continent":"Europe","city":"Moscow","postal_code":"121374","timezone":"Europe/Moscow","province":"Moscow","latitude":55.7527,"longitude":37.6172,"registered_country":"Russia","registered_country_code":"RU","country":"Russia"},"autonomous_system":{"description":"RIM2000M-AS 2, Odesskaya str.","routed_prefix":"92.242.58.0/24","asn":"24936","country_code":"RU","name":"RIM2000M-AS 2, Odesskaya str.","path":["11164","3491","20485","20485","31261","24936"]},"protocols":["443/https","80/http"],"ipinteger":"1463480924"} +{"address":"52.91.162.183","ip":"52.91.162.183","ports":["1521","3389"],"version":"0","tags":["database","oracle","rdp","remote_display"],"p1521":{"oracle":{"banner":{"accept_version":"312","connect_flags0":{"SERVICES_WANTED":true,"UNKNOWN_20":true,"UNKNOWN_40":true},"connect_flags1":{"SERVICES_WANTED":true,"UNKNOWN_40":true},"did_resend":true,"global_service_options":{"HEADER_CHECKSUM":true,"UNKNOWN_0001":true,"UNKNOWN_0040":true},"nsn_service_versions":{"Authentication":"11.2.0.2.0","DataIntegrity":"11.2.0.2.0","Encryption":"11.2.0.2.0","Supervisor":"11.2.0.2.0"},"supported":true,"timestamp":"2020-07-14T10:25:02Z"}}},"p3389":{"rdp":{"banner":{"connect_response":{"connect_id":"0","domain_parameters":{"domain_protocol_ver":"2","max_channel_ids":"34","max_mcspdu_size":"65528","max_provider_height":"1","max_token_ids":"0","max_user_id_channels":"3","min_octets_per_second":"0","tcs_per_mcs":"1"}},"metadata":{"description":"Remote Desktop 5.0","product":"Remote Desktop","version":"5.0"},"protocol_supported_flags":{"dynvc_graphics_pipeline":true,"extended_client_data_supported":true,"neg_resp_reserved":true,"restricted_admin_mode":true},"selected_security_protocol":{"raw_value":"1","tls":true},"supported":true,"tls":{"certificate":{"parsed":{"extensions":{"extended_key_usage":{"server_auth":true},"key_usage":{"data_encipherment":true,"key_encipherment":true,"value":"12"}},"fingerprint_md5":"589271958641d9bd693c49b12d0d6ac0","fingerprint_sha1":"a8d7d1083b686d7f469888b5dec4548c3850c87d","fingerprint_sha256":"559071e378ec375dd5e2b424bac06e36b7bf5310abe4876213d2c793921ea2e7","issuer":{"common_name":["WIN-OVA5B1SBR5F"]},"issuer_dn":"CN=WIN-OVA5B1SBR5F","redacted":false,"serial_number":"33230590217825702133294017403593057151","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"CJWX4D5vW3vFeRUuI+pVPY8Njyn2LuSO4jV3tPjIk/ztcLWSDLBFYa2MUvyAnGTxp6L1Fg3Vi3Yh/8lUj8iCvP70eGAejIS2XP9qaoRiBJRV5v/X449WOh/Wxj/lefofbRgkwm/i4gs3TB1bo/o3/vnNGoe/624Uzpz5knIRMtcMxv78hktU3Us8A3f7Uwj/VhoDI3v2R/TrH13DTTRjpziRkL3MnwRr7e06t8FqVBzsv77YbdLZ7JZAjZWTgcZX0uzXHBt3MLTzA3AxLxcJY0OzRsInohp08MlvlO9qJyhX9aqBEnqKCfsr8hjlxXXa8eYJMeekpG5rHhcHNnakKg=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"fe821a8b91d849d0640644c9d24a809f2b99387f894d95b3bf04c760b41b5292","subject":{"common_name":["WIN-OVA5B1SBR5F"]},"subject_dn":"CN=WIN-OVA5B1SBR5F","subject_key_info":{"fingerprint_sha256":"11b7769c3da2cbc8f6300ed6f0af04ecd1cbbda4ada3e8deed9118919aaaef57","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wbOUGhdBZyeIJ4vRDj0Nt5U1ygmjSzfXXdXLgRIEmH7uLy7ib8RkUYAumOWfBN61AGgHZ69d6OUydBE3wlXqoI9ldyX5yO+xM7TfOQAVInTdS4nejh4+T9lIbmCLo2X9EGG4XfueBoML84kGzBf/h2pTl7KPvTOEEc/rgylBbuR7AcdBWLFjtNGsDhnPX8dtB8w3qn6d4MhFknrKGRgKTQb62UyIoRVQErtrR4jeTn6VMPhUN1TlAavK07ZiQ8M8vuoU9R5RJYpHhwnFtNU5MhuFb0MwxRbza5lhQpkXXzhTdQDZ/6Bjnrnv4nzE3tZiGW9sEFso57ykd3xxjaOwrQ=="}},"tbs_fingerprint":"9e36499c14f974fcb4f537977a14d334f9ae44b2bfcdcb75b3e98893151fb00f","tbs_noct_fingerprint":"9e36499c14f974fcb4f537977a14d334f9ae44b2bfcdcb75b3e98893151fb00f","validation_level":"unknown","validity":{"end":"2020-11-30T03:27:39Z","length":"15811200","start":"2020-05-31T03:27:39Z"},"version":"3"}},"cipher_suite":{"id":"0xC014","name":"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha1","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: failed to load system roots and no roots provided","browser_trusted":false},"version":"TLSv1.2"},"version":{"major":"5","minor":"0","raw_value":"524292"},"timestamp":"2020-07-10T04:02:28Z"}}},"ipint":"878420663","updated_at":"2020-07-14T10:25:02Z","location":{"country_code":"US","continent":"North America","city":"Ashburn","postal_code":"20149","timezone":"America/New_York","province":"Virginia","latitude":39.0481,"longitude":-77.4728,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AMAZON-AES","routed_prefix":"52.90.0.0/15","asn":"14618","country_code":"US","name":"AMAZON-AES","path":["16509","14618"]},"protocols":["1521/oracle","3389/rdp"],"ipinteger":"-1214096588"} +{"address":"103.76.228.9","ip":"103.76.228.9","p80":{"http":{"get":{"body":"\n\n\n \n \n 404 Error\n \n \n \n\n\n\n\n

      \n Sorry, this page doesn't exist.
      Please check the URL or go back a page.\n

      \n\n

      \n 404 Error. Page Not Found.\n

      \n\n\n\n\n","body_sha256":"332dd04ae9deb819b7345e6f9d455c1b29b7f828cbb7d2a96afda1a9f3a6b48f","headers":{"accept_ranges":"bytes","content_type":"text/html","last_modified":"Tue, 28 Apr 2020 17:23:37 GMT","server":"Apache","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 07:01:12 GMT"}],"vary":"Accept-Encoding"},"metadata":{"description":"Apache httpd","manufacturer":"Apache","product":"httpd"},"status_code":"404","status_line":"404 Not Found","title":"404 Error","timestamp":"2020-07-07T07:01:11Z"}}},"ports":["80","465","993","995","21","53","22","3306","443","587","110","143"],"version":"0","p21":{"ftp":{"banner":{"banner":"220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------\r\n220-You are user number 1 of 150 allowed.\r\n220-Local time is now 22:36. Server port: 21.\r\n220-IPv6 connections are also welcome on this server.\r\n220 You will be disconnected after 15 minutes of inactivity.","metadata":{"description":"Pure-FTPd","product":"Pure-FTPd"},"timestamp":"2020-07-13T22:36:52Z"}}},"p53":{"dns":{"lookup":{"errors":false,"open_resolver":false,"questions":[{"name":"c.afekv.com","type":"A"}],"resolves_correctly":false,"support":true,"timestamp":"2020-07-12T19:33:13Z"}}},"tags":["database","dns","ftp","http","https","imap","imaps","mysql","pop3","pop3s","smtp","ssh"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.sectigo.com/SectigoRSADomainValidationSecureServerCA.crt"],"ocsp_urls":["http://ocsp.sectigo.com"]},"authority_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://sectigo.com/CPS"],"id":"1.3.6.1.4.1.6449.1.2.2.7"},{"id":"2.23.140.1.2.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"RqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUc=","signature":"BAMARzBFAiB70swEcQ69dF3X+Lk0TVjSgbG4cv/BGALmpC2zaNLrWAIhAKPscR3NGoghoyF54xqODLMgmlV65CEx1Lwwvo0g4auY","timestamp":"1589332274","version":"0"},{"log_id":"36Veq2iCTx9sre64X04+WurNohKkal6OOxLAIERcKnM=","signature":"BAMARjBEAiAShPC5b7OL5kB9S2GhuKW1PSC6uzenHTkfJhLeeMR9OwIgTzZevv0+J2X8NOW5oF1laGjM2KgqmS8b04m86CP0jBo=","timestamp":"1589332275","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMARzBFAiEAzuS56Lz5Nb2STh3dGa2EZ836aaBYT/txmgY9Kw9lTuICIH3rvNKQScQ7loyq1UFrsoktooyv6KvMIFeEaJMAP4Io","timestamp":"1589332274","version":"0"}],"subject_alt_name":{"dns_names":["*.webhostbox.net","webhostbox.net"]},"subject_key_id":"82be00fa059adec4da24a4d0d0fdaa998605af32"},"fingerprint_md5":"32bd2db5bda7b77d665e19b3d30fd9ec","fingerprint_sha1":"3976d530b3db64f7e14c0b4db99926feaadb495a","fingerprint_sha256":"003453a4d97b61bb613c0d0ea9a201c240f127e3c2da4b88c2e41043ac1bf562","issuer":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","names":["*.webhostbox.net","webhostbox.net"],"redacted":false,"serial_number":"182446423222663759520993008783205313670","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"kPxtls+WdMNUOIwclRWW2HTjXbE5i3P2MoRmHgr+oyPjwoZw0VrA1oOI4kuqvB6QlY4pA1f4Ojdb+RB19mBY5t3MhbKwWXar6b7jZ9QtHvDaYWoFeQ6EnEjk2Gi8u2OM3oAqjCoAxNnBOHKb+O1mnwFBO7O7HV1bECGGfEXFIAW3x8a5j6NLqwbY9fOcq7sGWdjannfJsRitFvqQEgTeP6WBFcx3T+F9Ky8V3b8wpapI+2CQR1bcHidcRtQvEzMMw0m0O0QtLlhHHASVxCYjSI2Lm40QJGzOgo3WeFNZNf9rPFuI3D1DmNbLsIOxbkXCpCwPoWw8vsuclz8ALLVMOA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"80adc5ea5d27c6d1e9994836aae29f15ed3c670189ca829182ad254aa3b7d20c","subject":{"common_name":["*.webhostbox.net"]},"subject_dn":"CN=*.webhostbox.net","subject_key_info":{"fingerprint_sha256":"ef347190df007bcd3d7c522dad694e47ef3a75736244901ed923eebdd987ba52","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"uDge+vpfQflLrHA2s3ckN3OzgO4sdCQ748jI6Q71Yed/AoUMBW6p3JhJl2vGXCYjRKscmtIaTX+RB1jhvsO4BOneJwE6NVT0pk1JEySf+KB3jn9OVcxLXCtHqUpzmF6h507MZFM29/5TlesrkYWoNexlP6VjBjT6b2jzv/vwRvjaYaqHNnVU1OWYJE3xZ6TX16SEoOStRBVyqxrcG640V9ewP4OHpH0fa9miO46t6diRcayq5S7bLZC3IVyZl0TbhTI2Xv/N6Zqe4X+FHPh1eb9Qvb22eJx0aEQ+NNfA123PGMXqgcV0pMYfkS6crHDpNH8FfdKAWAKuzWNXOlIcVw=="}},"tbs_fingerprint":"befa6c21e7143a8a00647383a5e44aea1f88e381bee83cd412b03974840cf39d","tbs_noct_fingerprint":"ff3d3a389676a05aa9621ba6b83f7aac8e4ab9ac83cf4d7f7c7b2aed0967afbb","validation_level":"DV","validity":{"end":"2022-06-02T23:59:59Z","length":"64886399","start":"2020-05-13T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.usertrust.com/USERTrustRSAAddTrustCA.crt"],"ocsp_urls":["http://ocsp.usertrust.com"]},"authority_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.5.29.32.0"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.usertrust.com/USERTrustRSACertificationAuthority.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1"},"fingerprint_md5":"adab5c4df031fb9299f71ada7e18f613","fingerprint_sha1":"33e4e80807204c2b6182a3a14b591acd25b5f0db","fingerprint_sha256":"7fa4ff68ec04a99d7528d5085f94907f4d1dd1c5381bacdc832ed5c960214676","issuer":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"issuer_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","redacted":false,"serial_number":"166627644428940058458651716034439089575","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"Mr9hvQ5Iw0/HukdN+Jx4GQHcEx2Ab/zDcLRSmjEzmldS+zGea6TvVKqJjUAXaPgREHzSyrHxVYbH7rM2kYb2OVG/Rr8PoLq0935JxCo2F57kaDl6r5ROVm+yezu/Coa9zcV3HAO4OLGiH19+24rcRki2aArPsrW04jTkZ6k4Zgle0rj8nSg6F0AnwnJOKf0hPHzPE/uWLMUxRP0T7dWbqWlod3zu4f+k+TY4CFM5ooQ0nBnzvg6s1SQ36yOoeNDT5++SR2RiOSLvxvcRviKFxmZEJCaOEDKNyJOuB56DPi/Z+fVGjmO+wea03KbNIaiGCpXZLoUmGv38sbZXQm2V0TP2ORQGgkE49Y9Y3IBbpNV9lXj9p5v//cWoaasm56ekBYdbqbe4oyALl6lFhd2zi+WJN44pDfwGF/Y4QA5C5BIG+3vzxhFoYt/jmPQT2BVPi7Fp2RBgvGQq6jG35LWjOhSbJuMLe/0CjraZwTiXWTb2qHSihrZe68Zk6s+go/lunrotEbaGmAhYLcmsJWTyXnW0OMGuf1pGg+pRyrbxmRE1a6Vqe8YAsOf4vmSyrcjC8azjUeqkk+B5yOGBQMkKW+ESPMFgKuOXwIlCypTPRpgSabuY0MLTDXJLR27lk8QyKGOHQ+SwMj4K00u/I5sUKUErmgQfky3xxzlIPK1aEn8="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"d44564efcb1efabb43cd7906feb0a59e3b9d57e23a4619e6e912d0058b87c354","subject":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","subject_key_info":{"fingerprint_sha256":"e1ae9c3de848ece1ba72e0d991ae4d0d9ec547c6bad1dddab9d6beb0a7e0e0d8","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1nMz1tc8INAA0hdFuNY+B6I/x0HuMjDJsGz99J/LEpgPLT+NTQEMgg8Xf2Iu6bhIefsWg06t1zIlk7cHv7lQP6lMw0Aq6Tn/2YHKHxYyQdqAJrkjeocgHuP/IJo8lURvh3UGkEC0MpMWCRAIIz7S3YcPb11RFGoKacVPAXJpz9OTTG0EoKMbgn6xmrntxZ7FN3ifmgg0+1YuWMQJDgZkW7w33PGfKGioVrCSo1yfu4iYCBskHaswha6vsC6eep3BwEIc4gLw6uBK0u+QDrTBQBbwb4VCSmT3pDCg/r8uoydajotYuK3DGReEY+1vVv2Dy2A0xHS+5p3b4eTlygxfFQ=="}},"tbs_fingerprint":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","tbs_noct_fingerprint":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","validation_level":"DV","validity":{"end":"2030-12-31T23:59:59Z","length":"383875199","start":"2018-11-02T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.comodoca.com"]},"authority_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb"},"fingerprint_md5":"285ec909c4ab0d2d57f5086b225799aa","fingerprint_sha1":"d89e3bd43d5d909b47a18977aa9d5ce36cee184c","fingerprint_sha256":"68b9c761219a5b1f0131784474665db61bbdb109e00f05ca9f74244ee5f5f52b","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"76359301477803385872276235234032301461","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"GIdR3HQhPZyK4Ce3M9AuzOzw5steEd4ib5t1jp5y/uTW/qofnJYt7wNKfq70jW9yPEM7wD/ruN9cqqnGrvL82O6je0P2hjZ8FODN9Pc//t64tIrwkZb+/UNkfv3M0gGhfX34GRnJQisTv1iLuqSiZgR2iJFODIkUzqJNyTKzuugUGrxx8VvwQQuYAAoiAxDlDLH5zZI3Ge078eQ6tvlFEyZ1r7uq7z97dzvSxAKRPRkA0xdcOds/exgNRc2ThZYvXd9ZFk8/Ub3VRRg/7UqO6AZhdCMWtQ1QcydER38QXYkqa4UxFMToqWpMgLxqeM+4f452cpkMnf7XkQgWoaNflQ=="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"2c1fb55882eb4d8c782a3fd3eb37e60c0518b5eedd91149a5b3e5a5a234a1c5f","subject":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"subject_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","subject_key_info":{"fingerprint_sha256":"c784333d20bcd742b9fdc3236f4e509b8937070e73067e254dd3bf9c45bf4dde","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"gBJlFzYOw9sIs9CsVw127c0n00ytUINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZtF+mvX2do2NCtnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8/hPwhxR79uQfjtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax1Jt4A8BQOujM8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9yn8iNK5+O2hmAUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf4TKuzJM7UXiVZ4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQNwZNUMBkTrNN9N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kCnusSTJV882sFqV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/kjbmUZIO8yZ9HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhCLkMaTLTwJUdZ+gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgEJTm4Diup8kyXHAc/DVL17e8vgg8="}},"tbs_fingerprint":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","tbs_noct_fingerprint":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","validation_level":"unknown","validity":{"end":"2028-12-31T23:59:59Z","length":"309571199","start":"2019-03-12T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true},"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl","http://crl.comodo.net/AAACertificateServices.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4"},"fingerprint_md5":"497904b0eb8719ac47b0bc11519b74d0","fingerprint_sha1":"d1eb23a46d17d68fd92564c2f1f1601764d8e349","fingerprint_sha256":"d7a7a0fb5d7e2731d771e9484ebcdef71d5f0c3e0a2948782bc83ee0ea699ef4","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"1","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"CFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLzRt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"677bb47ace29d001a6aca1c4b06f80f0ecb186deb9daf7d1ab0d9209747061e5","subject":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","subject_key_info":{"fingerprint_sha256":"bd153ed7b0434f6886b17bce8bbe84ed340c7132d702a8f4fa318f756ecbd6f3","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vkCd9G7h6naHHE1FRI6+RsiDBp3BKv4YH47kAvrzq11QihYxC5oG0MVwIs1JLVRjzLZuaEYLU+rLTCTAvHJO6vEVrvRUmhIKw3qyM2Di2olV8yJY897cz++DhqKMlE+faPKYkEaEJ8d2v+PMNSyLXgdkZYLASLCokflhn3YgUKiRx2a163hiA1bwihoT6jGjHqCZ/Tj29icyWG8H9Wu4+xQrr7eqzNZjX3OM2gWZqDioyxd4NlGs6Z70eDqNzw/ZQuKYDKsvnw4B3u+fmUnxLd+sdE0bmLVHxeUp0fmQGMdinL6DxyZ7Poolx8DdneY1aBAgnY/Y3tLDhJwNXugvyQ=="}},"tbs_fingerprint":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","tbs_noct_fingerprint":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","validation_level":"unknown","validity":{"end":"2028-12-31T23:59:59Z","length":"789004799","start":"2004-01-01T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"192","lifetime_hint":"300"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T22:41:01Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T08:11:15Z"},"get":{"body":"\n\n\n \n \n 404 Error\n \n \n \n\n\n\n\n

      \n Sorry, this page doesn't exist.
      Please check the URL or go back a page.\n

      \n\n

      \n 404 Error. Page Not Found.\n

      \n\n\n\n\n","body_sha256":"332dd04ae9deb819b7345e6f9d455c1b29b7f828cbb7d2a96afda1a9f3a6b48f","headers":{"accept_ranges":"bytes","content_type":"text/html","last_modified":"Tue, 28 Apr 2020 17:23:37 GMT","server":"Apache","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 07:33:38 GMT"}],"vary":"Accept-Encoding"},"metadata":{"description":"Apache httpd","manufacturer":"Apache","product":"httpd"},"status_code":"404","status_line":"404 Not Found","title":"404 Error","timestamp":"2020-07-13T07:33:37Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T09:34:09Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T06:31:20Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqsqmj//////////w=="}},"support":true,"timestamp":"2020-07-12T15:51:43Z"}}},"p465":{"smtp":{"tls":{"banner":"220-cs-mum-29.webhostbox.net ESMTP Exim 4.93 #2 Mon, 13 Jul 2020 21:44:56 +0000 \r\n220-We do not authorize the use of this system to transport unsolicited, \r\n220 and/or bulk e-mail.","ehlo":"250-cs-mum-29.webhostbox.net Hello worker-04.sfj.censys-scanner.com [192.35.168.64]\r\n250-SIZE 52428800\r\n250-8BITMIME\r\n250-PIPELINING\r\n250-AUTH PLAIN LOGIN\r\n250 HELP","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.sectigo.com/SectigoRSADomainValidationSecureServerCA.crt"],"ocsp_urls":["http://ocsp.sectigo.com"]},"authority_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://sectigo.com/CPS"],"id":"1.3.6.1.4.1.6449.1.2.2.7"},{"id":"2.23.140.1.2.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"RqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUc=","signature":"BAMARzBFAiB70swEcQ69dF3X+Lk0TVjSgbG4cv/BGALmpC2zaNLrWAIhAKPscR3NGoghoyF54xqODLMgmlV65CEx1Lwwvo0g4auY","timestamp":"1589332274","version":"0"},{"log_id":"36Veq2iCTx9sre64X04+WurNohKkal6OOxLAIERcKnM=","signature":"BAMARjBEAiAShPC5b7OL5kB9S2GhuKW1PSC6uzenHTkfJhLeeMR9OwIgTzZevv0+J2X8NOW5oF1laGjM2KgqmS8b04m86CP0jBo=","timestamp":"1589332275","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMARzBFAiEAzuS56Lz5Nb2STh3dGa2EZ836aaBYT/txmgY9Kw9lTuICIH3rvNKQScQ7loyq1UFrsoktooyv6KvMIFeEaJMAP4Io","timestamp":"1589332274","version":"0"}],"subject_alt_name":{"dns_names":["*.webhostbox.net","webhostbox.net"]},"subject_key_id":"82be00fa059adec4da24a4d0d0fdaa998605af32"},"fingerprint_md5":"32bd2db5bda7b77d665e19b3d30fd9ec","fingerprint_sha1":"3976d530b3db64f7e14c0b4db99926feaadb495a","fingerprint_sha256":"003453a4d97b61bb613c0d0ea9a201c240f127e3c2da4b88c2e41043ac1bf562","issuer":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","names":["*.webhostbox.net","webhostbox.net"],"redacted":false,"serial_number":"182446423222663759520993008783205313670","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"kPxtls+WdMNUOIwclRWW2HTjXbE5i3P2MoRmHgr+oyPjwoZw0VrA1oOI4kuqvB6QlY4pA1f4Ojdb+RB19mBY5t3MhbKwWXar6b7jZ9QtHvDaYWoFeQ6EnEjk2Gi8u2OM3oAqjCoAxNnBOHKb+O1mnwFBO7O7HV1bECGGfEXFIAW3x8a5j6NLqwbY9fOcq7sGWdjannfJsRitFvqQEgTeP6WBFcx3T+F9Ky8V3b8wpapI+2CQR1bcHidcRtQvEzMMw0m0O0QtLlhHHASVxCYjSI2Lm40QJGzOgo3WeFNZNf9rPFuI3D1DmNbLsIOxbkXCpCwPoWw8vsuclz8ALLVMOA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"80adc5ea5d27c6d1e9994836aae29f15ed3c670189ca829182ad254aa3b7d20c","subject":{"common_name":["*.webhostbox.net"]},"subject_dn":"CN=*.webhostbox.net","subject_key_info":{"fingerprint_sha256":"ef347190df007bcd3d7c522dad694e47ef3a75736244901ed923eebdd987ba52","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"uDge+vpfQflLrHA2s3ckN3OzgO4sdCQ748jI6Q71Yed/AoUMBW6p3JhJl2vGXCYjRKscmtIaTX+RB1jhvsO4BOneJwE6NVT0pk1JEySf+KB3jn9OVcxLXCtHqUpzmF6h507MZFM29/5TlesrkYWoNexlP6VjBjT6b2jzv/vwRvjaYaqHNnVU1OWYJE3xZ6TX16SEoOStRBVyqxrcG640V9ewP4OHpH0fa9miO46t6diRcayq5S7bLZC3IVyZl0TbhTI2Xv/N6Zqe4X+FHPh1eb9Qvb22eJx0aEQ+NNfA123PGMXqgcV0pMYfkS6crHDpNH8FfdKAWAKuzWNXOlIcVw=="}},"tbs_fingerprint":"befa6c21e7143a8a00647383a5e44aea1f88e381bee83cd412b03974840cf39d","tbs_noct_fingerprint":"ff3d3a389676a05aa9621ba6b83f7aac8e4ab9ac83cf4d7f7c7b2aed0967afbb","validation_level":"DV","validity":{"end":"2022-06-02T23:59:59Z","length":"64886399","start":"2020-05-13T00:00:00Z"},"version":"3"}},"chain":[{"fingerprints":{"md5":"adab5c4df031fb9299f71ada7e18f613","sha1":"33e4e80807204c2b6182a3a14b591acd25b5f0db","sha256":"7fa4ff68ec04a99d7528d5085f94907f4d1dd1c5381bacdc832ed5c960214676","spki_subject":"d44564efcb1efabb43cd7906feb0a59e3b9d57e23a4619e6e912d0058b87c354","tbs":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","tbs_noct":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4"}},{"fingerprints":{"md5":"285ec909c4ab0d2d57f5086b225799aa","sha1":"d89e3bd43d5d909b47a18977aa9d5ce36cee184c","sha256":"68b9c761219a5b1f0131784474665db61bbdb109e00f05ca9f74244ee5f5f52b","spki_subject":"2c1fb55882eb4d8c782a3fd3eb37e60c0518b5eedd91149a5b3e5a5a234a1c5f","tbs":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","tbs_noct":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c"}},{"fingerprints":{"md5":"497904b0eb8719ac47b0bc11519b74d0","sha1":"d1eb23a46d17d68fd92564c2f1f1601764d8e349","sha256":"d7a7a0fb5d7e2731d771e9484ebcdef71d5f0c3e0a2948782bc83ee0ea699ef4","spki_subject":"677bb47ace29d001a6aca1c4b06f80f0ecb186deb9daf7d1ab0d9209747061e5","tbs":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","tbs_noct":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2"},"timestamp":"2020-07-13T21:44:55Z"}}},"p993":{"imaps":{"tls":{"banner":"* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE NAMESPACE LITERAL+ AUTH=PLAIN AUTH=LOGIN] Dovecot ready.","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.sectigo.com/SectigoRSADomainValidationSecureServerCA.crt"],"ocsp_urls":["http://ocsp.sectigo.com"]},"authority_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://sectigo.com/CPS"],"id":"1.3.6.1.4.1.6449.1.2.2.7"},{"id":"2.23.140.1.2.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"RqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUc=","signature":"BAMARzBFAiB70swEcQ69dF3X+Lk0TVjSgbG4cv/BGALmpC2zaNLrWAIhAKPscR3NGoghoyF54xqODLMgmlV65CEx1Lwwvo0g4auY","timestamp":"1589332274","version":"0"},{"log_id":"36Veq2iCTx9sre64X04+WurNohKkal6OOxLAIERcKnM=","signature":"BAMARjBEAiAShPC5b7OL5kB9S2GhuKW1PSC6uzenHTkfJhLeeMR9OwIgTzZevv0+J2X8NOW5oF1laGjM2KgqmS8b04m86CP0jBo=","timestamp":"1589332275","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMARzBFAiEAzuS56Lz5Nb2STh3dGa2EZ836aaBYT/txmgY9Kw9lTuICIH3rvNKQScQ7loyq1UFrsoktooyv6KvMIFeEaJMAP4Io","timestamp":"1589332274","version":"0"}],"subject_alt_name":{"dns_names":["*.webhostbox.net","webhostbox.net"]},"subject_key_id":"82be00fa059adec4da24a4d0d0fdaa998605af32"},"fingerprint_md5":"32bd2db5bda7b77d665e19b3d30fd9ec","fingerprint_sha1":"3976d530b3db64f7e14c0b4db99926feaadb495a","fingerprint_sha256":"003453a4d97b61bb613c0d0ea9a201c240f127e3c2da4b88c2e41043ac1bf562","issuer":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","names":["webhostbox.net","*.webhostbox.net"],"redacted":false,"serial_number":"182446423222663759520993008783205313670","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"kPxtls+WdMNUOIwclRWW2HTjXbE5i3P2MoRmHgr+oyPjwoZw0VrA1oOI4kuqvB6QlY4pA1f4Ojdb+RB19mBY5t3MhbKwWXar6b7jZ9QtHvDaYWoFeQ6EnEjk2Gi8u2OM3oAqjCoAxNnBOHKb+O1mnwFBO7O7HV1bECGGfEXFIAW3x8a5j6NLqwbY9fOcq7sGWdjannfJsRitFvqQEgTeP6WBFcx3T+F9Ky8V3b8wpapI+2CQR1bcHidcRtQvEzMMw0m0O0QtLlhHHASVxCYjSI2Lm40QJGzOgo3WeFNZNf9rPFuI3D1DmNbLsIOxbkXCpCwPoWw8vsuclz8ALLVMOA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"80adc5ea5d27c6d1e9994836aae29f15ed3c670189ca829182ad254aa3b7d20c","subject":{"common_name":["*.webhostbox.net"]},"subject_dn":"CN=*.webhostbox.net","subject_key_info":{"fingerprint_sha256":"ef347190df007bcd3d7c522dad694e47ef3a75736244901ed923eebdd987ba52","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"uDge+vpfQflLrHA2s3ckN3OzgO4sdCQ748jI6Q71Yed/AoUMBW6p3JhJl2vGXCYjRKscmtIaTX+RB1jhvsO4BOneJwE6NVT0pk1JEySf+KB3jn9OVcxLXCtHqUpzmF6h507MZFM29/5TlesrkYWoNexlP6VjBjT6b2jzv/vwRvjaYaqHNnVU1OWYJE3xZ6TX16SEoOStRBVyqxrcG640V9ewP4OHpH0fa9miO46t6diRcayq5S7bLZC3IVyZl0TbhTI2Xv/N6Zqe4X+FHPh1eb9Qvb22eJx0aEQ+NNfA123PGMXqgcV0pMYfkS6crHDpNH8FfdKAWAKuzWNXOlIcVw=="}},"tbs_fingerprint":"befa6c21e7143a8a00647383a5e44aea1f88e381bee83cd412b03974840cf39d","tbs_noct_fingerprint":"ff3d3a389676a05aa9621ba6b83f7aac8e4ab9ac83cf4d7f7c7b2aed0967afbb","validation_level":"DV","validity":{"end":"2022-06-02T23:59:59Z","length":"64886399","start":"2020-05-13T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.usertrust.com/USERTrustRSAAddTrustCA.crt"],"ocsp_urls":["http://ocsp.usertrust.com"]},"authority_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.5.29.32.0"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.usertrust.com/USERTrustRSACertificationAuthority.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1"},"fingerprint_md5":"adab5c4df031fb9299f71ada7e18f613","fingerprint_sha1":"33e4e80807204c2b6182a3a14b591acd25b5f0db","fingerprint_sha256":"7fa4ff68ec04a99d7528d5085f94907f4d1dd1c5381bacdc832ed5c960214676","issuer":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"issuer_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","redacted":false,"serial_number":"166627644428940058458651716034439089575","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"Mr9hvQ5Iw0/HukdN+Jx4GQHcEx2Ab/zDcLRSmjEzmldS+zGea6TvVKqJjUAXaPgREHzSyrHxVYbH7rM2kYb2OVG/Rr8PoLq0935JxCo2F57kaDl6r5ROVm+yezu/Coa9zcV3HAO4OLGiH19+24rcRki2aArPsrW04jTkZ6k4Zgle0rj8nSg6F0AnwnJOKf0hPHzPE/uWLMUxRP0T7dWbqWlod3zu4f+k+TY4CFM5ooQ0nBnzvg6s1SQ36yOoeNDT5++SR2RiOSLvxvcRviKFxmZEJCaOEDKNyJOuB56DPi/Z+fVGjmO+wea03KbNIaiGCpXZLoUmGv38sbZXQm2V0TP2ORQGgkE49Y9Y3IBbpNV9lXj9p5v//cWoaasm56ekBYdbqbe4oyALl6lFhd2zi+WJN44pDfwGF/Y4QA5C5BIG+3vzxhFoYt/jmPQT2BVPi7Fp2RBgvGQq6jG35LWjOhSbJuMLe/0CjraZwTiXWTb2qHSihrZe68Zk6s+go/lunrotEbaGmAhYLcmsJWTyXnW0OMGuf1pGg+pRyrbxmRE1a6Vqe8YAsOf4vmSyrcjC8azjUeqkk+B5yOGBQMkKW+ESPMFgKuOXwIlCypTPRpgSabuY0MLTDXJLR27lk8QyKGOHQ+SwMj4K00u/I5sUKUErmgQfky3xxzlIPK1aEn8="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"d44564efcb1efabb43cd7906feb0a59e3b9d57e23a4619e6e912d0058b87c354","subject":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","subject_key_info":{"fingerprint_sha256":"e1ae9c3de848ece1ba72e0d991ae4d0d9ec547c6bad1dddab9d6beb0a7e0e0d8","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1nMz1tc8INAA0hdFuNY+B6I/x0HuMjDJsGz99J/LEpgPLT+NTQEMgg8Xf2Iu6bhIefsWg06t1zIlk7cHv7lQP6lMw0Aq6Tn/2YHKHxYyQdqAJrkjeocgHuP/IJo8lURvh3UGkEC0MpMWCRAIIz7S3YcPb11RFGoKacVPAXJpz9OTTG0EoKMbgn6xmrntxZ7FN3ifmgg0+1YuWMQJDgZkW7w33PGfKGioVrCSo1yfu4iYCBskHaswha6vsC6eep3BwEIc4gLw6uBK0u+QDrTBQBbwb4VCSmT3pDCg/r8uoydajotYuK3DGReEY+1vVv2Dy2A0xHS+5p3b4eTlygxfFQ=="}},"tbs_fingerprint":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","tbs_noct_fingerprint":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","validation_level":"DV","validity":{"end":"2030-12-31T23:59:59Z","length":"383875199","start":"2018-11-02T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.comodoca.com"]},"authority_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb"},"fingerprint_md5":"285ec909c4ab0d2d57f5086b225799aa","fingerprint_sha1":"d89e3bd43d5d909b47a18977aa9d5ce36cee184c","fingerprint_sha256":"68b9c761219a5b1f0131784474665db61bbdb109e00f05ca9f74244ee5f5f52b","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"76359301477803385872276235234032301461","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"GIdR3HQhPZyK4Ce3M9AuzOzw5steEd4ib5t1jp5y/uTW/qofnJYt7wNKfq70jW9yPEM7wD/ruN9cqqnGrvL82O6je0P2hjZ8FODN9Pc//t64tIrwkZb+/UNkfv3M0gGhfX34GRnJQisTv1iLuqSiZgR2iJFODIkUzqJNyTKzuugUGrxx8VvwQQuYAAoiAxDlDLH5zZI3Ge078eQ6tvlFEyZ1r7uq7z97dzvSxAKRPRkA0xdcOds/exgNRc2ThZYvXd9ZFk8/Ub3VRRg/7UqO6AZhdCMWtQ1QcydER38QXYkqa4UxFMToqWpMgLxqeM+4f452cpkMnf7XkQgWoaNflQ=="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"2c1fb55882eb4d8c782a3fd3eb37e60c0518b5eedd91149a5b3e5a5a234a1c5f","subject":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"subject_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","subject_key_info":{"fingerprint_sha256":"c784333d20bcd742b9fdc3236f4e509b8937070e73067e254dd3bf9c45bf4dde","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"gBJlFzYOw9sIs9CsVw127c0n00ytUINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZtF+mvX2do2NCtnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8/hPwhxR79uQfjtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax1Jt4A8BQOujM8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9yn8iNK5+O2hmAUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf4TKuzJM7UXiVZ4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQNwZNUMBkTrNN9N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kCnusSTJV882sFqV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/kjbmUZIO8yZ9HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhCLkMaTLTwJUdZ+gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgEJTm4Diup8kyXHAc/DVL17e8vgg8="}},"tbs_fingerprint":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","tbs_noct_fingerprint":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","validation_level":"unknown","validity":{"end":"2028-12-31T23:59:59Z","length":"309571199","start":"2019-03-12T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true},"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl","http://crl.comodo.net/AAACertificateServices.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4"},"fingerprint_md5":"497904b0eb8719ac47b0bc11519b74d0","fingerprint_sha1":"d1eb23a46d17d68fd92564c2f1f1601764d8e349","fingerprint_sha256":"d7a7a0fb5d7e2731d771e9484ebcdef71d5f0c3e0a2948782bc83ee0ea699ef4","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"1","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"CFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLzRt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"677bb47ace29d001a6aca1c4b06f80f0ecb186deb9daf7d1ab0d9209747061e5","subject":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","subject_key_info":{"fingerprint_sha256":"bd153ed7b0434f6886b17bce8bbe84ed340c7132d702a8f4fa318f756ecbd6f3","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vkCd9G7h6naHHE1FRI6+RsiDBp3BKv4YH47kAvrzq11QihYxC5oG0MVwIs1JLVRjzLZuaEYLU+rLTCTAvHJO6vEVrvRUmhIKw3qyM2Di2olV8yJY897cz++DhqKMlE+faPKYkEaEJ8d2v+PMNSyLXgdkZYLASLCokflhn3YgUKiRx2a163hiA1bwihoT6jGjHqCZ/Tj29icyWG8H9Wu4+xQrr7eqzNZjX3OM2gWZqDioyxd4NlGs6Z70eDqNzw/ZQuKYDKsvnw4B3u+fmUnxLd+sdE0bmLVHxeUp0fmQGMdinL6DxyZ7Poolx8DdneY1aBAgnY/Y3tLDhJwNXugvyQ=="}},"tbs_fingerprint":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","tbs_noct_fingerprint":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","validation_level":"unknown","validity":{"end":"2028-12-31T23:59:59Z","length":"789004799","start":"2004-01-01T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"24","name":"secp384r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2"},"timestamp":"2020-07-15T10:16:28Z"}}},"p22":{"ssh":{"v2":{"banner":{"raw":"SSH-2.0-OpenSSH_5.3","software":"OpenSSH_5.3","version":"2.0"},"metadata":{"description":"OpenSSH 5.3","product":"OpenSSH","version":"5.3"},"support":{"client_to_server":{"ciphers":["aes256-ctr","aes192-ctr","aes128-ctr"],"compressions":["none","zlib@openssh.com"],"macs":["hmac-sha2-512","hmac-sha2-256","hmac-ripemd160","hmac-ripemd160@openssh.com"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","ssh-dss"],"kex_algorithms":["diffie-hellman-group-exchange-sha256"],"server_to_client":{"ciphers":["aes256-ctr","aes192-ctr","aes128-ctr"],"compressions":["none","zlib@openssh.com"],"macs":["hmac-sha2-512","hmac-sha2-256","hmac-ripemd160","hmac-ripemd160@openssh.com"]}},"timestamp":"2020-07-14T22:13:33Z"}}},"p110":{"pop3":{"starttls":{"banner":"+OK Dovecot ready.","metadata":{"description":"Dovecot","product":"Dovecot"},"starttls":"+OK Begin TLS negotiation now.","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.sectigo.com/SectigoRSADomainValidationSecureServerCA.crt"],"ocsp_urls":["http://ocsp.sectigo.com"]},"authority_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://sectigo.com/CPS"],"id":"1.3.6.1.4.1.6449.1.2.2.7"},{"id":"2.23.140.1.2.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"RqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUc=","signature":"BAMARzBFAiB70swEcQ69dF3X+Lk0TVjSgbG4cv/BGALmpC2zaNLrWAIhAKPscR3NGoghoyF54xqODLMgmlV65CEx1Lwwvo0g4auY","timestamp":"1589332274","version":"0"},{"log_id":"36Veq2iCTx9sre64X04+WurNohKkal6OOxLAIERcKnM=","signature":"BAMARjBEAiAShPC5b7OL5kB9S2GhuKW1PSC6uzenHTkfJhLeeMR9OwIgTzZevv0+J2X8NOW5oF1laGjM2KgqmS8b04m86CP0jBo=","timestamp":"1589332275","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMARzBFAiEAzuS56Lz5Nb2STh3dGa2EZ836aaBYT/txmgY9Kw9lTuICIH3rvNKQScQ7loyq1UFrsoktooyv6KvMIFeEaJMAP4Io","timestamp":"1589332274","version":"0"}],"subject_alt_name":{"dns_names":["*.webhostbox.net","webhostbox.net"]},"subject_key_id":"82be00fa059adec4da24a4d0d0fdaa998605af32"},"fingerprint_md5":"32bd2db5bda7b77d665e19b3d30fd9ec","fingerprint_sha1":"3976d530b3db64f7e14c0b4db99926feaadb495a","fingerprint_sha256":"003453a4d97b61bb613c0d0ea9a201c240f127e3c2da4b88c2e41043ac1bf562","issuer":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","names":["*.webhostbox.net","webhostbox.net"],"redacted":false,"serial_number":"182446423222663759520993008783205313670","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"kPxtls+WdMNUOIwclRWW2HTjXbE5i3P2MoRmHgr+oyPjwoZw0VrA1oOI4kuqvB6QlY4pA1f4Ojdb+RB19mBY5t3MhbKwWXar6b7jZ9QtHvDaYWoFeQ6EnEjk2Gi8u2OM3oAqjCoAxNnBOHKb+O1mnwFBO7O7HV1bECGGfEXFIAW3x8a5j6NLqwbY9fOcq7sGWdjannfJsRitFvqQEgTeP6WBFcx3T+F9Ky8V3b8wpapI+2CQR1bcHidcRtQvEzMMw0m0O0QtLlhHHASVxCYjSI2Lm40QJGzOgo3WeFNZNf9rPFuI3D1DmNbLsIOxbkXCpCwPoWw8vsuclz8ALLVMOA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"80adc5ea5d27c6d1e9994836aae29f15ed3c670189ca829182ad254aa3b7d20c","subject":{"common_name":["*.webhostbox.net"]},"subject_dn":"CN=*.webhostbox.net","subject_key_info":{"fingerprint_sha256":"ef347190df007bcd3d7c522dad694e47ef3a75736244901ed923eebdd987ba52","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"uDge+vpfQflLrHA2s3ckN3OzgO4sdCQ748jI6Q71Yed/AoUMBW6p3JhJl2vGXCYjRKscmtIaTX+RB1jhvsO4BOneJwE6NVT0pk1JEySf+KB3jn9OVcxLXCtHqUpzmF6h507MZFM29/5TlesrkYWoNexlP6VjBjT6b2jzv/vwRvjaYaqHNnVU1OWYJE3xZ6TX16SEoOStRBVyqxrcG640V9ewP4OHpH0fa9miO46t6diRcayq5S7bLZC3IVyZl0TbhTI2Xv/N6Zqe4X+FHPh1eb9Qvb22eJx0aEQ+NNfA123PGMXqgcV0pMYfkS6crHDpNH8FfdKAWAKuzWNXOlIcVw=="}},"tbs_fingerprint":"befa6c21e7143a8a00647383a5e44aea1f88e381bee83cd412b03974840cf39d","tbs_noct_fingerprint":"ff3d3a389676a05aa9621ba6b83f7aac8e4ab9ac83cf4d7f7c7b2aed0967afbb","validation_level":"DV","validity":{"end":"2022-06-02T23:59:59Z","length":"64886399","start":"2020-05-13T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.usertrust.com/USERTrustRSAAddTrustCA.crt"],"ocsp_urls":["http://ocsp.usertrust.com"]},"authority_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.5.29.32.0"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.usertrust.com/USERTrustRSACertificationAuthority.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1"},"fingerprint_md5":"adab5c4df031fb9299f71ada7e18f613","fingerprint_sha1":"33e4e80807204c2b6182a3a14b591acd25b5f0db","fingerprint_sha256":"7fa4ff68ec04a99d7528d5085f94907f4d1dd1c5381bacdc832ed5c960214676","issuer":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"issuer_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","redacted":false,"serial_number":"166627644428940058458651716034439089575","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"Mr9hvQ5Iw0/HukdN+Jx4GQHcEx2Ab/zDcLRSmjEzmldS+zGea6TvVKqJjUAXaPgREHzSyrHxVYbH7rM2kYb2OVG/Rr8PoLq0935JxCo2F57kaDl6r5ROVm+yezu/Coa9zcV3HAO4OLGiH19+24rcRki2aArPsrW04jTkZ6k4Zgle0rj8nSg6F0AnwnJOKf0hPHzPE/uWLMUxRP0T7dWbqWlod3zu4f+k+TY4CFM5ooQ0nBnzvg6s1SQ36yOoeNDT5++SR2RiOSLvxvcRviKFxmZEJCaOEDKNyJOuB56DPi/Z+fVGjmO+wea03KbNIaiGCpXZLoUmGv38sbZXQm2V0TP2ORQGgkE49Y9Y3IBbpNV9lXj9p5v//cWoaasm56ekBYdbqbe4oyALl6lFhd2zi+WJN44pDfwGF/Y4QA5C5BIG+3vzxhFoYt/jmPQT2BVPi7Fp2RBgvGQq6jG35LWjOhSbJuMLe/0CjraZwTiXWTb2qHSihrZe68Zk6s+go/lunrotEbaGmAhYLcmsJWTyXnW0OMGuf1pGg+pRyrbxmRE1a6Vqe8YAsOf4vmSyrcjC8azjUeqkk+B5yOGBQMkKW+ESPMFgKuOXwIlCypTPRpgSabuY0MLTDXJLR27lk8QyKGOHQ+SwMj4K00u/I5sUKUErmgQfky3xxzlIPK1aEn8="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"d44564efcb1efabb43cd7906feb0a59e3b9d57e23a4619e6e912d0058b87c354","subject":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","subject_key_info":{"fingerprint_sha256":"e1ae9c3de848ece1ba72e0d991ae4d0d9ec547c6bad1dddab9d6beb0a7e0e0d8","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1nMz1tc8INAA0hdFuNY+B6I/x0HuMjDJsGz99J/LEpgPLT+NTQEMgg8Xf2Iu6bhIefsWg06t1zIlk7cHv7lQP6lMw0Aq6Tn/2YHKHxYyQdqAJrkjeocgHuP/IJo8lURvh3UGkEC0MpMWCRAIIz7S3YcPb11RFGoKacVPAXJpz9OTTG0EoKMbgn6xmrntxZ7FN3ifmgg0+1YuWMQJDgZkW7w33PGfKGioVrCSo1yfu4iYCBskHaswha6vsC6eep3BwEIc4gLw6uBK0u+QDrTBQBbwb4VCSmT3pDCg/r8uoydajotYuK3DGReEY+1vVv2Dy2A0xHS+5p3b4eTlygxfFQ=="}},"tbs_fingerprint":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","tbs_noct_fingerprint":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","validation_level":"DV","validity":{"end":"2030-12-31T23:59:59Z","length":"383875199","start":"2018-11-02T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.comodoca.com"]},"authority_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb"},"fingerprint_md5":"285ec909c4ab0d2d57f5086b225799aa","fingerprint_sha1":"d89e3bd43d5d909b47a18977aa9d5ce36cee184c","fingerprint_sha256":"68b9c761219a5b1f0131784474665db61bbdb109e00f05ca9f74244ee5f5f52b","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"76359301477803385872276235234032301461","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"GIdR3HQhPZyK4Ce3M9AuzOzw5steEd4ib5t1jp5y/uTW/qofnJYt7wNKfq70jW9yPEM7wD/ruN9cqqnGrvL82O6je0P2hjZ8FODN9Pc//t64tIrwkZb+/UNkfv3M0gGhfX34GRnJQisTv1iLuqSiZgR2iJFODIkUzqJNyTKzuugUGrxx8VvwQQuYAAoiAxDlDLH5zZI3Ge078eQ6tvlFEyZ1r7uq7z97dzvSxAKRPRkA0xdcOds/exgNRc2ThZYvXd9ZFk8/Ub3VRRg/7UqO6AZhdCMWtQ1QcydER38QXYkqa4UxFMToqWpMgLxqeM+4f452cpkMnf7XkQgWoaNflQ=="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"2c1fb55882eb4d8c782a3fd3eb37e60c0518b5eedd91149a5b3e5a5a234a1c5f","subject":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"subject_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","subject_key_info":{"fingerprint_sha256":"c784333d20bcd742b9fdc3236f4e509b8937070e73067e254dd3bf9c45bf4dde","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"gBJlFzYOw9sIs9CsVw127c0n00ytUINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZtF+mvX2do2NCtnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8/hPwhxR79uQfjtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax1Jt4A8BQOujM8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9yn8iNK5+O2hmAUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf4TKuzJM7UXiVZ4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQNwZNUMBkTrNN9N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kCnusSTJV882sFqV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/kjbmUZIO8yZ9HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhCLkMaTLTwJUdZ+gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgEJTm4Diup8kyXHAc/DVL17e8vgg8="}},"tbs_fingerprint":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","tbs_noct_fingerprint":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","validation_level":"unknown","validity":{"end":"2028-12-31T23:59:59Z","length":"309571199","start":"2019-03-12T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true},"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl","http://crl.comodo.net/AAACertificateServices.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4"},"fingerprint_md5":"497904b0eb8719ac47b0bc11519b74d0","fingerprint_sha1":"d1eb23a46d17d68fd92564c2f1f1601764d8e349","fingerprint_sha256":"d7a7a0fb5d7e2731d771e9484ebcdef71d5f0c3e0a2948782bc83ee0ea699ef4","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"1","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"CFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLzRt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"677bb47ace29d001a6aca1c4b06f80f0ecb186deb9daf7d1ab0d9209747061e5","subject":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","subject_key_info":{"fingerprint_sha256":"bd153ed7b0434f6886b17bce8bbe84ed340c7132d702a8f4fa318f756ecbd6f3","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vkCd9G7h6naHHE1FRI6+RsiDBp3BKv4YH47kAvrzq11QihYxC5oG0MVwIs1JLVRjzLZuaEYLU+rLTCTAvHJO6vEVrvRUmhIKw3qyM2Di2olV8yJY897cz++DhqKMlE+faPKYkEaEJ8d2v+PMNSyLXgdkZYLASLCokflhn3YgUKiRx2a163hiA1bwihoT6jGjHqCZ/Tj29icyWG8H9Wu4+xQrr7eqzNZjX3OM2gWZqDioyxd4NlGs6Z70eDqNzw/ZQuKYDKsvnw4B3u+fmUnxLd+sdE0bmLVHxeUp0fmQGMdinL6DxyZ7Poolx8DdneY1aBAgnY/Y3tLDhJwNXugvyQ=="}},"tbs_fingerprint":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","tbs_noct_fingerprint":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","validation_level":"unknown","validity":{"end":"2028-12-31T23:59:59Z","length":"789004799","start":"2004-01-01T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"24","name":"secp384r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2"},"timestamp":"2020-07-11T07:11:35Z"}}},"p143":{"imap":{"starttls":{"banner":"* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE NAMESPACE LITERAL+ STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.","metadata":{"description":"Dovecot","product":"Dovecot"},"starttls":"a001 OK Begin TLS negotiation now.","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.sectigo.com/SectigoRSADomainValidationSecureServerCA.crt"],"ocsp_urls":["http://ocsp.sectigo.com"]},"authority_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://sectigo.com/CPS"],"id":"1.3.6.1.4.1.6449.1.2.2.7"},{"id":"2.23.140.1.2.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"RqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUc=","signature":"BAMARzBFAiB70swEcQ69dF3X+Lk0TVjSgbG4cv/BGALmpC2zaNLrWAIhAKPscR3NGoghoyF54xqODLMgmlV65CEx1Lwwvo0g4auY","timestamp":"1589332274","version":"0"},{"log_id":"36Veq2iCTx9sre64X04+WurNohKkal6OOxLAIERcKnM=","signature":"BAMARjBEAiAShPC5b7OL5kB9S2GhuKW1PSC6uzenHTkfJhLeeMR9OwIgTzZevv0+J2X8NOW5oF1laGjM2KgqmS8b04m86CP0jBo=","timestamp":"1589332275","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMARzBFAiEAzuS56Lz5Nb2STh3dGa2EZ836aaBYT/txmgY9Kw9lTuICIH3rvNKQScQ7loyq1UFrsoktooyv6KvMIFeEaJMAP4Io","timestamp":"1589332274","version":"0"}],"subject_alt_name":{"dns_names":["*.webhostbox.net","webhostbox.net"]},"subject_key_id":"82be00fa059adec4da24a4d0d0fdaa998605af32"},"fingerprint_md5":"32bd2db5bda7b77d665e19b3d30fd9ec","fingerprint_sha1":"3976d530b3db64f7e14c0b4db99926feaadb495a","fingerprint_sha256":"003453a4d97b61bb613c0d0ea9a201c240f127e3c2da4b88c2e41043ac1bf562","issuer":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","names":["*.webhostbox.net","webhostbox.net"],"redacted":false,"serial_number":"182446423222663759520993008783205313670","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"kPxtls+WdMNUOIwclRWW2HTjXbE5i3P2MoRmHgr+oyPjwoZw0VrA1oOI4kuqvB6QlY4pA1f4Ojdb+RB19mBY5t3MhbKwWXar6b7jZ9QtHvDaYWoFeQ6EnEjk2Gi8u2OM3oAqjCoAxNnBOHKb+O1mnwFBO7O7HV1bECGGfEXFIAW3x8a5j6NLqwbY9fOcq7sGWdjannfJsRitFvqQEgTeP6WBFcx3T+F9Ky8V3b8wpapI+2CQR1bcHidcRtQvEzMMw0m0O0QtLlhHHASVxCYjSI2Lm40QJGzOgo3WeFNZNf9rPFuI3D1DmNbLsIOxbkXCpCwPoWw8vsuclz8ALLVMOA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"80adc5ea5d27c6d1e9994836aae29f15ed3c670189ca829182ad254aa3b7d20c","subject":{"common_name":["*.webhostbox.net"]},"subject_dn":"CN=*.webhostbox.net","subject_key_info":{"fingerprint_sha256":"ef347190df007bcd3d7c522dad694e47ef3a75736244901ed923eebdd987ba52","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"uDge+vpfQflLrHA2s3ckN3OzgO4sdCQ748jI6Q71Yed/AoUMBW6p3JhJl2vGXCYjRKscmtIaTX+RB1jhvsO4BOneJwE6NVT0pk1JEySf+KB3jn9OVcxLXCtHqUpzmF6h507MZFM29/5TlesrkYWoNexlP6VjBjT6b2jzv/vwRvjaYaqHNnVU1OWYJE3xZ6TX16SEoOStRBVyqxrcG640V9ewP4OHpH0fa9miO46t6diRcayq5S7bLZC3IVyZl0TbhTI2Xv/N6Zqe4X+FHPh1eb9Qvb22eJx0aEQ+NNfA123PGMXqgcV0pMYfkS6crHDpNH8FfdKAWAKuzWNXOlIcVw=="}},"tbs_fingerprint":"befa6c21e7143a8a00647383a5e44aea1f88e381bee83cd412b03974840cf39d","tbs_noct_fingerprint":"ff3d3a389676a05aa9621ba6b83f7aac8e4ab9ac83cf4d7f7c7b2aed0967afbb","validation_level":"DV","validity":{"end":"2022-06-02T23:59:59Z","length":"64886399","start":"2020-05-13T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.usertrust.com/USERTrustRSAAddTrustCA.crt"],"ocsp_urls":["http://ocsp.usertrust.com"]},"authority_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.5.29.32.0"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.usertrust.com/USERTrustRSACertificationAuthority.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1"},"fingerprint_md5":"adab5c4df031fb9299f71ada7e18f613","fingerprint_sha1":"33e4e80807204c2b6182a3a14b591acd25b5f0db","fingerprint_sha256":"7fa4ff68ec04a99d7528d5085f94907f4d1dd1c5381bacdc832ed5c960214676","issuer":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"issuer_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","redacted":false,"serial_number":"166627644428940058458651716034439089575","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"Mr9hvQ5Iw0/HukdN+Jx4GQHcEx2Ab/zDcLRSmjEzmldS+zGea6TvVKqJjUAXaPgREHzSyrHxVYbH7rM2kYb2OVG/Rr8PoLq0935JxCo2F57kaDl6r5ROVm+yezu/Coa9zcV3HAO4OLGiH19+24rcRki2aArPsrW04jTkZ6k4Zgle0rj8nSg6F0AnwnJOKf0hPHzPE/uWLMUxRP0T7dWbqWlod3zu4f+k+TY4CFM5ooQ0nBnzvg6s1SQ36yOoeNDT5++SR2RiOSLvxvcRviKFxmZEJCaOEDKNyJOuB56DPi/Z+fVGjmO+wea03KbNIaiGCpXZLoUmGv38sbZXQm2V0TP2ORQGgkE49Y9Y3IBbpNV9lXj9p5v//cWoaasm56ekBYdbqbe4oyALl6lFhd2zi+WJN44pDfwGF/Y4QA5C5BIG+3vzxhFoYt/jmPQT2BVPi7Fp2RBgvGQq6jG35LWjOhSbJuMLe/0CjraZwTiXWTb2qHSihrZe68Zk6s+go/lunrotEbaGmAhYLcmsJWTyXnW0OMGuf1pGg+pRyrbxmRE1a6Vqe8YAsOf4vmSyrcjC8azjUeqkk+B5yOGBQMkKW+ESPMFgKuOXwIlCypTPRpgSabuY0MLTDXJLR27lk8QyKGOHQ+SwMj4K00u/I5sUKUErmgQfky3xxzlIPK1aEn8="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"d44564efcb1efabb43cd7906feb0a59e3b9d57e23a4619e6e912d0058b87c354","subject":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","subject_key_info":{"fingerprint_sha256":"e1ae9c3de848ece1ba72e0d991ae4d0d9ec547c6bad1dddab9d6beb0a7e0e0d8","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1nMz1tc8INAA0hdFuNY+B6I/x0HuMjDJsGz99J/LEpgPLT+NTQEMgg8Xf2Iu6bhIefsWg06t1zIlk7cHv7lQP6lMw0Aq6Tn/2YHKHxYyQdqAJrkjeocgHuP/IJo8lURvh3UGkEC0MpMWCRAIIz7S3YcPb11RFGoKacVPAXJpz9OTTG0EoKMbgn6xmrntxZ7FN3ifmgg0+1YuWMQJDgZkW7w33PGfKGioVrCSo1yfu4iYCBskHaswha6vsC6eep3BwEIc4gLw6uBK0u+QDrTBQBbwb4VCSmT3pDCg/r8uoydajotYuK3DGReEY+1vVv2Dy2A0xHS+5p3b4eTlygxfFQ=="}},"tbs_fingerprint":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","tbs_noct_fingerprint":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","validation_level":"DV","validity":{"end":"2030-12-31T23:59:59Z","length":"383875199","start":"2018-11-02T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.comodoca.com"]},"authority_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb"},"fingerprint_md5":"285ec909c4ab0d2d57f5086b225799aa","fingerprint_sha1":"d89e3bd43d5d909b47a18977aa9d5ce36cee184c","fingerprint_sha256":"68b9c761219a5b1f0131784474665db61bbdb109e00f05ca9f74244ee5f5f52b","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"76359301477803385872276235234032301461","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"GIdR3HQhPZyK4Ce3M9AuzOzw5steEd4ib5t1jp5y/uTW/qofnJYt7wNKfq70jW9yPEM7wD/ruN9cqqnGrvL82O6je0P2hjZ8FODN9Pc//t64tIrwkZb+/UNkfv3M0gGhfX34GRnJQisTv1iLuqSiZgR2iJFODIkUzqJNyTKzuugUGrxx8VvwQQuYAAoiAxDlDLH5zZI3Ge078eQ6tvlFEyZ1r7uq7z97dzvSxAKRPRkA0xdcOds/exgNRc2ThZYvXd9ZFk8/Ub3VRRg/7UqO6AZhdCMWtQ1QcydER38QXYkqa4UxFMToqWpMgLxqeM+4f452cpkMnf7XkQgWoaNflQ=="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"2c1fb55882eb4d8c782a3fd3eb37e60c0518b5eedd91149a5b3e5a5a234a1c5f","subject":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"subject_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","subject_key_info":{"fingerprint_sha256":"c784333d20bcd742b9fdc3236f4e509b8937070e73067e254dd3bf9c45bf4dde","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"gBJlFzYOw9sIs9CsVw127c0n00ytUINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZtF+mvX2do2NCtnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8/hPwhxR79uQfjtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax1Jt4A8BQOujM8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9yn8iNK5+O2hmAUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf4TKuzJM7UXiVZ4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQNwZNUMBkTrNN9N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kCnusSTJV882sFqV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/kjbmUZIO8yZ9HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhCLkMaTLTwJUdZ+gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgEJTm4Diup8kyXHAc/DVL17e8vgg8="}},"tbs_fingerprint":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","tbs_noct_fingerprint":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","validation_level":"unknown","validity":{"end":"2028-12-31T23:59:59Z","length":"309571199","start":"2019-03-12T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true},"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl","http://crl.comodo.net/AAACertificateServices.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4"},"fingerprint_md5":"497904b0eb8719ac47b0bc11519b74d0","fingerprint_sha1":"d1eb23a46d17d68fd92564c2f1f1601764d8e349","fingerprint_sha256":"d7a7a0fb5d7e2731d771e9484ebcdef71d5f0c3e0a2948782bc83ee0ea699ef4","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"1","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"CFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLzRt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"677bb47ace29d001a6aca1c4b06f80f0ecb186deb9daf7d1ab0d9209747061e5","subject":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","subject_key_info":{"fingerprint_sha256":"bd153ed7b0434f6886b17bce8bbe84ed340c7132d702a8f4fa318f756ecbd6f3","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vkCd9G7h6naHHE1FRI6+RsiDBp3BKv4YH47kAvrzq11QihYxC5oG0MVwIs1JLVRjzLZuaEYLU+rLTCTAvHJO6vEVrvRUmhIKw3qyM2Di2olV8yJY897cz++DhqKMlE+faPKYkEaEJ8d2v+PMNSyLXgdkZYLASLCokflhn3YgUKiRx2a163hiA1bwihoT6jGjHqCZ/Tj29icyWG8H9Wu4+xQrr7eqzNZjX3OM2gWZqDioyxd4NlGs6Z70eDqNzw/ZQuKYDKsvnw4B3u+fmUnxLd+sdE0bmLVHxeUp0fmQGMdinL6DxyZ7Poolx8DdneY1aBAgnY/Y3tLDhJwNXugvyQ=="}},"tbs_fingerprint":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","tbs_noct_fingerprint":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","validation_level":"unknown","validity":{"end":"2028-12-31T23:59:59Z","length":"789004799","start":"2004-01-01T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"24","name":"secp384r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2"},"timestamp":"2020-07-12T10:31:56Z"}}},"ipint":"1733092361","p3306":{"mysql":{"banner":{"capability_flags":{"CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS":true,"CLIENT_COMPRESS":true,"CLIENT_CONNECT_ATTRS":true,"CLIENT_CONNECT_WITH_DB":true,"CLIENT_FOUND_ROWS":true,"CLIENT_IGNORE_SIGPIPE":true,"CLIENT_IGNORE_SPACE":true,"CLIENT_INTERACTIVE":true,"CLIENT_LOCAL_FILES":true,"CLIENT_LONG_FLAG":true,"CLIENT_LONG_PASSWORD":true,"CLIENT_MULTI_RESULTS":true,"CLIENT_MULTI_STATEMENTS":true,"CLIENT_NO_SCHEMA":true,"CLIENT_ODBC":true,"CLIENT_PLUGIN_AUTH":true,"CLIENT_PLUGIN_AUTH_LEN_ENC_CLIENT_DATA":true,"CLIENT_PROTOCOL_41":true,"CLIENT_PS_MULTI_RESULTS":true,"CLIENT_RESERVED":true,"CLIENT_SECURE_CONNECTION":true,"CLIENT_SSL":true,"CLIENT_TRANSACTIONS":true},"protocol_version":"10","server_version":"5.6.33-79.0","status_flags":{"SERVER_STATUS_AUTOCOMMIT":true},"supported":true,"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.sectigo.com/SectigoRSADomainValidationSecureServerCA.crt"],"ocsp_urls":["http://ocsp.sectigo.com"]},"authority_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://sectigo.com/CPS"],"id":"1.3.6.1.4.1.6449.1.2.2.7"},{"id":"2.23.140.1.2.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"RqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUc=","signature":"BAMARzBFAiB70swEcQ69dF3X+Lk0TVjSgbG4cv/BGALmpC2zaNLrWAIhAKPscR3NGoghoyF54xqODLMgmlV65CEx1Lwwvo0g4auY","timestamp":"1589332274","version":"0"},{"log_id":"36Veq2iCTx9sre64X04+WurNohKkal6OOxLAIERcKnM=","signature":"BAMARjBEAiAShPC5b7OL5kB9S2GhuKW1PSC6uzenHTkfJhLeeMR9OwIgTzZevv0+J2X8NOW5oF1laGjM2KgqmS8b04m86CP0jBo=","timestamp":"1589332275","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMARzBFAiEAzuS56Lz5Nb2STh3dGa2EZ836aaBYT/txmgY9Kw9lTuICIH3rvNKQScQ7loyq1UFrsoktooyv6KvMIFeEaJMAP4Io","timestamp":"1589332274","version":"0"}],"subject_alt_name":{"dns_names":["*.webhostbox.net","webhostbox.net"]},"subject_key_id":"82be00fa059adec4da24a4d0d0fdaa998605af32"},"fingerprint_md5":"32bd2db5bda7b77d665e19b3d30fd9ec","fingerprint_sha1":"3976d530b3db64f7e14c0b4db99926feaadb495a","fingerprint_sha256":"003453a4d97b61bb613c0d0ea9a201c240f127e3c2da4b88c2e41043ac1bf562","issuer":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","names":["*.webhostbox.net","webhostbox.net"],"redacted":false,"serial_number":"182446423222663759520993008783205313670","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"kPxtls+WdMNUOIwclRWW2HTjXbE5i3P2MoRmHgr+oyPjwoZw0VrA1oOI4kuqvB6QlY4pA1f4Ojdb+RB19mBY5t3MhbKwWXar6b7jZ9QtHvDaYWoFeQ6EnEjk2Gi8u2OM3oAqjCoAxNnBOHKb+O1mnwFBO7O7HV1bECGGfEXFIAW3x8a5j6NLqwbY9fOcq7sGWdjannfJsRitFvqQEgTeP6WBFcx3T+F9Ky8V3b8wpapI+2CQR1bcHidcRtQvEzMMw0m0O0QtLlhHHASVxCYjSI2Lm40QJGzOgo3WeFNZNf9rPFuI3D1DmNbLsIOxbkXCpCwPoWw8vsuclz8ALLVMOA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"80adc5ea5d27c6d1e9994836aae29f15ed3c670189ca829182ad254aa3b7d20c","subject":{"common_name":["*.webhostbox.net"]},"subject_dn":"CN=*.webhostbox.net","subject_key_info":{"fingerprint_sha256":"ef347190df007bcd3d7c522dad694e47ef3a75736244901ed923eebdd987ba52","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"uDge+vpfQflLrHA2s3ckN3OzgO4sdCQ748jI6Q71Yed/AoUMBW6p3JhJl2vGXCYjRKscmtIaTX+RB1jhvsO4BOneJwE6NVT0pk1JEySf+KB3jn9OVcxLXCtHqUpzmF6h507MZFM29/5TlesrkYWoNexlP6VjBjT6b2jzv/vwRvjaYaqHNnVU1OWYJE3xZ6TX16SEoOStRBVyqxrcG640V9ewP4OHpH0fa9miO46t6diRcayq5S7bLZC3IVyZl0TbhTI2Xv/N6Zqe4X+FHPh1eb9Qvb22eJx0aEQ+NNfA123PGMXqgcV0pMYfkS6crHDpNH8FfdKAWAKuzWNXOlIcVw=="}},"tbs_fingerprint":"befa6c21e7143a8a00647383a5e44aea1f88e381bee83cd412b03974840cf39d","tbs_noct_fingerprint":"ff3d3a389676a05aa9621ba6b83f7aac8e4ab9ac83cf4d7f7c7b2aed0967afbb","validation_level":"DV","validity":{"end":"2022-06-02T23:59:59Z","length":"64886399","start":"2020-05-13T00:00:00Z"},"version":"3"}},"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: failed to load system roots and no roots provided","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-13T06:39:14Z"}}},"updated_at":"2020-07-15T10:16:28Z","p995":{"pop3s":{"tls":{"banner":"+OK Dovecot ready.","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.sectigo.com/SectigoRSADomainValidationSecureServerCA.crt"],"ocsp_urls":["http://ocsp.sectigo.com"]},"authority_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://sectigo.com/CPS"],"id":"1.3.6.1.4.1.6449.1.2.2.7"},{"id":"2.23.140.1.2.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"RqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUc=","signature":"BAMARzBFAiB70swEcQ69dF3X+Lk0TVjSgbG4cv/BGALmpC2zaNLrWAIhAKPscR3NGoghoyF54xqODLMgmlV65CEx1Lwwvo0g4auY","timestamp":"1589332274","version":"0"},{"log_id":"36Veq2iCTx9sre64X04+WurNohKkal6OOxLAIERcKnM=","signature":"BAMARjBEAiAShPC5b7OL5kB9S2GhuKW1PSC6uzenHTkfJhLeeMR9OwIgTzZevv0+J2X8NOW5oF1laGjM2KgqmS8b04m86CP0jBo=","timestamp":"1589332275","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMARzBFAiEAzuS56Lz5Nb2STh3dGa2EZ836aaBYT/txmgY9Kw9lTuICIH3rvNKQScQ7loyq1UFrsoktooyv6KvMIFeEaJMAP4Io","timestamp":"1589332274","version":"0"}],"subject_alt_name":{"dns_names":["*.webhostbox.net","webhostbox.net"]},"subject_key_id":"82be00fa059adec4da24a4d0d0fdaa998605af32"},"fingerprint_md5":"32bd2db5bda7b77d665e19b3d30fd9ec","fingerprint_sha1":"3976d530b3db64f7e14c0b4db99926feaadb495a","fingerprint_sha256":"003453a4d97b61bb613c0d0ea9a201c240f127e3c2da4b88c2e41043ac1bf562","issuer":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","names":["*.webhostbox.net","webhostbox.net"],"redacted":false,"serial_number":"182446423222663759520993008783205313670","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"kPxtls+WdMNUOIwclRWW2HTjXbE5i3P2MoRmHgr+oyPjwoZw0VrA1oOI4kuqvB6QlY4pA1f4Ojdb+RB19mBY5t3MhbKwWXar6b7jZ9QtHvDaYWoFeQ6EnEjk2Gi8u2OM3oAqjCoAxNnBOHKb+O1mnwFBO7O7HV1bECGGfEXFIAW3x8a5j6NLqwbY9fOcq7sGWdjannfJsRitFvqQEgTeP6WBFcx3T+F9Ky8V3b8wpapI+2CQR1bcHidcRtQvEzMMw0m0O0QtLlhHHASVxCYjSI2Lm40QJGzOgo3WeFNZNf9rPFuI3D1DmNbLsIOxbkXCpCwPoWw8vsuclz8ALLVMOA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"80adc5ea5d27c6d1e9994836aae29f15ed3c670189ca829182ad254aa3b7d20c","subject":{"common_name":["*.webhostbox.net"]},"subject_dn":"CN=*.webhostbox.net","subject_key_info":{"fingerprint_sha256":"ef347190df007bcd3d7c522dad694e47ef3a75736244901ed923eebdd987ba52","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"uDge+vpfQflLrHA2s3ckN3OzgO4sdCQ748jI6Q71Yed/AoUMBW6p3JhJl2vGXCYjRKscmtIaTX+RB1jhvsO4BOneJwE6NVT0pk1JEySf+KB3jn9OVcxLXCtHqUpzmF6h507MZFM29/5TlesrkYWoNexlP6VjBjT6b2jzv/vwRvjaYaqHNnVU1OWYJE3xZ6TX16SEoOStRBVyqxrcG640V9ewP4OHpH0fa9miO46t6diRcayq5S7bLZC3IVyZl0TbhTI2Xv/N6Zqe4X+FHPh1eb9Qvb22eJx0aEQ+NNfA123PGMXqgcV0pMYfkS6crHDpNH8FfdKAWAKuzWNXOlIcVw=="}},"tbs_fingerprint":"befa6c21e7143a8a00647383a5e44aea1f88e381bee83cd412b03974840cf39d","tbs_noct_fingerprint":"ff3d3a389676a05aa9621ba6b83f7aac8e4ab9ac83cf4d7f7c7b2aed0967afbb","validation_level":"DV","validity":{"end":"2022-06-02T23:59:59Z","length":"64886399","start":"2020-05-13T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.usertrust.com/USERTrustRSAAddTrustCA.crt"],"ocsp_urls":["http://ocsp.usertrust.com"]},"authority_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.5.29.32.0"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.usertrust.com/USERTrustRSACertificationAuthority.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1"},"fingerprint_md5":"adab5c4df031fb9299f71ada7e18f613","fingerprint_sha1":"33e4e80807204c2b6182a3a14b591acd25b5f0db","fingerprint_sha256":"7fa4ff68ec04a99d7528d5085f94907f4d1dd1c5381bacdc832ed5c960214676","issuer":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"issuer_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","redacted":false,"serial_number":"166627644428940058458651716034439089575","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"Mr9hvQ5Iw0/HukdN+Jx4GQHcEx2Ab/zDcLRSmjEzmldS+zGea6TvVKqJjUAXaPgREHzSyrHxVYbH7rM2kYb2OVG/Rr8PoLq0935JxCo2F57kaDl6r5ROVm+yezu/Coa9zcV3HAO4OLGiH19+24rcRki2aArPsrW04jTkZ6k4Zgle0rj8nSg6F0AnwnJOKf0hPHzPE/uWLMUxRP0T7dWbqWlod3zu4f+k+TY4CFM5ooQ0nBnzvg6s1SQ36yOoeNDT5++SR2RiOSLvxvcRviKFxmZEJCaOEDKNyJOuB56DPi/Z+fVGjmO+wea03KbNIaiGCpXZLoUmGv38sbZXQm2V0TP2ORQGgkE49Y9Y3IBbpNV9lXj9p5v//cWoaasm56ekBYdbqbe4oyALl6lFhd2zi+WJN44pDfwGF/Y4QA5C5BIG+3vzxhFoYt/jmPQT2BVPi7Fp2RBgvGQq6jG35LWjOhSbJuMLe/0CjraZwTiXWTb2qHSihrZe68Zk6s+go/lunrotEbaGmAhYLcmsJWTyXnW0OMGuf1pGg+pRyrbxmRE1a6Vqe8YAsOf4vmSyrcjC8azjUeqkk+B5yOGBQMkKW+ESPMFgKuOXwIlCypTPRpgSabuY0MLTDXJLR27lk8QyKGOHQ+SwMj4K00u/I5sUKUErmgQfky3xxzlIPK1aEn8="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"d44564efcb1efabb43cd7906feb0a59e3b9d57e23a4619e6e912d0058b87c354","subject":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","subject_key_info":{"fingerprint_sha256":"e1ae9c3de848ece1ba72e0d991ae4d0d9ec547c6bad1dddab9d6beb0a7e0e0d8","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1nMz1tc8INAA0hdFuNY+B6I/x0HuMjDJsGz99J/LEpgPLT+NTQEMgg8Xf2Iu6bhIefsWg06t1zIlk7cHv7lQP6lMw0Aq6Tn/2YHKHxYyQdqAJrkjeocgHuP/IJo8lURvh3UGkEC0MpMWCRAIIz7S3YcPb11RFGoKacVPAXJpz9OTTG0EoKMbgn6xmrntxZ7FN3ifmgg0+1YuWMQJDgZkW7w33PGfKGioVrCSo1yfu4iYCBskHaswha6vsC6eep3BwEIc4gLw6uBK0u+QDrTBQBbwb4VCSmT3pDCg/r8uoydajotYuK3DGReEY+1vVv2Dy2A0xHS+5p3b4eTlygxfFQ=="}},"tbs_fingerprint":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","tbs_noct_fingerprint":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","validation_level":"DV","validity":{"end":"2030-12-31T23:59:59Z","length":"383875199","start":"2018-11-02T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.comodoca.com"]},"authority_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb"},"fingerprint_md5":"285ec909c4ab0d2d57f5086b225799aa","fingerprint_sha1":"d89e3bd43d5d909b47a18977aa9d5ce36cee184c","fingerprint_sha256":"68b9c761219a5b1f0131784474665db61bbdb109e00f05ca9f74244ee5f5f52b","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"76359301477803385872276235234032301461","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"GIdR3HQhPZyK4Ce3M9AuzOzw5steEd4ib5t1jp5y/uTW/qofnJYt7wNKfq70jW9yPEM7wD/ruN9cqqnGrvL82O6je0P2hjZ8FODN9Pc//t64tIrwkZb+/UNkfv3M0gGhfX34GRnJQisTv1iLuqSiZgR2iJFODIkUzqJNyTKzuugUGrxx8VvwQQuYAAoiAxDlDLH5zZI3Ge078eQ6tvlFEyZ1r7uq7z97dzvSxAKRPRkA0xdcOds/exgNRc2ThZYvXd9ZFk8/Ub3VRRg/7UqO6AZhdCMWtQ1QcydER38QXYkqa4UxFMToqWpMgLxqeM+4f452cpkMnf7XkQgWoaNflQ=="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"2c1fb55882eb4d8c782a3fd3eb37e60c0518b5eedd91149a5b3e5a5a234a1c5f","subject":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"subject_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","subject_key_info":{"fingerprint_sha256":"c784333d20bcd742b9fdc3236f4e509b8937070e73067e254dd3bf9c45bf4dde","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"gBJlFzYOw9sIs9CsVw127c0n00ytUINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZtF+mvX2do2NCtnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8/hPwhxR79uQfjtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax1Jt4A8BQOujM8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9yn8iNK5+O2hmAUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf4TKuzJM7UXiVZ4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQNwZNUMBkTrNN9N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kCnusSTJV882sFqV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/kjbmUZIO8yZ9HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhCLkMaTLTwJUdZ+gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgEJTm4Diup8kyXHAc/DVL17e8vgg8="}},"tbs_fingerprint":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","tbs_noct_fingerprint":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","validation_level":"unknown","validity":{"end":"2028-12-31T23:59:59Z","length":"309571199","start":"2019-03-12T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true},"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl","http://crl.comodo.net/AAACertificateServices.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4"},"fingerprint_md5":"497904b0eb8719ac47b0bc11519b74d0","fingerprint_sha1":"d1eb23a46d17d68fd92564c2f1f1601764d8e349","fingerprint_sha256":"d7a7a0fb5d7e2731d771e9484ebcdef71d5f0c3e0a2948782bc83ee0ea699ef4","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"1","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"CFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLzRt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"677bb47ace29d001a6aca1c4b06f80f0ecb186deb9daf7d1ab0d9209747061e5","subject":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","subject_key_info":{"fingerprint_sha256":"bd153ed7b0434f6886b17bce8bbe84ed340c7132d702a8f4fa318f756ecbd6f3","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vkCd9G7h6naHHE1FRI6+RsiDBp3BKv4YH47kAvrzq11QihYxC5oG0MVwIs1JLVRjzLZuaEYLU+rLTCTAvHJO6vEVrvRUmhIKw3qyM2Di2olV8yJY897cz++DhqKMlE+faPKYkEaEJ8d2v+PMNSyLXgdkZYLASLCokflhn3YgUKiRx2a163hiA1bwihoT6jGjHqCZ/Tj29icyWG8H9Wu4+xQrr7eqzNZjX3OM2gWZqDioyxd4NlGs6Z70eDqNzw/ZQuKYDKsvnw4B3u+fmUnxLd+sdE0bmLVHxeUp0fmQGMdinL6DxyZ7Poolx8DdneY1aBAgnY/Y3tLDhJwNXugvyQ=="}},"tbs_fingerprint":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","tbs_noct_fingerprint":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","validation_level":"unknown","validity":{"end":"2028-12-31T23:59:59Z","length":"789004799","start":"2004-01-01T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"24","name":"secp384r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2"},"timestamp":"2020-07-10T15:25:06Z"}}},"p587":{"smtp":{"starttls":{"banner":"220-cs-mum-29.webhostbox.net ESMTP Exim 4.93 #2 Sat, 11 Jul 2020 08:20:37 +0000 \r\n220-We do not authorize the use of this system to transport unsolicited, \r\n220 and/or bulk e-mail.","ehlo":"250-cs-mum-29.webhostbox.net Hello worker-06.sfj.censys-scanner.com [192.35.168.96]\r\n250-SIZE 52428800\r\n250-8BITMIME\r\n250-PIPELINING\r\n250-AUTH PLAIN LOGIN\r\n250-STARTTLS\r\n250 HELP","metadata":{"description":"Exim","product":"Exim"},"starttls":"220 TLS go ahead","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.sectigo.com/SectigoRSADomainValidationSecureServerCA.crt"],"ocsp_urls":["http://ocsp.sectigo.com"]},"authority_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://sectigo.com/CPS"],"id":"1.3.6.1.4.1.6449.1.2.2.7"},{"id":"2.23.140.1.2.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"RqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUc=","signature":"BAMARzBFAiB70swEcQ69dF3X+Lk0TVjSgbG4cv/BGALmpC2zaNLrWAIhAKPscR3NGoghoyF54xqODLMgmlV65CEx1Lwwvo0g4auY","timestamp":"1589332274","version":"0"},{"log_id":"36Veq2iCTx9sre64X04+WurNohKkal6OOxLAIERcKnM=","signature":"BAMARjBEAiAShPC5b7OL5kB9S2GhuKW1PSC6uzenHTkfJhLeeMR9OwIgTzZevv0+J2X8NOW5oF1laGjM2KgqmS8b04m86CP0jBo=","timestamp":"1589332275","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMARzBFAiEAzuS56Lz5Nb2STh3dGa2EZ836aaBYT/txmgY9Kw9lTuICIH3rvNKQScQ7loyq1UFrsoktooyv6KvMIFeEaJMAP4Io","timestamp":"1589332274","version":"0"}],"subject_alt_name":{"dns_names":["*.webhostbox.net","webhostbox.net"]},"subject_key_id":"82be00fa059adec4da24a4d0d0fdaa998605af32"},"fingerprint_md5":"32bd2db5bda7b77d665e19b3d30fd9ec","fingerprint_sha1":"3976d530b3db64f7e14c0b4db99926feaadb495a","fingerprint_sha256":"003453a4d97b61bb613c0d0ea9a201c240f127e3c2da4b88c2e41043ac1bf562","issuer":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","names":["*.webhostbox.net","webhostbox.net"],"redacted":false,"serial_number":"182446423222663759520993008783205313670","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"kPxtls+WdMNUOIwclRWW2HTjXbE5i3P2MoRmHgr+oyPjwoZw0VrA1oOI4kuqvB6QlY4pA1f4Ojdb+RB19mBY5t3MhbKwWXar6b7jZ9QtHvDaYWoFeQ6EnEjk2Gi8u2OM3oAqjCoAxNnBOHKb+O1mnwFBO7O7HV1bECGGfEXFIAW3x8a5j6NLqwbY9fOcq7sGWdjannfJsRitFvqQEgTeP6WBFcx3T+F9Ky8V3b8wpapI+2CQR1bcHidcRtQvEzMMw0m0O0QtLlhHHASVxCYjSI2Lm40QJGzOgo3WeFNZNf9rPFuI3D1DmNbLsIOxbkXCpCwPoWw8vsuclz8ALLVMOA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"80adc5ea5d27c6d1e9994836aae29f15ed3c670189ca829182ad254aa3b7d20c","subject":{"common_name":["*.webhostbox.net"]},"subject_dn":"CN=*.webhostbox.net","subject_key_info":{"fingerprint_sha256":"ef347190df007bcd3d7c522dad694e47ef3a75736244901ed923eebdd987ba52","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"uDge+vpfQflLrHA2s3ckN3OzgO4sdCQ748jI6Q71Yed/AoUMBW6p3JhJl2vGXCYjRKscmtIaTX+RB1jhvsO4BOneJwE6NVT0pk1JEySf+KB3jn9OVcxLXCtHqUpzmF6h507MZFM29/5TlesrkYWoNexlP6VjBjT6b2jzv/vwRvjaYaqHNnVU1OWYJE3xZ6TX16SEoOStRBVyqxrcG640V9ewP4OHpH0fa9miO46t6diRcayq5S7bLZC3IVyZl0TbhTI2Xv/N6Zqe4X+FHPh1eb9Qvb22eJx0aEQ+NNfA123PGMXqgcV0pMYfkS6crHDpNH8FfdKAWAKuzWNXOlIcVw=="}},"tbs_fingerprint":"befa6c21e7143a8a00647383a5e44aea1f88e381bee83cd412b03974840cf39d","tbs_noct_fingerprint":"ff3d3a389676a05aa9621ba6b83f7aac8e4ab9ac83cf4d7f7c7b2aed0967afbb","validation_level":"DV","validity":{"end":"2022-06-02T23:59:59Z","length":"64886399","start":"2020-05-13T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.usertrust.com/USERTrustRSAAddTrustCA.crt"],"ocsp_urls":["http://ocsp.usertrust.com"]},"authority_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.5.29.32.0"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.usertrust.com/USERTrustRSACertificationAuthority.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"8d8c5ec454ad8ae177e99bf99b05e1b8018d61e1"},"fingerprint_md5":"adab5c4df031fb9299f71ada7e18f613","fingerprint_sha1":"33e4e80807204c2b6182a3a14b591acd25b5f0db","fingerprint_sha256":"7fa4ff68ec04a99d7528d5085f94907f4d1dd1c5381bacdc832ed5c960214676","issuer":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"issuer_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","redacted":false,"serial_number":"166627644428940058458651716034439089575","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"Mr9hvQ5Iw0/HukdN+Jx4GQHcEx2Ab/zDcLRSmjEzmldS+zGea6TvVKqJjUAXaPgREHzSyrHxVYbH7rM2kYb2OVG/Rr8PoLq0935JxCo2F57kaDl6r5ROVm+yezu/Coa9zcV3HAO4OLGiH19+24rcRki2aArPsrW04jTkZ6k4Zgle0rj8nSg6F0AnwnJOKf0hPHzPE/uWLMUxRP0T7dWbqWlod3zu4f+k+TY4CFM5ooQ0nBnzvg6s1SQ36yOoeNDT5++SR2RiOSLvxvcRviKFxmZEJCaOEDKNyJOuB56DPi/Z+fVGjmO+wea03KbNIaiGCpXZLoUmGv38sbZXQm2V0TP2ORQGgkE49Y9Y3IBbpNV9lXj9p5v//cWoaasm56ekBYdbqbe4oyALl6lFhd2zi+WJN44pDfwGF/Y4QA5C5BIG+3vzxhFoYt/jmPQT2BVPi7Fp2RBgvGQq6jG35LWjOhSbJuMLe/0CjraZwTiXWTb2qHSihrZe68Zk6s+go/lunrotEbaGmAhYLcmsJWTyXnW0OMGuf1pGg+pRyrbxmRE1a6Vqe8YAsOf4vmSyrcjC8azjUeqkk+B5yOGBQMkKW+ESPMFgKuOXwIlCypTPRpgSabuY0MLTDXJLR27lk8QyKGOHQ+SwMj4K00u/I5sUKUErmgQfky3xxzlIPK1aEn8="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"d44564efcb1efabb43cd7906feb0a59e3b9d57e23a4619e6e912d0058b87c354","subject":{"common_name":["Sectigo RSA Domain Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA","subject_key_info":{"fingerprint_sha256":"e1ae9c3de848ece1ba72e0d991ae4d0d9ec547c6bad1dddab9d6beb0a7e0e0d8","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1nMz1tc8INAA0hdFuNY+B6I/x0HuMjDJsGz99J/LEpgPLT+NTQEMgg8Xf2Iu6bhIefsWg06t1zIlk7cHv7lQP6lMw0Aq6Tn/2YHKHxYyQdqAJrkjeocgHuP/IJo8lURvh3UGkEC0MpMWCRAIIz7S3YcPb11RFGoKacVPAXJpz9OTTG0EoKMbgn6xmrntxZ7FN3ifmgg0+1YuWMQJDgZkW7w33PGfKGioVrCSo1yfu4iYCBskHaswha6vsC6eep3BwEIc4gLw6uBK0u+QDrTBQBbwb4VCSmT3pDCg/r8uoydajotYuK3DGReEY+1vVv2Dy2A0xHS+5p3b4eTlygxfFQ=="}},"tbs_fingerprint":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","tbs_noct_fingerprint":"b6bc3db94c060cec49f2087f17c35fb483939c7274ec187f6f414507d278d1b4","validation_level":"DV","validity":{"end":"2030-12-31T23:59:59Z","length":"383875199","start":"2018-11-02T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.comodoca.com"]},"authority_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb"},"fingerprint_md5":"285ec909c4ab0d2d57f5086b225799aa","fingerprint_sha1":"d89e3bd43d5d909b47a18977aa9d5ce36cee184c","fingerprint_sha256":"68b9c761219a5b1f0131784474665db61bbdb109e00f05ca9f74244ee5f5f52b","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"76359301477803385872276235234032301461","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"GIdR3HQhPZyK4Ce3M9AuzOzw5steEd4ib5t1jp5y/uTW/qofnJYt7wNKfq70jW9yPEM7wD/ruN9cqqnGrvL82O6je0P2hjZ8FODN9Pc//t64tIrwkZb+/UNkfv3M0gGhfX34GRnJQisTv1iLuqSiZgR2iJFODIkUzqJNyTKzuugUGrxx8VvwQQuYAAoiAxDlDLH5zZI3Ge078eQ6tvlFEyZ1r7uq7z97dzvSxAKRPRkA0xdcOds/exgNRc2ThZYvXd9ZFk8/Ub3VRRg/7UqO6AZhdCMWtQ1QcydER38QXYkqa4UxFMToqWpMgLxqeM+4f452cpkMnf7XkQgWoaNflQ=="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"2c1fb55882eb4d8c782a3fd3eb37e60c0518b5eedd91149a5b3e5a5a234a1c5f","subject":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"subject_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","subject_key_info":{"fingerprint_sha256":"c784333d20bcd742b9fdc3236f4e509b8937070e73067e254dd3bf9c45bf4dde","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"gBJlFzYOw9sIs9CsVw127c0n00ytUINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZtF+mvX2do2NCtnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8/hPwhxR79uQfjtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax1Jt4A8BQOujM8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9yn8iNK5+O2hmAUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf4TKuzJM7UXiVZ4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQNwZNUMBkTrNN9N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kCnusSTJV882sFqV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/kjbmUZIO8yZ9HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhCLkMaTLTwJUdZ+gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgEJTm4Diup8kyXHAc/DVL17e8vgg8="}},"tbs_fingerprint":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","tbs_noct_fingerprint":"593e2d49a74023555526aef9b7422b19e5b8b167391b6dee5ed292b1ca23a74c","validation_level":"unknown","validity":{"end":"2028-12-31T23:59:59Z","length":"309571199","start":"2019-03-12T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true},"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl","http://crl.comodo.net/AAACertificateServices.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4"},"fingerprint_md5":"497904b0eb8719ac47b0bc11519b74d0","fingerprint_sha1":"d1eb23a46d17d68fd92564c2f1f1601764d8e349","fingerprint_sha256":"d7a7a0fb5d7e2731d771e9484ebcdef71d5f0c3e0a2948782bc83ee0ea699ef4","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"1","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"CFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLzRt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"677bb47ace29d001a6aca1c4b06f80f0ecb186deb9daf7d1ab0d9209747061e5","subject":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","subject_key_info":{"fingerprint_sha256":"bd153ed7b0434f6886b17bce8bbe84ed340c7132d702a8f4fa318f756ecbd6f3","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vkCd9G7h6naHHE1FRI6+RsiDBp3BKv4YH47kAvrzq11QihYxC5oG0MVwIs1JLVRjzLZuaEYLU+rLTCTAvHJO6vEVrvRUmhIKw3qyM2Di2olV8yJY897cz++DhqKMlE+faPKYkEaEJ8d2v+PMNSyLXgdkZYLASLCokflhn3YgUKiRx2a163hiA1bwihoT6jGjHqCZ/Tj29icyWG8H9Wu4+xQrr7eqzNZjX3OM2gWZqDioyxd4NlGs6Z70eDqNzw/ZQuKYDKsvnw4B3u+fmUnxLd+sdE0bmLVHxeUp0fmQGMdinL6DxyZ7Poolx8DdneY1aBAgnY/Y3tLDhJwNXugvyQ=="}},"tbs_fingerprint":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","tbs_noct_fingerprint":"bedd4b1831f17c7ec1d507380f4c9836baa8ce20065a67db8b43acea14294ba4","validation_level":"unknown","validity":{"end":"2028-12-31T23:59:59Z","length":"789004799","start":"2004-01-01T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2"},"timestamp":"2020-07-11T08:20:36Z"}}},"location":{"country_code":"IN","continent":"Asia","timezone":"Asia/Kolkata","latitude":20.0063,"longitude":77.006,"registered_country":"India","registered_country_code":"IN","country":"India"},"autonomous_system":{"description":"PUBLIC-DOMAIN-REGISTRY","routed_prefix":"103.76.228.0/22","asn":"394695","country_code":"US","name":"PUBLIC-DOMAIN-REGISTRY","path":["11164","4637","9498","394695"]},"protocols":["110/pop3","143/imap","21/ftp","22/ssh","3306/mysql","443/https","465/smtp","53/dns","587/smtp","80/http","993/imaps","995/pop3s"],"ipinteger":"165956711"} +{"address":"13.209.131.251","ipint":"231834619","updated_at":"2020-07-07T15:04:28Z","ip":"13.209.131.251","p80":{"http":{"get":{"headers":{"connection":"keep-alive","content_length":"0","content_type":"text/html; charset=UTF-8","server":"Apache/2.4.39 () OpenSSL/1.0.2k-fips PHP/5.4.16","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 15:04:29 GMT"}],"upgrade":"h2,h2c","x_powered_by":"PHP/5.4.16"},"metadata":{"description":"Apache httpd 2.4.39","manufacturer":"Apache","product":"httpd","version":"2.4.39"},"status_code":"200","status_line":"200 OK","timestamp":"2020-07-07T15:04:28Z"}}},"location":{"country_code":"KR","continent":"Asia","city":"Incheon","postal_code":"21539","timezone":"Asia/Seoul","province":"Incheon","latitude":37.4562,"longitude":126.7288,"registered_country":"United States","registered_country_code":"US","country":"South Korea"},"autonomous_system":{"description":"AMAZON-02","routed_prefix":"13.209.0.0/16","asn":"16509","country_code":"US","name":"AMAZON-02","path":["7018","174","16509"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"-75247347","version":"0","tags":["http"]} +{"address":"47.40.70.95","ipint":"791168607","updated_at":"2020-07-15T09:40:45Z","p7547":{"cwmp":{"get":{"headers":{"content_length":"0","server":"TR069 client TCP connection request Server","www_authenticate":"Digest realm=\"TR069 Client\", nonce=\"kMnAevUzaLDc94/OPJ2k9ECemp/n1ZS\", algorithm=\"MD5\", domain=\"/\""},"status_code":"401","status_line":"401 Authorization Required","timestamp":"2020-07-15T09:40:45Z"}}},"ip":"47.40.70.95","location":{"country_code":"US","continent":"North America","city":"Pasco","postal_code":"99301","timezone":"America/Los_Angeles","province":"Washington","latitude":46.2515,"longitude":-119.1034,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"CHARTER-20115","routed_prefix":"47.40.64.0/19","asn":"20115","country_code":"US","name":"CHARTER-20115","path":["6939","20115"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"1598433327","version":"0","tags":["cwmp"]} +{"address":"174.85.186.228","ipint":"2924853988","updated_at":"2020-07-15T10:27:01Z","p7547":{"cwmp":{"get":{"headers":{"content_length":"0","server":"gSOAP/2.7","www_authenticate":"Digest realm=\"Sagemcom TR-069\", qop=\"auth,auth-int\", nonce=\"5f0ed9f6cb3f8996d895\", opaque=\"e99f3940\""},"status_code":"401","status_line":"401 Unauthorized","timestamp":"2020-07-15T10:27:01Z"}}},"ip":"174.85.186.228","location":{"country_code":"US","continent":"North America","city":"Athens","postal_code":"35611","timezone":"America/Chicago","province":"Alabama","latitude":34.803,"longitude":-86.9714,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"CHARTER-20115","routed_prefix":"174.85.128.0/17","asn":"20115","country_code":"US","name":"CHARTER-20115","path":["11164","20115"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-457550418","version":"0","tags":["cwmp"]} +{"address":"50.2.73.146","ip":"50.2.73.146","p80":{"http":{"get":{"body":"\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n 亚洲美女视频高清播放,俺也去图片\r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n
      \r\n\t\r\n\t\t\t
      \r\n\t\t\t\t\r\n\t\t\t\t\t
      \r\n\t\t\t\t\t狼友收藏 永久域名\t\t\t\t\t
      \r\n\t\t\t\t
      \r\n\t\t\t\t
      \r\n\t\t\t\t\t
      \r\n\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\r\n\t\t\t\t\t\t
      \r\n\t\t\t\t\t
      \r\n\t\t\t\t
      \r\n\t\t
      \r\n\t\t
      \r\n\t\t
      \r\n\t\t\t\r\n\t\t
      \r\n
      \r\n\t\t
      \r\n\t\t\t\r\n\r\n\t\t\t\r\n\r\n\r\n\r\n\t\t
      \r\n\r\n
      \r\n
      \r\n\t
      \r\n\t\t

      最新视频 - 无需插件在线点播 - 今日更新(72319)部电影

      \r\n\t\t\r\n\t
      \r\n
      \r\n
      \r\n\t
      \r\n\t\t
      \r\n广告预留\r\n\r\n\t\t
      \r\n\t
      \r\n
      \r\n
      \r\n\t
      \r\n\t\t

      视频二区

      \r\n\t\t\r\n\t
      \r\n
      \r\n\r\n\t\t\r\n\t\r\n\r\n
      \r\n\t
      \r\n\r\n\t\t |广告联系dqian0998@gmail.com\t\t
      \r\n\t\t
        \r\n\r\n\t\t\t\r\n\t\t\t\r\n

        我們不生產AV,我們只是AV得搬運工! 防艾滋 重健康 性衝動 莫違法 湊和諧 可自慰
        \r\n 警告:本站精彩視頻拒絕18歲以下以及中國大陸地區訪問,爲了您的學業和身心健康請不要沉迷於成人內容!
        \r\n\t\t\tWARNING: This Site Contains Adult Contents, No Entry For Less Than 18-Years-Old !
        \r\n 页面更新.\r\n\t\t\t

        \r\n\t\t\t
        \r\n\t\t\t
        \r\n\t\t
      \r\n\r\n
      \r\n
      \r\n
      \r\n\r\n\r\n\r\n
      \r\n\t\t\t
        \r\n\r\n \r\n\r\n\t\t\t
      \r\n
      \r\n\r\n\r\n
      \r\n\t\t\t
        \r\n\r\n\t\t\t\r\n\r\n\t\t\t
      \r\n
      \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","body_sha256":"434582b2d91b0e18cba4251c6754fdadabf5884f2ed0caf1c7bc831bb58a39f0","headers":{"connection":"keep-alive","content_type":"text/html; charset=utf-8","server":"nginx","unknown":[{"key":"date","value":"Tue, 30 Jun 2020 15:53:51 GMT"}],"vary":"Accept-Encoding"},"metadata":{"description":"nginx","product":"nginx"},"status_code":"200","status_line":"200 OK","title":"亚洲美女视频高清播放,俺也去图片","timestamp":"2020-06-30T15:53:51Z"}}},"ports":["80","22","8888"],"version":"0","tags":["http","ssh"],"p22":{"ssh":{"v2":{"banner":{"raw":"SSH-2.0-OpenSSH_7.4","software":"OpenSSH_7.4","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"wLewZCc3adI2enr0vQWeXRP/sDBRihn6e5iV7QAStAA="}},"metadata":{"description":"OpenSSH 7.4","product":"OpenSSH","version":"7.4"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"EOon9mGX+xMkcoL/QneNR20gEtlD8SGgI52LfqG4Z5A=","y":"M2nGMNNhNSOfk7qsM5G2HN9C/4pdI+D/CnMEZNcX5GU="},"fingerprint_sha256":"681c437c73d643c9d1ee2123dd97cd39fcb0336b139640be91a6c0a275aa60da","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com","aes128-cbc","aes192-cbc","aes256-cbc","blowfish-cbc","cast128-cbc","3des-cbc"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ecdsa-sha2-nistp256","ssh-ed25519"],"kex_algorithms":["curve25519-sha256","curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group16-sha512","diffie-hellman-group18-sha512","diffie-hellman-group-exchange-sha1","diffie-hellman-group14-sha256","diffie-hellman-group14-sha1","diffie-hellman-group1-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com","aes128-cbc","aes192-cbc","aes256-cbc","blowfish-cbc","cast128-cbc","3des-cbc"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T22:30:27Z"}}},"ipint":"839010706","p8888":{"http":{"get":{"body":"\n\n\n \n 安全入口校验失败\n\n\n

      请使用正确的入口登录面板

      \n

      错误原因:当前宝塔新安装的已经开启了安全入口登录,新装机器都会随机一个8位字符的安全入口名称,亦可以在面板设置处修改,如您没记录或不记得了,可以使用以下方式解决

      \n

      解决方法:在SSH终端输入以下一种命令来解决

      \n

      1.查看面板入口:/etc/init.d/bt default

      \n

      2.关闭安全入口:rm -f /www/server/panel/data/admin_path.pl

      \n

      注意:【关闭安全入口】将使您的面板登录地址被直接暴露在互联网上,非常危险,请谨慎操作

      \n
      \n
      宝塔Linux面板, 请求帮助
      \n\n","body_sha256":"19d530bec602f2100992574f4c4ec88de2aa12d4aedc6a79b6a3edbd772332ca","headers":{"content_type":"text/html; charset=utf-8","unknown":[{"key":"date","value":"Sun, 12 Jul 2020 07:15:04 GMT"}],"vary":"Accept-Encoding"},"status_code":"200","status_line":"200 OK","title":"安全入口校验失败","timestamp":"2020-07-12T07:15:04Z"}}},"updated_at":"2020-07-14T22:30:27Z","location":{"country_code":"DE","continent":"Europe","city":"Frankfurt am Main","postal_code":"60313","timezone":"Europe/Berlin","province":"Hesse","latitude":50.1188,"longitude":8.6843,"registered_country":"United States","registered_country_code":"US","country":"Germany"},"autonomous_system":{"description":"EONIX-COMMUNICATIONS-ASBLOCK-62904","routed_prefix":"50.2.72.0/22","asn":"62904","country_code":"US","name":"EONIX-COMMUNICATIONS-ASBLOCK-62904","path":["7018","1299","62904"]},"protocols":["22/ssh","80/http","8888/http"],"ipinteger":"-1840709070"} +{"address":"112.250.201.118","ipint":"1895483766","updated_at":"2020-07-12T08:06:29Z","ip":"112.250.201.118","location":{"country_code":"CN","continent":"Asia","city":"Rizhao","timezone":"Asia/Shanghai","province":"Shandong","latitude":35.3944,"longitude":119.5275,"registered_country":"China","registered_country_code":"CN","country":"China"},"autonomous_system":{"description":"CHINA169-BACKBONE CHINA UNICOM China169 Backbone","routed_prefix":"112.224.0.0/11","asn":"4837","country_code":"CN","name":"CHINA169-BACKBONE CHINA UNICOM China169 Backbone","path":["7018","4837"]},"ports":["53"],"protocols":["53/dns"],"ipinteger":"1992948336","version":"0","p53":{"dns":{"lookup":{"answers":[{"name":"c.afekv.com","response":"123.129.192.21","type":"A"},{"name":"c.afekv.com","response":"192.150.186.1","type":"A"}],"errors":false,"open_resolver":true,"questions":[{"name":"c.afekv.com","type":"A"}],"resolves_correctly":true,"support":true,"timestamp":"2020-07-12T08:06:29Z"}}},"tags":["dns"]} +{"address":"46.208.59.25","ipint":"785398553","updated_at":"2020-07-15T10:40:59Z","p7547":{"cwmp":{"get":{"headers":{"content_length":"0","www_authenticate":"Digest realm=\"IgdAuthentication\", domain=\"/\", nonce=\"MTcyZTNkYTg6Nzg3ZDVlNzg6NjY2NmEzNzA=\", qop=\"auth\", algorithm=MD5, opaque=\"5ccc09c403ebaf9f0171e9517f40e41\""},"status_code":"401","status_line":"401 Unauthorized","timestamp":"2020-07-15T10:40:59Z"}}},"ip":"46.208.59.25","location":{"country_code":"GB","continent":"Europe","city":"Wennington","postal_code":"LA2","timezone":"Europe/London","province":"England","latitude":54.0795,"longitude":-2.7272,"registered_country":"United Kingdom","registered_country_code":"GB","country":"United Kingdom"},"autonomous_system":{"description":"PLUSNET UK Internet Service Provider","routed_prefix":"46.208.0.0/16","asn":"6871","country_code":"GB","name":"PLUSNET UK Internet Service Provider","path":["11164","5400","2856","6871"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"423350318","version":"0","tags":["cwmp"]} +{"address":"190.212.18.38","ipint":"3201569318","updated_at":"2020-07-15T08:32:34Z","p7547":{"cwmp":{"get":{"headers":{"connection":"close","content_length":"0","content_type":"text/xml; charset=\"utf-8\"","www_authenticate":"Digest realm=\"cpe@zte.com\", qop=\"auth\", nonce=\"00faf1260388ca0a538614bc48e8ed7b\", opaque=\"T3BhcXVlIHN0cmluZyBmb3IgQUNTIEF1dGhlbnRpY2F0aW9u\", Algorithm=\"MD5\""},"status_code":"401","status_line":"401 Unauthorized","timestamp":"2020-07-15T08:32:34Z"}}},"ip":"190.212.18.38","location":{"country_code":"NI","continent":"North America","city":"Managua","timezone":"America/Managua","province":"Departamento de Managua","latitude":12.1518,"longitude":-86.2711,"registered_country":"Nicaragua","registered_country_code":"NI","country":"Nicaragua"},"autonomous_system":{"description":"Telgua","routed_prefix":"190.212.0.0/18","asn":"14754","country_code":"GT","name":"Telgua","path":["7018","6453","14754"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"638768318","version":"0","tags":["cwmp"]} +{"address":"49.235.41.193","ip":"49.235.41.193","p80":{"http":{"get":{"body":"\n\n\n\n没有找到站点\n\n\n\n\n\t
      \n\t\t
      没有找到站点
      \n\t\t
      \n\t\t\t

      您的请求在Web服务器中没有找到对应的站点!

      \n\t\t\t

      可能原因:

      \n\t\t\t
        \n\t\t\t\t
      1. 您没有将此域名或IP绑定到对应站点!
      2. \n\t\t\t\t
      3. 配置文件未生效!
      4. \n\t\t\t
      \n\t\t\t

      如何解决:

      \n\t\t\t
        \n\t\t\t\t
      1. 检查是否已经绑定到对应站点,若确认已绑定,请尝试重载Web服务;
      2. \n\t\t\t\t
      3. 检查端口是否正确;
      4. \n\t\t\t\t
      5. 若您使用了CDN产品,请尝试清除CDN缓存;
      6. \n\t\t\t\t
      7. 普通网站访客,请联系网站管理员;
      8. \n\t\t\t
      \n\t\t
      \n\t
      \n\n\n","body_sha256":"cdf9d8eee8c4fe967fac3aa9218a7227647ae7aaaa4221c688e1aab7a9180f69","headers":{"connection":"keep-alive","content_type":"text/html","last_modified":"Wed, 26 Apr 2017 08:03:47 GMT","server":"nginx","unknown":[{"key":"etag","value":"W/\"59005463-52e\""},{"key":"date","value":"Tue, 07 Jul 2020 15:17:07 GMT"}],"vary":"Accept-Encoding"},"metadata":{"description":"nginx","product":"nginx"},"status_code":"200","status_line":"200 OK","title":"没有找到站点","timestamp":"2020-07-07T15:17:06Z"}}},"ports":["80","21","22","8888"],"version":"0","p21":{"ftp":{"banner":{"banner":"220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------\r\n220-You are user number 1 of 50 allowed.\r\n220-Local time is now 19:23. Server port: 21.\r\n220-This is a private system - No anonymous login\r\n220-IPv6 connections are also welcome on this server.\r\n220 You will be disconnected after 15 minutes of inactivity.","metadata":{"description":"Pure-FTPd","product":"Pure-FTPd"},"timestamp":"2020-07-13T11:23:57Z"}}},"tags":["ftp","http","ssh"],"p22":{"ssh":{"v2":{"banner":{"raw":"SSH-2.0-OpenSSH_5.3","software":"OpenSSH_5.3","version":"2.0"},"key_exchange":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqsqmj//////////w=="}}},"metadata":{"description":"OpenSSH 5.3","product":"OpenSSH","version":"5.3"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ssh-rsa","kex_algorithm":"diffie-hellman-group14-sha1","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"fingerprint_sha256":"0499c4516a371d353c1f2f8589a58e01efbd4415dab3b39ccc20235b988d9ee2","key_algorithm":"ssh-rsa","rsa_public_key":{"exponent":"35","length":"2048","modulus":"v9JQR4/G1VIKPt2AJvKy96/mnGIdBZTtR5b/z2cKPACnl+IbYkXR6UuBm+R5t6t9W2ZyXXQc89LFNurqj1cVD6JWAAcDvVPsOYPlxEVIN/20lWQlN8kur+PwsUqrrBxKtoiPSSI8qcSKjbPvdM8a3rl0fm3BNTzZcVGs1fHOGmXhDih6RZv1X1QYsJfbJWsYwG4ztBW8XLLz0suxNFdSUEAhS0+QlyKzv4K0IlSejEVDmt6UwANzsHHwTcwHl9RPXy2EMp2VifP7YspMhfIfIk//HFBByT08v3L4Bwxq5rp6H9BNFNIF5Nwob5rp6lWUy5EFyymoQGJlnpIsXGgfIQ=="}},"support":{"client_to_server":{"ciphers":["aes128-ctr","aes192-ctr","aes256-ctr","arcfour256","arcfour128","aes128-cbc","3des-cbc","blowfish-cbc","cast128-cbc","aes192-cbc","aes256-cbc","arcfour","rijndael-cbc@lysator.liu.se"],"compressions":["none","zlib@openssh.com"],"macs":["hmac-md5","hmac-sha1","umac-64@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-ripemd160","hmac-ripemd160@openssh.com","hmac-sha1-96","hmac-md5-96"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","ssh-dss"],"kex_algorithms":["diffie-hellman-group-exchange-sha256","diffie-hellman-group-exchange-sha1","diffie-hellman-group14-sha1","diffie-hellman-group1-sha1"],"server_to_client":{"ciphers":["aes128-ctr","aes192-ctr","aes256-ctr","arcfour256","arcfour128","aes128-cbc","3des-cbc","blowfish-cbc","cast128-cbc","aes192-cbc","aes256-cbc","arcfour","rijndael-cbc@lysator.liu.se"],"compressions":["none","zlib@openssh.com"],"macs":["hmac-md5","hmac-sha1","umac-64@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-ripemd160","hmac-ripemd160@openssh.com","hmac-sha1-96","hmac-md5-96"]}},"timestamp":"2020-07-14T23:17:01Z"}}},"ipint":"837495233","p8888":{"http":{"get":{"body":"\n\n\n\n \n\n\n\n宝塔Linux面板\n\n\n\n\n\n\n \n
      \n
      \n
      \n
      \n
      宝塔Linux面板
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n

      3次以上登录错误将会出现验证码

      \n 忘记密码>>\n
      \n
      \n
      \n
      宝塔小程序扫码登录
      \n
      \n
      \n
      \n \n 打开\n 宝塔小程序\n
      \n
      \n
      \n 扫一扫登录\n
      \n
      \n
      \n
      \n
      \n
      \n 扫码登录更安全\n \n
      \n
      \n
      \n
      \n\n\n\n\n\n\n\n \n\n\n","body_sha256":"48e6f160646cef0a779b0b928c1d969f3ce299e55c1702d52624195151235ff3","headers":{"content_type":"text/html; charset=utf-8","server":"localhost","unknown":[{"key":"date","value":"Sun, 12 Jul 2020 21:21:18 GMT"}]},"metadata":{"description":"localhost","product":"localhost"},"status_code":"200","status_line":"200 OK","title":"宝塔Linux面板","timestamp":"2020-07-12T21:21:18Z"}}},"updated_at":"2020-07-14T23:17:01Z","location":{"country_code":"CN","continent":"Asia","timezone":"Asia/Shanghai","latitude":34.7725,"longitude":113.7266,"registered_country":"China","registered_country_code":"CN","country":"China"},"autonomous_system":{"description":"CNNIC-TENCENT-NET-AP Shenzhen Tencent Computer Systems Company Limited","routed_prefix":"49.235.32.0/20","asn":"45090","country_code":"CN","name":"CNNIC-TENCENT-NET-AP Shenzhen Tencent Computer Systems Company Limited","path":["11164","4134","4812","4811","45090"]},"protocols":["21/ftp","22/ssh","80/http","8888/http"],"ipinteger":"-1054217423"} +{"address":"72.229.45.143","ipint":"1222978959","updated_at":"2020-07-15T06:46:53Z","p7547":{"cwmp":{"get":{"headers":{"content_length":"0","server":"gSOAP/2.7","www_authenticate":"Digest realm=\"Sagemcom TR-069\", qop=\"auth,auth-int\", nonce=\"5f0ea65dcb051fb0717a\", opaque=\"fd025446\""},"status_code":"401","status_line":"401 Unauthorized","timestamp":"2020-07-15T06:46:53Z"}}},"ip":"72.229.45.143","location":{"country_code":"US","continent":"North America","city":"Queens","postal_code":"11422","timezone":"America/New_York","province":"New York","latitude":40.6636,"longitude":-73.7413,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"TWC-12271-NYC","routed_prefix":"72.229.0.0/17","asn":"12271","country_code":"US","name":"TWC-12271-NYC","path":["11164","7843","12271"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-1892817592","version":"0","tags":["cwmp"]} +{"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_key_id":"05564d6ebe50bae69a45694ef0dd68c658d6bb33","basic_constraints":{"is_ca":true},"subject_alt_name":{"dns_names":["61o4zzj4husaczuu.myfritz.net","fritz.box","www.fritz.box","myfritz.box","www.myfritz.box","fritz.nas","www.fritz.nas"]},"subject_key_id":"05564d6ebe50bae69a45694ef0dd68c658d6bb33"},"fingerprint_md5":"09664d7fa934c27d0634db1334631cc8","fingerprint_sha1":"dae2a7aa4d793ca659e94ccc088003572d91df9d","fingerprint_sha256":"e3db99e7ff8517c244b3655ebdeb240e66f478b040e13955d2072ce0aa05d172","issuer":{"common_name":["61o4zzj4husaczuu.myfritz.net"]},"issuer_dn":"CN=61o4zzj4husaczuu.myfritz.net","names":["www.fritz.nas","61o4zzj4husaczuu.myfritz.net","fritz.box","www.fritz.box","myfritz.box","www.myfritz.box","fritz.nas"],"redacted":false,"serial_number":"12310396536980474400","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"vQUOzQ4Xa335zHIqdbxxQBan4CjSfNEXtarkOakQRvOUeBaSc9HLWPDJuH2FB1HtXprqcgLWlfaS+QGmM8zZ0Br70jmLQLh1YGvv1tAuFKUngKysu/rrZyTFWnsHaTlk+/S4e3bLSyvfapcVqerRsz6A4DN9kbtGhrGop56fyojyqMO6vYvHzrEJJN0M3+pCL+TyehLMTTKeRFO459dZ5gyZhtdoeA1KQ2lJjUJiTLGCIFTqlI8QJsymGIj+JU5eeY/qMOj/3lDHw8L0krDAkjF+NIMdxe2/pOcEf3rAoNBvYUuJMdSII53XogSo6QGuGvQPetoCuGHFxqdUlSdcig=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"71376d58df28697958e2bc4776f90ac381e0a7a65d401019fa5326bacb98f61a","subject":{"common_name":["61o4zzj4husaczuu.myfritz.net"]},"subject_dn":"CN=61o4zzj4husaczuu.myfritz.net","subject_key_info":{"fingerprint_sha256":"78cbabe74fa1d5354a8d837fad92c076a02cbc2890f1f0c121d883c29b161af7","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1pBpn8QkCDLQ5NC8xzPTedDW2vXiy/dT2hcTHO4MluVPd9lIMVTJ9xVW5/X2roJkCprztV8QuI6gUfxrjM8uMoP72tcwv2i6nMdn4uT6aUMUQlXDglf1ArE2cv3SN8YkG83ChKXM3n22pn+mHrbXgjciunSJLGHcYf8QcughQqqlOY2oDkuQPi2cIy2rvqZ5CghB5gkNoQkszpdxsPAJlVykre6+MVL+udjIZwIMnkXB4T7RqsDq8wK8oeJ5VdGXgYnZJ4EdwJ5Taj7Bhzx9pserWfJkuqdyM4oGUvKWmunvclSAaMI96rJxaasn6KlUg5GUYKjl8uD92HV0B70cTw=="}},"tbs_fingerprint":"1f32283f8470cab69d50b44228c8f5432c3e5fc55a65e375d1ae4495951feddc","tbs_noct_fingerprint":"1f32283f8470cab69d50b44228c8f5432c3e5fc55a65e375d1ae4495951feddc","validation_level":"unknown","validity":{"end":"2038-01-15T17:29:35Z","length":"568857600","start":"2020-01-06T17:29:35Z"},"version":"3"}},"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"160","lifetime_hint":"300"},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2","timestamp":"2020-07-09T17:13:28Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T12:01:05Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T06:59:33Z"}}},"address":"92.116.213.153","ipint":"1551160729","updated_at":"2020-07-09T17:13:28Z","ip":"92.116.213.153","location":{"country_code":"DE","continent":"Europe","city":"Dresden","postal_code":"01069","timezone":"Europe/Berlin","province":"Saxony","latitude":51.043,"longitude":13.7373,"registered_country":"Germany","registered_country_code":"DE","country":"Germany"},"autonomous_system":{"description":"VERSATEL","routed_prefix":"92.116.192.0/19","asn":"8881","country_code":"DE","name":"VERSATEL","path":["7018","1299","8881","8881"]},"ports":["443"],"protocols":["443/https"],"ipinteger":"-1714064292","version":"0","tags":["https"]} +{"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.sca1b.amazontrust.com/sca1b.crt"],"ocsp_urls":["http://ocsp.sca1b.amazontrust.com"]},"authority_key_id":"59a4660652a07b95923ca394072796745bf93dd0","basic_constraints":{"is_ca":false},"certificate_policies":[{"id":"2.16.840.1.114412.1.2"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.sca1b.amazontrust.com/sca1b.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"pLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BA=","signature":"BAMARzBFAiATCLeoNDnBKL7ww4y+VrhKSNauVtxIvQYS4uuYgVVIVgIhAJaKaB2rl7DUZD8tNruZYNcgECVUGd5kwv+P83WDXOCB","timestamp":"1569629848","version":"0"},{"log_id":"h3W/51l8+IxDmV+9827/Vo1HVjb/SrVgwbTq/16ggw8=","signature":"BAMARzBFAiEAuM99fhGydibuC9z/gbRh4VrVAXza6hhoisFkEu8jUMICIDpPCXapdhIZyHSKzQxIsNVJLY4Pojjbo1JXUB48UtEH","timestamp":"1569629848","version":"0"}],"subject_alt_name":{"dns_names":["*.ospreystaging.com"]},"subject_key_id":"df428eb814603d8061e3f5f7e132dfc0f13a0cdd"},"fingerprint_md5":"0ae49d1d5f43a6f8863997a695be9982","fingerprint_sha1":"5ac3b79b45ca55a7eb0a4e2ed9170c52fa0adca7","fingerprint_sha256":"af8f09c258c7ae874e80c6be22f06e4b03e032b7619a14b0d12adac496f48982","issuer":{"common_name":["Amazon"],"country":["US"],"organization":["Amazon"],"organizational_unit":["Server CA 1B"]},"issuer_dn":"C=US, O=Amazon, OU=Server CA 1B, CN=Amazon","names":["*.ospreystaging.com"],"redacted":false,"serial_number":"12504502048915893218960753310200048301","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"Dzi5EaRL0h/L9wiy3TQE0RqwPRTkYEGteyjVE2B+6c1pbOQme97tPRiCzUjZvnG/o0SIsDjVUz/13fE5AeyJaDbcpHH75c4jKymi1ENC3oxTbtbPpjnJ7BlzQRtspHq1z6CQhWs2nZ8a5ipN2ol/pRBOFCJQoVm31BpuVFb1+BnGIqbLvmmOWAmCoq2RmvBjkDrjvYEUpKhkf+bpuinVNM/DAqOfmRUCgoxzcccZN+xTZdCiymShyO3o+hJd42vSgcKnNM0ycpCDi9SPTbRga0t56Ppm6PPIONzp4tQAZ8YsSsA9AYGwfRD/+kmbs7xyQsPIlTR4JQwu8Oa+HNi5Hw=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"01203a57950ecd3992446edb43b9ae8a1965f323f3d59e1ba32e8d0ae2482058","subject":{"common_name":["*.ospreystaging.com"]},"subject_dn":"CN=*.ospreystaging.com","subject_key_info":{"fingerprint_sha256":"1850e713b5d81883c2b34d39a5fddee913b87dc0b26fd135f8a2c3257eede6db","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"ufDvf39ZMIuvunRBTOrxOv/oF9opkU5vk1mkDzIOpDnlmExMj769MM8RQ+AwqOZepGMvYfsflG4cpOKceSYZnmfZdpPHUPzeUfH1shUA+RWW9AjoHCpUI+o1GGi75+VU9lrA0emddjx5JnxuIb6b6oxhb1sOPDUODe87Y+KrHw34CjPNkfa4mcl4XFxwtKfO8xp1ZqapIcX2+6CPnShnriKYAOTbms3xikhiSay0EHzflArYhmF6Yss26mep8VVoPS3dtJfoU31xoj6y8yOiAM/ucJwBlcB+PkkGZ8j1hqXKD9k6oKGAIZZchadjTCg+0zW2AhSHn/6v2wnXDO+Caw=="}},"tbs_fingerprint":"0e904882d273b881606f099cd6a00a60fa839ca2d30a94d10a71baee1adeef24","tbs_noct_fingerprint":"c38d159db87089aac115c323475479a134b59ce4667b38f2c838afd6219b1289","validation_level":"DV","validity":{"end":"2020-10-28T12:00:00Z","length":"34257600","start":"2019-09-28T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.rootca1.amazontrust.com/rootca1.cer"],"ocsp_urls":["http://ocsp.rootca1.amazontrust.com"]},"authority_key_id":"8418cc8534ecbc0c94942e08599cc7b2104e0a08","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.rootca1.amazontrust.com/rootca1.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"59a4660652a07b95923ca394072796745bf93dd0"},"fingerprint_md5":"eb268e55d434febda36a979a44654b6d","fingerprint_sha1":"917e732d330f9a12404f73d8bea36948b929dffc","fingerprint_sha256":"f55f9ffcb83c73453261601c7e044db15a0f034b93c05830f28635ef889cf670","issuer":{"common_name":["Amazon Root CA 1"],"country":["US"],"organization":["Amazon"]},"issuer_dn":"C=US, O=Amazon, CN=Amazon Root CA 1","redacted":false,"serial_number":"144918209630989264145272943054026349679957517","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"hZK+Nbt5z6OBQhzk42NzUzlSNefRrf2umYqsiRIvu+dvmtVOcuogMGH5l7LNpScCRajKdj6YSoOetuZF4PJD9gjebehu2zEHE/AvMQ2TbWE3e1jw/FGYkSgCTwV2t9PwG8LmXtBmhREPLoHGEIEp/iBgSPPy8IQTU2U1FRFrglFAVVdfGLWwIj6t8l6jAePDs/nLQVrmUpG75DaHTy2ppAdoNbqUcs0O6g59V/J5/DfFe2CesuvALZB3DUkQJ6U4rcQSo7SjyEizFQse4uIZ3MR2Usi8ikF4cNltl7NKi3gtXrQPo0xgyuFHy3gtEhexUovKOSy9tS/CMwKWq9qUfw=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"7a3a96e64a895c66676cc71400ed0e3ce9718be9ec5d46edb4f4a52d96a4414d","subject":{"common_name":["Amazon"],"country":["US"],"organization":["Amazon"],"organizational_unit":["Server CA 1B"]},"subject_dn":"C=US, O=Amazon, OU=Server CA 1B, CN=Amazon","subject_key_info":{"fingerprint_sha256":"252333a8e3abb72393d6499abbacca8604faefa84681ccc3e5531d44cc896450","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wk4WZ93OvGrIN1rsOjCwHebREugSKEjM6CnBuW5T1aPrAzkazHeH9gG52XDMz2uN4+MDcYaZbcumlCpOE9anvQTsChY8Cus5scS1WKO2x1Yl7D5SeqjjKRYHuW5Qz/tfMfgdugNKYokDrj5H8g8nkeMUIIX4+umKNfVfnplN52s376RQPkTs+lqFZgecfhdqVfMXijUe7umsw3VOWFV9U2sKa5sUQtflrAGJs+qj/s/AKwyEwthTFctn8NCIyjrRF3P1X5rUxXIefgHxmDBjKqryei3F4gIahuUyPg69EbTPPJPvF1AQnkPCBirgDWi+04iLSmWMStTDLkybVfSG5Q=="}},"tbs_fingerprint":"69705fe01ba047449263e6c7da7742c31b60ff17bf90f6c4b916fd2f52aab9cc","tbs_noct_fingerprint":"69705fe01ba047449263e6c7da7742c31b60ff17bf90f6c4b916fd2f52aab9cc","validation_level":"DV","validity":{"end":"2025-10-19T00:00:00Z","length":"315360000","start":"2015-10-22T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.rootg2.amazontrust.com/rootg2.cer"],"ocsp_urls":["http://ocsp.rootg2.amazontrust.com"]},"authority_key_id":"9c5f00dfaa01d7302b3888a2b86d4a9cf2119183","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.rootg2.amazontrust.com/rootg2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"8418cc8534ecbc0c94942e08599cc7b2104e0a08"},"fingerprint_md5":"e865a22aae524d26869af0448d6fd896","fingerprint_sha1":"06b25927c42a721631c1efd9431e648fa62e1e39","fingerprint_sha256":"87dcd4dc74640a322cd205552506d1be64f12596258096544986b4850bc72706","issuer":{"common_name":["Starfield Services Root Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["Starfield Technologies, Inc."],"province":["Arizona"]},"issuer_dn":"C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Services Root Certificate Authority - G2","redacted":false,"serial_number":"144918191876577076464031512351042010504348870","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"YjdCXLwQtT6LLOkMm2xF4gcAevnFWAu5CIw+7bMlPLVvUOTNNWqnkzSWMiGpSESrnO09tKpzbeR/FoCJbM8oAxiDR3mjEH4wW6w7sGDgd9QIpuEdfF7Au/maeyKdpwAJfqxGF4PcnCZXmTA5YpaP7dreqsXMGz7KQ2hsVxa81Q4gLv7/wmpdLqBKbRRYh5TmOTFffHPLkIhqhBGWJ6bt2YFGpn6jcgAKUj6DiAdjd4lpFw85hdKrCEVN0FE6/V1dN2RMfjCyVSRCnTawXZwXgWHxyvkQAiSr6w10kY17RSlQOYiypok1JR4UakcjMS9cmvqtmg5iUaQqqcT5NJ0hGA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"064778d61d47af9b3bf3cbd1dabc44c6575ab14d0be5b08461fc6ebeac97db18","subject":{"common_name":["Amazon Root CA 1"],"country":["US"],"organization":["Amazon"]},"subject_dn":"C=US, O=Amazon, CN=Amazon Root CA 1","subject_key_info":{"fingerprint_sha256":"fbe3018031f9586bcbf41727e417b7d1c45c2f47f93be372a17b96b50757d5a2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sniAccp41eNxr0eAUHR9btjXiHb0mWj3WCFg+XSEAS+sAi2G06BDek6ypNA2ugG+jdtIyAcXNkz07ogjxz7rN/W1GfhJaLDe17l2OB1hnqT+gjal5UpW5EXh+f20Fvp02pybNTkv+rAgUAZsetCAsqb5r+xHGY9QOAfcooc5WPi61an5SGcwlu6UeF5viaNRwDCGZqFFZrpU66PDkflI3P/R6DAtfS10cDXXiCT3nsRZbrtzhxfyMkYouEP6tx2qyrTynyQOLUv3cVxeaf/qlQLLOIquUDhv2/stYhvFxx5U4XfgZ8gPnIcj1j9AIH8ggMSATD47JCaOBK5smsiqDQ=="}},"tbs_fingerprint":"c95f7b20f6fcd39fd3a07a2e44252423b634fdbe35e1e045d964deea626115cb","tbs_noct_fingerprint":"c95f7b20f6fcd39fd3a07a2e44252423b634fdbe35e1e045d964deea626115cb","validation_level":"unknown","validity":{"end":"2037-12-31T01:00:00Z","length":"713278800","start":"2015-05-25T12:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://x.ss2.us/x.cer"],"ocsp_urls":["http://o.ss2.us/"]},"authority_key_id":"bf5fb7d1cedd1f86f45b55acdcd710c20ea988e7","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://s.ss2.us/r.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"9c5f00dfaa01d7302b3888a2b86d4a9cf2119183"},"fingerprint_md5":"c6150925cfea5941ddc7ff2a0a506692","fingerprint_sha1":"9e99a48a9960b14926bb7f3b02e22da2b0ab7280","fingerprint_sha256":"28689b30e4c306aab53b027b29e36ad6dd1dcf4b953994482ca84bdc1ecac996","issuer":{"country":["US"],"organization":["Starfield Technologies, Inc."],"organizational_unit":["Starfield Class 2 Certification Authority"]},"issuer_dn":"C=US, O=Starfield Technologies, Inc., OU=Starfield Class 2 Certification Authority","redacted":false,"serial_number":"12037640545166866303","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"Ix3jilfKfekXeUzxHlX9zFNuPkcP38ZV8rIENu2AH1PEXTQoa77HVfxn6ss/f5CyM80bWBCCAvj4L/UTYNQFzvGBCMHdp3WXTxi5bd73k5EIun5ALO3B6rt2njMGdx0NCH9T3Rtkq4In8WnVTV6u9KHDdadYRC3yPHCYrLpptpV3fw8xXiz8oIc6R2nweV/0FFSklV4ReBJgJ86fwnf/I1N3Xbr/6lnn28+vkpbvJJo1EHqckcYOfZn2Pxnf9XJU4RWpB1l7g79SLkaMsgBkdhxI09h56G5WzK4sA5DXGTiZ5MoJGVv/B5awqH80Sd9WqfewX+0z7YxHtzADXfQDjA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"49d851948bc94134d7b0d7db70db8a471a832fb089a6e2c49c1f41b22d2044b5","subject":{"common_name":["Starfield Services Root Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["Starfield Technologies, Inc."],"province":["Arizona"]},"subject_dn":"C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Services Root Certificate Authority - G2","subject_key_info":{"fingerprint_sha256":"2b071c59a0a0ae76b0eadb2bad23bad4580b69c3601b630c2eaf0613afa83f92","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1Qw6xCr5TuL1vhmXX46IU7EfP8vPnyATbSk6yA99PPdrdjhj2TZgqJteXACAsi9Zf/aH+SVDhudpG1KakOFx49gtDU5v9shJ2bbzGlauK7Z0FOvP+ybjGrodli5qO1iUiUdW/yWgk3BTg9qEdBTDZ54EaDrfjkBaHUpOz0ORO+dW1gBwy1Lue32uOue8MflF9sJgzxNZAiuAzDRH37nekGVtAs8skaam596FGEl8Zk6jOm2pte40LroNA7gz30frsWuNJdmbzoHRRUYylnCH3gIOSUOFtmxzu2TqYUGsydRU34cvxyKyJsyfWVRon/y+Ki/EVRx1QGAXhQJVOYt/BQ=="}},"tbs_fingerprint":"8408d5e5010ab8da67eb33a7d79ace944dd0ac103ae6ead3ff30dec571066b03","tbs_noct_fingerprint":"8408d5e5010ab8da67eb33a7d79ace944dd0ac103ae6ead3ff30dec571066b03","validation_level":"unknown","validity":{"end":"2034-06-28T17:39:16Z","length":"783279556","start":"2009-09-02T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T20:17:01Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T03:00:30Z"},"get":{"headers":{"connection":"keep-alive","content_length":"0"},"status_code":"503","status_line":"503 Service Unavailable: Back-end server is at capacity","timestamp":"2020-07-14T05:30:35Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T05:28:43Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T03:02:08Z"},"dhe":{"support":false,"timestamp":"2020-07-12T08:58:17Z"}}},"address":"35.163.100.9","ipint":"597910537","updated_at":"2020-07-14T05:30:35Z","ip":"35.163.100.9","location":{"country_code":"US","continent":"North America","city":"Boardman","postal_code":"97818","timezone":"America/Los_Angeles","province":"Oregon","latitude":45.8491,"longitude":-119.7143,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AMAZON-02","routed_prefix":"35.160.0.0/13","asn":"16509","country_code":"US","name":"AMAZON-02","path":["11537","16509"]},"ports":["443"],"protocols":["443/https"],"ipinteger":"157590307","version":"0","tags":["http","https"]} +{"address":"24.154.192.229","p8080":{"http":{"get":{"body":"\n\t\n\t\n\tWeb Viewer\n\t\n\t\n\t
      \n\t\n\t","body_sha256":"5edb029dfa1c33edec3a0b7002c0e31ee1a1244335f291c4a859973aa1cd23ca","headers":{"accept_ranges":"bytes","content_length":"501","content_type":"text/html","last_modified":"Mon, 20 Jan 2020 19:50:55 GMT","server":"lighttpd","unknown":[{"key":"date","value":"Fri, 10 Jul 2020 13:09:20 GMT"},{"key":"etag","value":"\"3877501194\""}]},"metadata":{"description":"lighttpd","product":"lighttpd"},"status_code":"200","status_line":"200 OK","title":"Web Viewer","timestamp":"2020-07-10T13:09:21Z"}}},"ip":"24.154.192.229","p80":{"http":{"get":{"body":"\n\t\n\t\n\tWeb Viewer\n\t\n\t\n\t
      \n\t\n\t","body_sha256":"6889414a88d60d5ae5b4cd2a5daf679406138446bbbf54aed2ad86385ae26251","headers":{"accept_ranges":"bytes","content_length":"501","content_type":"text/html","last_modified":"Mon, 20 Jan 2020 19:51:49 GMT","server":"lighttpd","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 04:46:47 GMT"},{"key":"etag","value":"\"3608726950\""}]},"metadata":{"description":"lighttpd","product":"lighttpd"},"status_code":"200","status_line":"200 OK","title":"Web Viewer","timestamp":"2020-07-14T04:46:33Z"}}},"ports":["80","8080"],"version":"0","tags":["http"],"ipint":"412795109","updated_at":"2020-07-14T04:46:33Z","location":{"country_code":"US","continent":"North America","city":"Meadville","postal_code":"16335","timezone":"America/New_York","province":"Pennsylvania","latitude":41.6323,"longitude":-80.1472,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"ACS-INTERNET","routed_prefix":"24.154.192.0/19","asn":"27364","country_code":"US","name":"ACS-INTERNET","path":["7018","1299","27364"]},"protocols":["80/http","8080/http"],"ipinteger":"-440362472"} +{"address":"104.72.98.234","ip":"104.72.98.234","p80":{"http":{"get":{"body":"\nInvalid URL\n\n

      Invalid URL

      \nThe requested URL \"[no URL]\", is invalid.

      \nReference #9.578c1bb8.1594710425.283f680e\n\n","body_sha256":"f44ce0fbd7b67e638f2ed8894b44d9df4687288ec4333909f2e4a01cd1416daf","headers":{"connection":"close","content_length":"209","content_type":"text/html","expires":"Tue, 14 Jul 2020 07:07:05 GMT","server":"AkamaiGHost","unknown":[{"key":"mime_version","value":"1.0"},{"key":"date","value":"Tue, 14 Jul 2020 07:07:05 GMT"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-14T07:07:05Z"}}},"ports":["80","443"],"version":"0","tags":["akamai","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.comodoca.com/ComodoJapanRSADVCA.crt"],"ocsp_urls":["http://ocsp.comodoca.com"]},"authority_key_id":"219101cc881fb3e62e43f47cf130898b416c1d4a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://secure.comodo.com/CPS"],"id":"1.3.6.1.4.1.6449.1.2.2.61"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.comodoca.com/ComodoJapanRSADVCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/cs=","signature":"BAMARjBEAiAgCGvEuhppdppkqNeMPPaIp2q1XgyolAKbuga5KEZpkAIgeSmwBxH6aSrIUU7gnPDxo4ZTCOf7v5G5dM/6u8xlkNs=","timestamp":"1536114640","version":"0"},{"log_id":"Xqdz+d9WwOe1Nkh90EngMnqRmgyEoRIShBh1loFxRVg=","signature":"BAMARzBFAiB7HBGr+JrplPgyGLVMPvUD/JrxMFLBD4lTAkQZoimZ/wIhALPU5wTFmoUoHfMIdGDgYkWqfWy1u37CSAYsYDKrCQAl","timestamp":"1536114640","version":"0"},{"log_id":"VYHUwhaQNgFK6gubVzxT8MDkOHhwJQgXL6OqHQcT0ww=","signature":"BAMARzBFAiACQaNgTQpTRzpsDVCq/yD9rEO8L4KnvShUO3S58BPE+AIhAPamSNj3kb4KHLtlZY8AXTj+FAJEY0or8u44lbmUDEDL","timestamp":"1536114640","version":"0"}],"subject_alt_name":{"dns_names":["secure.api.q2-np.ac.playstation.net","www.secure.api.q2-np.ac.playstation.net"]},"subject_key_id":"0b4b76b74247d62e688527d55138332f20547599"},"fingerprint_md5":"92791861611d608e8647c0834e4b2194","fingerprint_sha1":"4e17976bd5700a5bba3a24930b3fe8f431cb15e6","fingerprint_sha256":"9d26c3b28538be8c28be70d2c479d85c25e362251da250ab9fa93790cda284ce","issuer":{"common_name":["Comodo Japan RSA DV CA"],"country":["JP"],"locality":["Chiyoda-ku"],"organization":["Comodo Japan, Inc."],"province":["Tokyo"]},"issuer_dn":"C=JP, ST=Tokyo, L=Chiyoda-ku, O=Comodo Japan, Inc., CN=Comodo Japan RSA DV CA","names":["secure.api.q2-np.ac.playstation.net","www.secure.api.q2-np.ac.playstation.net"],"redacted":false,"serial_number":"4099366757564496471500753550022862962","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"UHZE002OVYL0PsZ843gn4N2qMdvOignKBsI/f2kCnIpiF2GDGCUXIaNANzd358RjZZy3IA6zA7S9iaMjKdpI8ZgSb3eoqyQ/LfokKLeA8dMZCggwmWeg9Wpw+a3HKINVO3ploWgEaBO9ngzCy/F6lkcTMhbhzoKhwA6FjylYjy/ruJeICP2olomM0BY/CHc866l5ZqdqTEYk7wXFNUmZBBLtoQTBS8M2nZpsXV1smLZffYtpUQU9LhyPV6OgxjusmOvNP42MpYLB2cTh+AeZTjpLLT1eRANgw6fi0eOSUHCs0PGTickoCwkQ0hE9iqD1m5s3ahhMMic9Y4R/R/BdjA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"0823692196c8824a42d6867dc0a9838f1af49dc947b9615a37a0150f2b8be497","subject":{"common_name":["secure.api.q2-np.ac.playstation.net"],"organizational_unit":["Domain Control Validated","Hosted by Comodo Japan, Inc.","PositiveSSL"]},"subject_dn":"OU=Domain Control Validated, OU=Hosted by Comodo Japan, Inc., OU=PositiveSSL, CN=secure.api.q2-np.ac.playstation.net","subject_key_info":{"fingerprint_sha256":"376b065113e640cee1ff656d3197093a094d85f768f60bce493ea41d2b2e5505","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wizocQZdkqkUWP2UpZ82dBkOvNLqCUG44BuL/AO0K1qXcU+5Kd5awN4sRqn8hmd92NfkgQB8ur0G1GsM8PtGaG3jmhFiG0RDmx0puwJ8qPKUfq2tBTxSqyBM+SkLtjglp7IiN8dAOxVW4BzeSESQFH55EF6nl2EZ62HEXX8Ov/8B7M4bQQYzmQSm4QppmjpLALwnDv4/GDbysNhuoO6k4myg8jzBJSWgXyws7K1cwPRwVlCEPZ+TCu9Fwyhotw+WNWs6FjK/No4rIu7ffrg0jldVVHFeaGrkAmr8jW7BB/TlqJF0KwJgnCIPmjreR+YMHkoKOGdYfqRYpZO6yft6Iw=="}},"tbs_fingerprint":"ef17df7333a4864ca16440857040893f19701842a244e36f58159af503a65e4d","tbs_noct_fingerprint":"622ff5abacdb25a56e33e4998ff3c1ed8646ad7f096c13a7da1d8d73c1f375b2","validation_level":"DV","validity":{"end":"2020-12-03T23:59:59Z","length":"70934399","start":"2018-09-05T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.comodoca.com"]},"authority_key_id":"a0110a233e96f107ece2af29ef82a57fd030a4b4","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"1.3.6.1.4.1.6449.1.2.2.61"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.comodoca.com/AAACertificateServices.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"219101cc881fb3e62e43f47cf130898b416c1d4a"},"fingerprint_md5":"0ee93444dcd4cd2e650ceabcc21a2fd0","fingerprint_sha1":"1fd3162b47663dc1bee0a6b1bf710585971e3af8","fingerprint_sha256":"38a7525022c9658caafc6060764fd51c6a5c5bef232d3e6c7e48af07a098df1e","issuer":{"common_name":["AAA Certificate Services"],"country":["GB"],"locality":["Salford"],"organization":["Comodo CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services","redacted":false,"serial_number":"118558298467631452769222351567230513713","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"BKJTfzqij1n88H00U3QtTiKbOVUKCZ1UA+oQjpHH0dZ0BpkKXvegp0DcW37uUrM4xgWiJrSThLeS+tZBtuIycEDb0MmABlsQGBw+vgqMwUlzJ9quvI+n0MZQ+uKJu+E15w92eLJF+87j22HIXr0PwRyhRQJIerySfdaac/1nxUpXVt2lVqS3AdwmamQqZkYiKait3Q1u0bnuJLf8v8KCdXolpAte/mwnqTfVojo/DxhXNbfLcqwGc6vPtiF3iKWSTCBj/PuklmXVAcURciLjsTMloUpcfjhWA4zqPsELHXhfbZTymIqie/xuB1YWndJlpYddKZ9CGY5VsIYehErNrA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"a522afa1083bc1e7c19a7e3c9fd001c2ca8d83f8bccee3b896f104556674a69d","subject":{"common_name":["Comodo Japan RSA DV CA"],"country":["JP"],"locality":["Chiyoda-ku"],"organization":["Comodo Japan, Inc."],"province":["Tokyo"]},"subject_dn":"C=JP, ST=Tokyo, L=Chiyoda-ku, O=Comodo Japan, Inc., CN=Comodo Japan RSA DV CA","subject_key_info":{"fingerprint_sha256":"a062371bda16f4fd07e878d112723eb5e2c184aff97c2d57a304ca919f556571","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"hWWd2Sm1+bS4TwW6LZabH+uxmi9mWr65uneIosReBzo3VnxiHn/brBQ50P/S2X8BVLwUd2X7afSzg4BLtmOgFGrCMu9T+LDaULSaKT3Olsb1jRdezguHzQ6XsRUu3DSZJjwk0lGi7MvL1D5tBZYs2vq24E/FRBZKtuUDiF21+0n9gg69doODr/Ty6hfxb5gZQ/mfHbY3Fkg2nxEbIEh2lSzh+Qw9dxjrD887usO9/h33YBr0/i4KSbAHbeZfXYjEvZzX2mGTfFBqIvEqtO8wzaSjOxFfjKkaJksF2y063DiBsSwn44m6+4JxkI9BsmojUdoWsFR1VJKqoBl7yaEsCQ=="}},"tbs_fingerprint":"ca3376f781acf3941c7d43930a9260cf1068e2f84120c0327d9b022ccfa8ec0b","tbs_noct_fingerprint":"ca3376f781acf3941c7d43930a9260cf1068e2f84120c0327d9b022ccfa8ec0b","validation_level":"DV","validity":{"end":"2028-06-13T23:59:59Z","length":"315619199","start":"2018-06-14T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"160","lifetime_hint":"7300"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T17:42:52Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T02:56:14Z"},"get":{"body":"\nInvalid URL\n\n

      Invalid URL

      \nThe requested URL \"[no URL]\", is invalid.

      \nReference #9.578c1bb8.1594701189.274b793b\n\n","body_sha256":"55f781a9f89e18512196052015822d4ab471e2056de889c12cefc3bc063b454e","headers":{"connection":"close","content_length":"209","content_type":"text/html","expires":"Tue, 14 Jul 2020 04:33:09 GMT","server":"AkamaiGHost","unknown":[{"key":"mime_version","value":"1.0"},{"key":"date","value":"Tue, 14 Jul 2020 04:33:09 GMT"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-14T04:33:08Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T12:36:49Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T03:38:56Z"},"dhe":{"support":false,"timestamp":"2020-07-12T03:44:39Z"}}},"ipint":"1749574378","updated_at":"2020-07-14T07:07:05Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AKAMAI-AS","routed_prefix":"104.72.96.0/20","asn":"16625","country_code":"US","name":"AKAMAI-AS","path":["11164","6461","20940","20940","16625"]},"protocols":["443/https","80/http"],"ipinteger":"-362657688"} +{"address":"212.62.112.114","ipint":"3560861810","updated_at":"2020-07-15T11:51:39Z","p7547":{"cwmp":{"get":{"headers":{"connection":"Keep-Alive","content_length":"0","www_authenticate":"Digest realm=\"HuaweiHomeGateway\",nonce=\"b0c4188c556ff1dfadd089e5d00394be\", qop=\"auth\", algorithm=\"MD5\""},"status_code":"401","status_line":"401 Unauthorized","timestamp":"2020-07-15T11:51:39Z"}}},"ip":"212.62.112.114","location":{"country_code":"SA","continent":"Asia","city":"Jeddah","timezone":"Asia/Riyadh","province":"Mecca Region","latitude":21.5168,"longitude":39.2192,"registered_country":"Saudi Arabia","registered_country_code":"SA","country":"Saudi Arabia"},"autonomous_system":{"description":"MTC-KSA-AS","routed_prefix":"212.62.112.0/22","asn":"43766","country_code":"SA","name":"MTC-KSA-AS","path":["7018","3356","59605","43766"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"1919958740","version":"0","tags":["cwmp"]} +{"address":"194.39.44.240","ip":"194.39.44.240","p80":{"http":{"get":{"body":"\r\n\r\n\r\n\r\n\r\nDocument Moved\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t

      \r\n\t\t
      \r\n\t\t\t
      \r\n\t\t\t
      \r\n\t\t\t\t\r\n\t\t\t
      \r\n\t\t\t
      \r\n\t\t\t\tNetwork Security Appliance\r\n\t\t\t
      \r\n\t\t\t
      \r\n\t\t\t
      \r\n\t\t\t\tPlease be patient as you are being re-directed to a secure login page\r\n\t\t\t
      \r\n\t\t\t
      \r\n\t\t
      \r\n\t
      \r\n\r\n\r\n\r\n","body_sha256":"e6c6b819050980e65e54fe9925861849606fa58b2a7c61c10e33a6a33afdfd2a","headers":{"cache_control":"no-cache","content_security_policy":"default-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: ws: wss: sonicwall.com *.sonicwall.com;","content_type":"text/html; charset=UTF-8;","expires":"-1","server":"SonicWALL","x_content_type_options":"nosniff","x_frame_options":"SAMEORIGIN","x_xss_protection":"1; mode=block"},"metadata":{"description":"SonicWALL","product":"SonicWALL"},"status_code":"200","status_line":"200 OK","title":"Document Moved","timestamp":"2020-07-07T16:39:12Z"}}},"ports":["80","443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"fingerprint_md5":"4228dc220cddd64054307c0381675b77","fingerprint_sha1":"edeb220f4f5bac6cb0da3ba177bcfbe91b0d4681","fingerprint_sha256":"05bb086869767a002b21b54f07f03c6ed0d82e935f6e65f79c799a5aabe7aef9","issuer":{"common_name":["192.168.168.168"],"country":["US"],"locality":["Sunnyvale"],"organization":["HTTPS Management Certificate for SonicWALL (self-signed)"],"organizational_unit":["HTTPS Management Certificate for SonicWALL (self-signed)"],"province":["California"]},"issuer_dn":"C=US, ST=California, L=Sunnyvale, O=HTTPS Management Certificate for SonicWALL (self-signed), OU=HTTPS Management Certificate for SonicWALL (self-signed), CN=192.168.168.168","names":["192.168.168.168"],"redacted":false,"serial_number":"921843183","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"FenF9XMC0mQLuktQGP4GxcX8iwzBlAlbW5u9NPUH6O06w9bm87+iYezIQVoQURykKQDMvSmoS2f5wUGqmFMFO4YHDDjj/kA/c0HLAcHp0JYgSDfTkB3P4q942pkEDOh+KAHXxFfq5E+B6yf3ELv0E2eYAI4kXs+QCkkxyXX7j05f9C4sr5s5t/o0gj3G06Z+39dNc1MJA7PythBAv5dqutv5AmSpWZIc0YfqGE1kAQ8YyOLIz6Wyp9RVGwqUUdocA9SV1e48Vg0OeEbCGNaOWI8hZwqDvrwmQkndKKhuGh7HZjzQEhhu6NI8gU3VinvSltJIwj2p9uU2i0+hbphK8g=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"ad1c386e2d3cb31c18fcba5916262d79506a192fc7347a0451024b30ba1f77b6","subject":{"common_name":["192.168.168.168"],"country":["US"],"locality":["Sunnyvale"],"organization":["HTTPS Management Certificate for SonicWALL (self-signed)"],"organizational_unit":["HTTPS Management Certificate for SonicWALL (self-signed)"],"province":["California"]},"subject_dn":"C=US, ST=California, L=Sunnyvale, O=HTTPS Management Certificate for SonicWALL (self-signed), OU=HTTPS Management Certificate for SonicWALL (self-signed), CN=192.168.168.168","subject_key_info":{"fingerprint_sha256":"c20426c14cfac8071bec5267fdcdc85024b00a902e7819b71543b38fe03fcbf1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"zVMcz0ywQ/PpHk6E9NfsVJnRmmiX8dUFFFtM8Sl4WG8T3kfSFWWrdk6EFUGU5PJIjsMctFSAtlMo5jqj3AuJ4m72UTTWQxA0WAYXQi2QDZ3OlWXKBGVL92zAaw2NR5R4EZHEwMBUvKT4OuKue/x6E2CSloWn02S8BfKQYVdfkiUyisH3piy1tvAHmPgo+Ul3g3lXlZx1qsbHV6+HPvYIExCrxrJJlSWSHI/bL51lvG04S5EjGVxabyq7+1Vn9eaVEHtz3zzFWTJpkFvqt22DtOvR2wc29Upn0W/S/zGAVqvG8oyvWgUspbr82rlVRHL5rxetk2rmgGRy4BWzqlxlIQ=="}},"tbs_fingerprint":"befd4022d03d715d3082537bc3c4b1ae39d9c37b602d305f7c464086e3c6891e","tbs_noct_fingerprint":"d4ccd1af996f28c273497719e293ccf6fac3a3385eda3df774ac30512c2ce335","validation_level":"unknown","validity":{"end":"2038-01-19T03:14:07Z","length":"2147483646","start":"1970-01-01T00:00:01Z"},"version":"3"}},"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"160","lifetime_hint":"300"},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2","timestamp":"2020-07-10T00:36:08Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T09:11:48Z"},"get":{"body":"\r\n\r\n\r\n\r\n\t\r\n\tSonicWall - Authentication\r\n\t\r\n\t\r\n\r\n\r\n\t\r\n\t\r\n\t\r\n\r\n\r\n","body_sha256":"9ecf618dad16585e7787f5586d1150cfc93c5c6461516809708d4486de67de15","headers":{"cache_control":"no-cache","content_security_policy":"default-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: ws: wss: sonicwall.com *.sonicwall.com;","content_type":"text/html; charset=UTF-8;","expires":"-1","server":"SonicWALL","strict_transport_security":"max-age=31536000; includeSubDomains","x_content_type_options":"nosniff","x_frame_options":"SAMEORIGIN","x_xss_protection":"1; mode=block"},"metadata":{"description":"SonicWALL","product":"SonicWALL"},"status_code":"200","status_line":"200 OK","title":"SonicWall - Authentication","timestamp":"2020-07-13T02:31:35Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T02:45:46Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T04:10:32Z"},"dhe":{"support":false,"timestamp":"2020-07-12T11:47:23Z"}}},"ipint":"3257347312","updated_at":"2020-07-14T09:11:48Z","location":{"country_code":"HU","continent":"Europe","city":"Budapest","postal_code":"1031","timezone":"Europe/Budapest","province":"Budapest","latitude":47.4984,"longitude":19.0404,"registered_country":"Hungary","registered_country_code":"HU","country":"Hungary"},"autonomous_system":{"description":"RENDSZERINF","routed_prefix":"194.39.44.0/22","asn":"206892","country_code":"HU","name":"RENDSZERINF","path":["11164","2603","6830","206892"]},"protocols":["443/https","80/http"],"ipinteger":"-265541694"} +{"address":"123.243.244.241","ipint":"2079585521","updated_at":"2020-07-15T09:28:57Z","p7547":{"cwmp":{"get":{"body":"File not found\n","body_sha256":"19b7f2bb710b1e3a6e8e146b1e56e3fedefef4abb88eba19a52ea75197a59259","headers":{"content_length":"15","content_type":"text/plain; charset=ISO-8859-1","server":"tr069 http server","unknown":[{"key":"date","value":"Wed Jul 15 19:28:56 2020"}]},"status_code":"404","status_line":"404 Not Found","timestamp":"2020-07-15T09:28:57Z"}}},"ip":"123.243.244.241","location":{"country_code":"AU","continent":"Oceania","city":"Sydney","postal_code":"2000","timezone":"Australia/Sydney","province":"New South Wales","latitude":-33.8591,"longitude":151.2002,"registered_country":"Australia","registered_country_code":"AU","country":"Australia"},"autonomous_system":{"description":"TPG-INTERNET-AP TPG Telecom Limited","routed_prefix":"123.243.244.0/23","asn":"7545","country_code":"AU","name":"TPG-INTERNET-AP TPG Telecom Limited","path":["6939","7545","7545","7545","7545","7545","7545","7545","7545"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-235605125","version":"0","tags":["cwmp"]} +{"address":"23.210.145.191","ip":"23.210.145.191","p80":{"http":{"get":{"body":"\nInvalid URL\n\n

      Invalid URL

      \nThe requested URL \"[no URL]\", is invalid.

      \nReference #9.17a0d676.1594098047.3deb49cd\n\n","body_sha256":"a1b29831583120ac45d5f3f5bdb464a77f66e751028f74d6baa714e3f36ec903","headers":{"connection":"close","content_length":"209","content_type":"text/html","expires":"Tue, 07 Jul 2020 05:00:47 GMT","server":"AkamaiGHost","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 05:00:47 GMT"},{"key":"mime_version","value":"1.0"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-07T05:00:46Z"}}},"ports":["80","443"],"version":"0","tags":["akamai","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.int-x3.letsencrypt.org/"],"ocsp_urls":["http://ocsp.int-x3.letsencrypt.org"]},"authority_key_id":"a84a6a63047dddbae6d139b7a64565eff3a8eca1","basic_constraints":{"is_ca":false},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"Xqdz+d9WwOe1Nkh90EngMnqRmgyEoRIShBh1loFxRVg=","signature":"BAMASDBGAiEAmfCLO8kioJqSlKcQHbjta0AvriDDMwe6ZjKm9w1cce8CIQCNBGbvL0nxPB0sUhWGIyvncMGWI3ZHgCoQFlgRQJiqwQ==","timestamp":"1588964318","version":"0"},{"log_id":"sh4FzIuizYogTodm+Su5iiUgZ2va+nDnsklTLe+LkF4=","signature":"BAMARzBFAiEAyMDE/VaZ3LvZvim+h3CsY95fyKI4o1CSGyyhimXNiLcCIDw1/b4Rd+lizDtlc22i/26lN4a161Y5273o48wv8HdL","timestamp":"1588964318","version":"0"}],"subject_alt_name":{"dns_names":["im.web.akamaidemo.com","ion.web.akamaidemo.com","personal-improxy.web.akamaidemo.com","personal-perfproxy.web.akamaidemo.com","personal-secproxy.sec.akamaidemo.com"]},"subject_key_id":"e1f3aceeeb82dd1023f58f6ef404fb420594c700"},"fingerprint_md5":"67d47f72dd4a15f32e4fbe9e234c4d56","fingerprint_sha1":"b3ebf251eae1623e64fc568c7fb061a89c1a2596","fingerprint_sha256":"f374e950fd218cc352a0bce09158e5b81b70af0b6ac63af2f099a9cba435a853","issuer":{"common_name":["Let's Encrypt Authority X3"],"country":["US"],"organization":["Let's Encrypt"]},"issuer_dn":"C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3","names":["personal-improxy.web.akamaidemo.com","personal-perfproxy.web.akamaidemo.com","personal-secproxy.sec.akamaidemo.com","im.web.akamaidemo.com","ion.web.akamaidemo.com"],"redacted":false,"serial_number":"367008104525272867428577984229355906590163","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"Jy9kGagF6WTP9YxL1VXdCL3i0A9K/zl4RaI6Ht3VvvsXuBFnvuOPFZqRPXsSSk1Ei4pC0GtOuPysqPSpWEK3iiU9vjQ/Cw3xpzix1zk0C8H3qhnyUxqenCa3c3aSa69hkXnwBoVemhyUp0ulNiyCUCt5WMynMabf0ucx+Ej1tHjNNpMYZbLwxXiuJNVXpJMbOzkZodh5vg6C4womVSZKqNVlrRYFHnTBZEcG526PpCXrMl41VTakdiXLRENpttBrbBzcIEjQyFaFQsEpG0UGCsBwbU1I4fmcoVfJHewx1gWEi7v7lvgZwDh6thVZ6UAgcsWH6Mh4puIsFO1crYqyMg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"7f930646f39feac0464630505f681dc2112aec3e2276e490ddc0f1d5dcecf49d","subject":{"common_name":["im.web.akamaidemo.com"]},"subject_dn":"CN=im.web.akamaidemo.com","subject_key_info":{"fingerprint_sha256":"99d3d71ecf2c2e1f5ce1fc19cd564f4e89c14c6f055657a278aafe42d7b489b8","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"u28AjEulPMq7EDHQhS08xNPhGdRIBfN1Vb9RCSRDHJY3en5UhVd4vFl723ow2Qsi0W7BKxhtoOIgNwfbY+CABXzmyni/SB0kNx3tE8P2emJ4cZFrEduokZCfzQd3zQe+DHrLznJa1qKLvVEFIxKnEldC005wFtj6rYfzz7HgdGRy2BDJB/hrU9S5NBTJQTFAmGTfuJSqVwNqn62Dp76vSGbH6ZSFUvA/hmMPuIYE20Ed10Yoy1oRXG0uWsakkCcm9hb4/SeJEC6ME5wWAXxPdHpQ4Q/gA5qhK0Qmce7UcuOq1wIzLldKHYB5eTNoKe1LBtmw5HKVCNwv3C2dxugHuw=="}},"tbs_fingerprint":"fdaad98fa6990e40912b59b63cb4a5bb44a21b767291834377e54dc7db3afc8e","tbs_noct_fingerprint":"7c5c4a094e570e9ed8f113fef33cfb8bcd99096b245ce610d9ea5f08cfcbd73c","validation_level":"DV","validity":{"end":"2020-08-06T17:58:38Z","length":"7776000","start":"2020-05-08T17:58:38Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://apps.identrust.com/roots/dstrootcax3.p7c"],"ocsp_urls":["http://isrg.trustid.ocsp.identrust.com"]},"authority_key_id":"c4a7b1a47b2c71fadbe14b9075ffc41560858910","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["http://cps.root-x1.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1"}],"crl_distribution_points":["http://crl.identrust.com/DSTROOTCAX3CRL.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"a84a6a63047dddbae6d139b7a64565eff3a8eca1"},"fingerprint_md5":"b15409274f54ad8f023d3b85a5ecec5d","fingerprint_sha1":"e6a3b45b062d509b3382282d196efe97d5956ccb","fingerprint_sha256":"25847d668eb4f04fdd40b12b6b0740c567da7d024308eb6c2c96fe41d9de218d","issuer":{"common_name":["DST Root CA X3"],"organization":["Digital Signature Trust Co."]},"issuer_dn":"O=Digital Signature Trust Co., CN=DST Root CA X3","redacted":false,"serial_number":"13298795840390663119752826058995181320","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJouM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwuX4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlGPfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"78d2913356ad04f8f362019df6cb4f4f8b003be0d2aa0d1cb37d2fd326b09c9e","subject":{"common_name":["Let's Encrypt Authority X3"],"country":["US"],"organization":["Let's Encrypt"]},"subject_dn":"C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3","subject_key_info":{"fingerprint_sha256":"60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"nNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EFq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWAa6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3Dkw=="}},"tbs_fingerprint":"3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838","tbs_noct_fingerprint":"3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838","validation_level":"DV","validity":{"end":"2021-03-17T16:40:46Z","length":"157766400","start":"2016-03-17T16:40:46Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":true,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"160","lifetime_hint":"7300"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-10T06:13:54Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T02:39:37Z"},"get":{"body":"\nInvalid URL\n\n

      Invalid URL

      \nThe requested URL \"[no URL]\", is invalid.

      \nReference #9.17a0d676.1594688772.285b764c\n\n","body_sha256":"a59f697ec94d288d4e66383459784acbf8ac8e43694de804739a3ce763b7f847","headers":{"connection":"close","content_length":"209","content_type":"text/html","expires":"Tue, 14 Jul 2020 01:06:12 GMT","server":"AkamaiGHost","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 01:06:12 GMT"},{"key":"mime_version","value":"1.0"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-14T01:06:11Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T11:00:49Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T11:07:26Z"},"dhe":{"support":false,"timestamp":"2020-07-12T15:49:59Z"}}},"ipint":"399675839","updated_at":"2020-07-14T02:39:37Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AKAMAI-AS","routed_prefix":"23.210.128.0/19","asn":"16625","country_code":"US","name":"AKAMAI-AS","path":["7018","20940","16625"]},"protocols":["443/https","80/http"],"ipinteger":"-1080962537"} +{"metadata":{"os":"Windows"},"address":"58.221.44.33","ip":"58.221.44.33","p80":{"http":{"get":{"body":"\r\nNot Found\r\n\r\n

      Not Found

      \r\n

      HTTP Error 404. The requested resource is not found.

      \r\n\r\n","body_sha256":"ce7127c38e30e92a021ed2bd09287713c6a923db9ffdb43f126e8965d777fbf0","headers":{"content_length":"315","content_type":"text/html; charset=us-ascii","server":"Microsoft-HTTPAPI/2.0","unknown":[{"key":"date","value":"Tue, 30 Jun 2020 16:51:26 GMT"}]},"metadata":{"description":"Microsoft HTTPAPI 2.0","manufacturer":"Microsoft","product":"HTTPAPI","version":"2.0"},"status_code":"404","status_line":"404 Not Found","title":"Not Found","timestamp":"2020-06-30T16:51:30Z"}}},"ports":["80","443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crl.digicert-cn.com/GeoTrustCNRSACAG1.crt"],"ocsp_urls":["http://ocsp.dcocsp.cn"]},"authority_key_id":"919f5e3115ae109fad60c1f7c1ccaa48342f0c26","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.2"},{"id":"2.23.140.1.2.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOM=","signature":"BAMASDBGAiEA/zIRJ3FLXrzPyhzYnIbj4+IwaFxektZzCaNpNGeSq5ICIQC4jLBS72WzJJhdnYgncxwY5fOhCUwUw8ZpNqDqCdvzPg==","timestamp":"1585586053","version":"0"},{"log_id":"RJRlLrDuzq/EQAfYqP4owNrmgr7YyzG1P9MzlrW2gag=","signature":"BAMARzBFAiEAsik7maUyxXP31hsvH4T4aXyy+XnCPTreSrub4EY1SpMCIHp6tzg9QSLzxIsVpaRvo6oGnra5GjhYxZNTR/IeiDs0","timestamp":"1585586053","version":"0"}],"subject_alt_name":{"dns_names":["*.1sucai.com","1sucai.com"]},"subject_key_id":"fa9580c387190f2bebded5751420633c4337eb6e"},"fingerprint_md5":"6f2401a620bc8607be3d6ca8e929bc2b","fingerprint_sha1":"e7d6828ce4685f1a99ea220f2e16a0830a93d5e3","fingerprint_sha256":"d151f55f7df6ce95e974443d1ede67dfb3d8ab91c20dc238cb1449dac760de64","issuer":{"common_name":["GeoTrust CN RSA CA G1"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=GeoTrust CN RSA CA G1","names":["*.1sucai.com","1sucai.com"],"redacted":false,"serial_number":"14685651734811381683269995779686026661","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"T5CnPHlKpX78+QK9cXCp2ABoVzGnEjIRTGf4SRtvbenvUz60a/8BrT7An9xVBb1Qj6dOTDnv4BJue5yIa0iymag5igJomnwzNoy0Y4FPMMeiNj2/fUMdqX3VbUE4SFwG5T9Z/TgY0p328PWlCLQMJ13lURm7coTd9M4opzeRDfsgc3oj5emdveEFHp+F7PeDf9DpJ2LXg9IR5P6CATj8O7u54zMbWUYrMw0R7wUnMsgIc03EM9ngTNZkqMTAtwgCUQdaGwnyeKG0lokVMTQfTbzCtgopm+zDwzk1J2Lw5uF6UaROAKmax+aoFcbIJP4R5dxFyNPTwVNAjxMGrahxSQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"5b6bb78361bffafa9df0687edcdd8194743273fc89af61fd1e27e63314474ac6","subject":{"common_name":["*.1sucai.com"]},"subject_dn":"CN=*.1sucai.com","subject_key_info":{"fingerprint_sha256":"1bc0f956d5c1b7a1f958e571a966a1affa29340f70fd8426fba770ec85d347c2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"mmFXrMIPRY92AAbYDIY9160vUJuULvhH+YjRk9Pg2oizp6AoevfVnm8HumKZUAdV4L3d0lptBIJoaMCxy8V0nRs2lSYPbSvpRh/lJMFwZIHoC/VEgUrf0U+3YMGQHUm0/zDUHWz/Zcz+fwLZhPaoTGk4TgANZqnJDaKOCzY1Z38Rknzn/NyWa6hMAqaUdBcUO7rfkPEYrkefXvSvLq+hWMtlw4dwJI9RgV25yIEaluqnuYjgOoC3BjtXD451St7FPZgZQqN5JSJ4VTSsYuKwxu+wtrv27jqyFwdHrn9gP/DnJkjlR9CWFz+9tga+/uPT+5l6ggYSXUR8dhgXL+l3XQ=="}},"tbs_fingerprint":"fc1df3c2ada0e453a3dd82e374d551a2013ae3750ab8c9cf98d2257390f2b1d9","tbs_noct_fingerprint":"9fb35d9bc46a7979a7680282bc50968cfe57f717d49850d8194cf580c3c6cec2","validation_level":"DV","validity":{"end":"2021-03-31T12:00:00Z","length":"31665600","start":"2020-03-30T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.dcocsp.cn"]},"authority_key_id":"03de503556d14cbb66f0a3e21b1bc397b23dd155","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.5.29.32.0","user_notice":[{"explicit_text":"Any use of this Certificate constitutes acceptance of the Relying Party Agreement located at https://www.digicert.com/rpa-ua"}]}],"crl_distribution_points":["http://crl.digicert-cn.com/DigiCertGlobalRootCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"919f5e3115ae109fad60c1f7c1ccaa48342f0c26"},"fingerprint_md5":"9a750d9778c030a837f2ff222e5ec5da","fingerprint_sha1":"abcb7101356f9e4e7a449988e4300bd03b321f95","fingerprint_sha256":"23ddf08b22373d86158eb9c99fdb5366b19804560531372dd20dce3fb766f56c","issuer":{"common_name":["DigiCert Global Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","redacted":false,"serial_number":"13315337301267391553979468751907515467","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"F+B5evEiu2WLEG/4owN6orG00ltmIsPMkGQYJ3gcjrdfl5LoESUkGfqYj15hWuvuo4tOntaI7TZJ/ViulrP949KNnrzijz1QAanE59uBVIy+j9rTuf/bbSNRYvHNomFA0u6UAJfDBazFh/y3A/yCWSggedRQ1OWGzLKXVnO9ULhsOkjiELpCQkbKdzUw2phIyPy1luFA3Dcd1KZxM7Q1z8n+krZVlzp8VsoGCymbN0dzqMwoba3iWKxcTKxLfA9yDRo1+vU52Xn6bKHcycwrTx/qlNe924vP5BmIiHwhgv5npBaBNn17aOdXyO66ZfUjwZ7txl202dMIHyEV/AYtQA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"02d66cf7d9a5ff2c270560e1095397102184f4b5a1a6d7cbde36015ceda438b1","subject":{"common_name":["GeoTrust CN RSA CA G1"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"subject_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=GeoTrust CN RSA CA G1","subject_key_info":{"fingerprint_sha256":"e07e8e5e7cbb32a24f6c2393a47c92d1f49251e1e4fc8e6729b232b90c277ec0","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sUn6PUp5lUbiPOBChvbeVDw8lQ2FjfW59mKG5TGFhzodJTgvDR/F8Djdr0OkmXvgzcToXVlEE58n51adqLJgPQ/FEhB3jAmKy2LhRp2/PrUhhj+hD8SXGT9fsYUOq5i7EJLIF0e1NUxcLEVK9DYL/uNZkUN8YYoo2hBKInLAN7yKIdtQ5qQsyZeY5NnJYmcV1H9Mflg1OIwoI1Q8cCV4bgiKAbEPIv+BvCt0M2JsMDiVQ2EPTE28+NDwE0qqbkdYO+KtS4d0L7iGmLQYk7fg7eKJFXXpiZZO5UU1uhQsNnT49C1y0mdq2m5ko8bIpfqMKk+/PM/D8SE0OWkR2tgdkw=="}},"tbs_fingerprint":"de4cd9d526e934ec31613b7c5131543a249d86af68ede6e90772d4099ca51625","tbs_noct_fingerprint":"de4cd9d526e934ec31613b7c5131543a249d86af68ede6e90772d4099ca51625","validation_level":"unknown","validity":{"end":"2029-06-20T12:27:58Z","length":"315619200","start":"2019-06-20T12:27:58Z"},"version":"3"}}],"cipher_suite":{"id":"0x002F","name":"TLS_RSA_WITH_AES_128_CBC_SHA"},"ocsp_stapling":true,"session_ticket":{"length":"653","lifetime_hint":"36000"},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-10T00:53:18Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T12:34:59Z"},"ssl_3":{"support":true,"timestamp":"2020-07-15T06:22:22Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T09:24:29Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T11:44:56Z"},"dhe":{"support":false,"timestamp":"2020-07-12T12:06:58Z"}}},"ipint":"987573281","updated_at":"2020-07-15T06:22:22Z","location":{"country_code":"CN","continent":"Asia","timezone":"Asia/Shanghai","latitude":34.7725,"longitude":113.7266,"registered_country":"China","registered_country_code":"CN","country":"China"},"autonomous_system":{"description":"CHINATELECOM-JIANGSU-NANTONG-MAN CHINATELECOM JIANGSU province NANTONG MAN network","routed_prefix":"58.221.44.0/24","asn":"131325","country_code":"CN","name":"CHINATELECOM-JIANGSU-NANTONG-MAN CHINATELECOM JIANGSU province NANTONG MAN network","path":["11164","4134","131325"]},"protocols":["443/https","80/http"],"ipinteger":"556588346"} +{"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://pki.polycom.com/pki/Polycom%20Equipment%20Issuing%20CA%202.crt"]},"authority_key_id":"5b910285bedd0361e3c850bed36bb6b056a3278b","crl_distribution_points":["http://crl.polycom.com/crl/Polycom%20Equipment%20Issuing%20CA%202.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"data_encipherment":true,"digital_signature":true,"key_encipherment":true,"value":"13"},"subject_key_id":"c17a40ab00942023ed970611b7276271b696585f"},"fingerprint_md5":"74db2c6b4ec99c062907a6089f8aa503","fingerprint_sha1":"06798c22ba0e907ffcc4c452033d329d24688c6d","fingerprint_sha256":"f50d437344712693a4c3c141324f19ae517f7345e490c2625b00b4b265055e65","issuer":{"common_name":["Polycom Equipment Issuing CA 2"]},"issuer_dn":"CN=Polycom Equipment Issuing CA 2","redacted":false,"serial_number":"153775785327134476853190","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"gvgc8xUhcWBMy/yHjijdqlhwtKd7UFBMp6Z8Ac4KQMkH9ZID5xiiW5fE+nML4N0RenL1YpR+acWpmOaonxBw6M15AVLICM715P0zMfkEB9H9bVuz6frKJX36QMu3W7P9CpR1yMYeoUhkrJV2oAkfVX/Hc8FkAIIrz87o/HSEz1V73t3qywPaxkF70YOs27bNRA+ompE9C/KTMwPIYKzFcZWBqkJJFpg902wY2QT4F9bUImMC4Pe5hVgHjolsdXeEg2YpZkEFReOFkWIdlOmehE1xvSbY3MpSEI8Em9jKBDVzmdNtWg5VzUEdV3F75qhpz/zIJ+uUauwn3biBpJi3K3Jemhe5wYFkoZC/ZVpTBoXk3LRInJ8s9OS8c/h+hLPcwq1iRRkuKtwFqC7hUQ1R6e46fdouNy/QMUnAaLFmeEw9dQlryZwuMhQk2KLN+55ezM2p+8L9yMBFf9a/Q99rfcM+9+Flb2HDwa2UAik01gLu/o5NP0fCYdLMjeE8KPtXlkB33GWauFvQitGgZWuTNrfZ106TrqWiMg3VUkIz92VW22hJT5Ef+lYRJa4PNxQl7vjZM+BXRDt81Dd2clNItzeI0B2iJQOHtyw2C/hYv84rO6fkJLRJxKEaT2YWv8GSKr9RPWFFO4r3wqKMuKkEm4u/yAUVXmiI3s9vs6m3OWA="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"8772ca9520da26e3be95db03f1e233eb4a2a7af8d892f9b1a4a176580f16081f","subject":{"common_name":["0004F26A342D"],"organization":["Polycom Inc."]},"subject_dn":"O=Polycom Inc., CN=0004F26A342D","subject_key_info":{"fingerprint_sha256":"89fc99ce45fbfbeaecdef9b659def564bdcbc2f6edc7744dde08856a210cb9d2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1VJ3QS+RJ9MXO8uQ+HWDZ/+DCRivMMMjaznt0X4rv7cpw0I9ewN9FgUbEbpqcDw8cY+C+DoF3tl8URyi4j4kwYow6RmwCToKUUvLiKVnS0EFp70JX0Bhk2Vo3JSaLbnRI+DK4HScUj5bUKfBihKKLFx8/EQo9av0GnDB30hxF+VD1wUgkJvet+s6oml2BcXXVFgQsmSsXc+gqGZ7YBeT13+6Y+ZMkEEI8CQqh2xc+If2zoLXCuI2KdWfkDprcp1ZroZ3y3hxpdHRve7xJD72+EI2qnsjPFzhgtsA/thEdKTtc9AjjR6wFYu1u8ZaxkpKGz366vCuYN/cc4lw/ONeow=="}},"tbs_fingerprint":"29b63ce874e8bfd3bcbeff6cbea638513d5aad4a814f249367236e18d28ef955","tbs_noct_fingerprint":"29b63ce874e8bfd3bcbeff6cbea638513d5aad4a814f249367236e18d28ef955","validation_level":"unknown","validity":{"end":"2028-10-31T08:33:41Z","length":"473386200","start":"2013-10-31T08:23:41Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://pki.polycom.com/pki/Polycom%20Equipment%20Policy%20CA.crt"]},"authority_key_id":"4d60aaf591ead067df56cc86dcbb3e997584598d","basic_constraints":{"is_ca":true},"crl_distribution_points":["http://crl.polycom.com/crl/Polycom%20Equipment%20Policy%20CA.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"5b910285bedd0361e3c850bed36bb6b056a3278b"},"fingerprint_md5":"9adf8d64b812ae67ce90367e058e96b4","fingerprint_sha1":"91aa8597d8ef36ef6658f3798189b72dfe5f17f9","fingerprint_sha256":"90b57cff4c681e539e5d131eb5f98d2b48ab9abecc1e9f0ddaf2562ab47af006","issuer":{"common_name":["Polycom Equipment Policy CA"]},"issuer_dn":"CN=Polycom Equipment Policy CA","redacted":false,"serial_number":"75816643938202752647173","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"CAlpjYAK6bKv4UrFRp24sPcVhrN1elOo6X/lhqiZFFtxoZP16AKOu0qTOy6vwaVh7JbOzsR5Pm0J56GN8Gfe6b8swuFXWRmjWwT5S5Tag1cOdBODyNv1Cs9Vw0V17K8G4vnBlzk0eJPVwtIIySk/5HaKqL2UWXsLvgJDOeZDTbTovvBMRIG+4kHjI+Aw00/S09eaS6OmAO4YnEJcoOHFeVJyjT8dg9xrcr52JVYhP69K2EYNaUmuGMQLhRa2mG/MPsrqCsRwbc49jEjyUXe8aycQQLBn9Y9sa2IQw1H8VBX4riGqiB688rc+wnydhRewj+ryL5sibLBQjqIdImwr9XbS0LROq0MeKOVkj0WvsKgqfT98RnS2cc2e8p2BF/dbEQgkLo+hPznfps/Wed/S+9BM+lbIn+JUhXtX57nvib0In2GYuF5/yZO9+f56I/mE9GCnWlXPVDdx3Hzv2CydPC2/g0XELRs/z1NDAXVz0G6YofxWRh1qKQcDZXGZ4hiucP0yUePbUS6FyoEvDXWpVujzLnGBIsWkllyvgrY0rId0XRQrTxBkZmeTQTGQ1ui65IZjdm6juDlrLdlVnZ8OW4Z5b3LVZe7gHRvY0+7cVaARnxtSvj/ZQkIzvGAaJRFTGKLJbYbariRgZL6sX3I/2ue3CV3oTLsZmMxXbYVRw1A="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"49ee3cd88a3441cf42efd239434a1a4f3b81d757103c00f8422759ec7f8b5d7a","subject":{"common_name":["Polycom Equipment Issuing CA 2"]},"subject_dn":"CN=Polycom Equipment Issuing CA 2","subject_key_info":{"fingerprint_sha256":"98625683076a493168eca0a525689bea55e833bfda1b2aa53dab1a16f6e96466","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"jqwzYzAmQQY1Qfi169jHzV0Ars427wCgPzBX6Oul3B+3at7gwKYca4WdYVsoDac7iBX6gTqKgPmOzrz6sMK1ocqx6qungnWGJ2PZ6GcYwLSKIDBPq0OVGMB2rkSUAccpx29kWlXb7LptmL2Wmiyq8KZw4MfMaqQHe07fFC1ABaRqbUIBE5Ql5aUZTR891lCpDIdMqiNirc/0/oa8WDddfXU8+b/yWERmXx6zoAat/DBiiAZlxs+1IgzhQlb20KWQ0YvCct8RHKbsGixWpEpNIDgkCK/17LT+DWDLmrvaMqEdTL6J2OnbeXVQ/0j77OQ4cnZ+7ZTs1vZwbb8PYURL1b4/NItas67iLEz2AsaSyh5QnJHDAr8dXjirmFGX6qnpN221obhtGJKTjvmchkgwoLKRdNJyd2HJoIJmzm5s30cP4MfpbqEsi4VbMg8s4dFLSK1GHQVJWInX5CeynC2xCrapdgtf+HNQeBd/p7ul1MCtJ3aG/xx/6fLd69gFJr9crJmXygtUC752sSuzMk3mLV0yr/7H+SC1XtZAno7xA5evp/cCxdlGBE5GPYnyPxXl60NK762MfNML8OhHXDWJjpB/LZuFg2m++F4pILdEnanzUzKTx+S4JymXAGf6cL5oVSkz+4Hkgmti2irkn+VpJz/mDkwRqg3pACxFwDrUF9E="}},"tbs_fingerprint":"0cd72869f5e36d68eaa4ff5cd0109ddbdffb59424118e4bee857d1d33c49249d","tbs_noct_fingerprint":"0cd72869f5e36d68eaa4ff5cd0109ddbdffb59424118e4bee857d1d33c49249d","unknown_extensions":[{"critical":false,"id":"1.3.6.1.4.1.311.21.1","value":"AgEA"}],"validation_level":"unknown","validity":{"end":"2039-03-09T19:02:13Z","length":"946680776","start":"2009-03-09T20:09:17Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://pki.polycom.com/pki/Polycom%20Root%20CA.crt"]},"authority_key_id":"9d120369d3e5394d6319f0b587b97cb24b6399f0","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["http://pki.polycom.com/cps/"],"id":"1.3.6.1.4.1.13885.101.2.1"}],"crl_distribution_points":["http://crl.polycom.com/crl/Polycom%20Root%20CA.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"4d60aaf591ead067df56cc86dcbb3e997584598d"},"fingerprint_md5":"d9755788f62c6f85ddc5468e49ec990a","fingerprint_sha1":"dbb969927852a775ccc2101467947e96cc451e2e","fingerprint_sha256":"77f0cf45bc5dc4a71f7420bd4dade9c7abad61c68e914c58227875ac95fa8a7a","issuer":{"common_name":["Polycom Root CA"]},"issuer_dn":"CN=Polycom Root CA","redacted":false,"serial_number":"118017905721454696071170","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"USW4JZ4JQspd52ua1H6l43CwYgbDwqwfvKSzOjrSagIO1zGpo4ptEWIEHJg1zuhbgJPVd5aISoSgrCEzFP9Y7yi0zCI4AhNhlUzkBg/Pd74gAnfbhVmqWsF94gRsHHqvllCp9Y/PvnoiMJcIuOBExNeOyNoqVyq0cDtul11y3Tp/SBEX4pBc5a2SgtXwtx9ntpkA5BTlqpfEqN7/dxQuEvk7+20pL5RJzPFgMf4tZn9QKIac9pjveQRQeB5DHrfZaR9vdBrLB5RcQOxLI3/5iKS26huu268W4C1I6wVlRrqX+FJowy34PN7TITk3HHinm2/2aSVwZmb2F9sgkmFQmzNcCcy0zWlr8Lq3qgji/R06CRVjXW1Mh6KC9v9mNN1Ycmf5BIjSV+3uI/Drj97vqcgrewDIORpAls87NenPiaFNr8239qQwRb9UJvos4Zn3DMxBbfuqDTqfWsW3azT9d/GduF9iAlrrzI0mAzbILTmr4p4BJ2+h2WZHJRGfRzwnNS6zdRjTFDSnnN2WX5lIGdvlxaGbcKGPU9HBvAufYCqm43zhPEv54JEy+UCHaB6uS0gN5UH179GxQvJN4Mmg1kZ9mCMkzUXfn8CrS9JgKee4e0E0FFkgJAfjJ4t2pOPntzyUKJJh5Y7GbPgcfltfrU/LAQQyFdZWaYHHRQW3/SQ="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"0e257157de1ac7486ece85aafde5838f35e150e1c4cbf16978dde4f9b1af6a2a","subject":{"common_name":["Polycom Equipment Policy CA"]},"subject_dn":"CN=Polycom Equipment Policy CA","subject_key_info":{"fingerprint_sha256":"43acde9a4815c99399bdf218696dc96faeb1c3d91fa05f955e0ebeb18677fe63","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"57FrE9fzybKjq4zTm21OwOfG3hECDVngeISrrn51gjkzWrZNSKt6OA3nshZdRXFq/hLPukm4yibsfFbC9i5MITB73Jeyo01AKv9YQoBRi6Z7pyrYGDdYe4ixHEgYErLP1x4moKI+Hbb4JfWFq/MkEbvWKULdnKFXpjEackii3TC5cVmiyp2r0eDNbCaUHhAgtFGijcuKNKfa7wYw4zl4IB9cfF+hMcxAMZAdu0FAl/kHrwKePDfJMdIBLXcljBtYy4mD9vIbAQlIuRimo/VV0DCfd1hwA/2ODwEhorZBTEE1jP/v7dIxwhbYt7mRAsb68TY1oAV2yiMCb+2D1PSafkA83WdL1t/K24GOyh9qN6DWKx9XA9lcOvkfNOwfxCW4Uh72U5ry/0kwbcxW+0cGzAh7/CipanAMkjuuEnQd0MywBEImWj+bBIq+ZmN0eCaD8LZj44ETwsz5pStTIRTmGO/3z12ONOnh8iZT+UeqLUt0/UqoE6rAc+aUiQH4xg0n0BNy7IFqhOOWHhK3RfOCjDz+C0igPo2X43Y0KFEBIftNdaru3quDQ/JPPXW0qLVVORXdKqc4zcePWqJCzUFQSgdNP2VFXMTyXVL/iOYYCIOFVvivr2jSM2Y2vZmSneF/S3eHEdDU5Nxi0/y5Kyde4l7rXUUXGPjdN5mSUepT8nU="}},"tbs_fingerprint":"5316493caaa04230f4ea5fd64b9e92e7f22dfd7db7035622c5f434777482e4b0","tbs_noct_fingerprint":"5316493caaa04230f4ea5fd64b9e92e7f22dfd7db7035622c5f434777482e4b0","unknown_extensions":[{"critical":false,"id":"1.3.6.1.4.1.311.21.1","value":"AgEA"}],"validation_level":"unknown","validity":{"end":"2039-03-09T19:02:13Z","length":"946685400","start":"2009-03-09T18:52:13Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"160","lifetime_hint":"300"},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: certificate signed by unknown authority","browser_trusted":false},"version":"TLSv1.2","timestamp":"2020-07-09T08:59:08Z"},"heartbleed":{"heartbeat_enabled":true,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T10:49:28Z"},"get":{"body":"\n404 Not Found\nThe document requested was not found on this server.\n\n\n","body_sha256":"1c6ad9942ace070cec6443a21aba6cbd193930d828a2c1ddd32e81c7dd48ab22","headers":{"content_type":"text/html","server":"Polycom SoundPoint IP Telephone HTTPd","unknown":[{"key":"date","value":"MON, 13 JUL 2020 15:41:22 GMT"}]},"metadata":{"description":"Polycom","product":"Polycom"},"status_code":"404","status_line":"404 Not Found","title":"404 Not Found","timestamp":"2020-07-13T15:41:20Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T11:46:40Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T03:18:13Z"},"dhe":{"support":false,"timestamp":"2020-07-12T10:11:32Z"}}},"address":"150.162.212.46","ipint":"2527253550","updated_at":"2020-07-14T10:49:28Z","ip":"150.162.212.46","location":{"country_code":"BR","continent":"South America","city":"Florianópolis","postal_code":"88000","timezone":"America/Sao_Paulo","province":"Santa Catarina","latitude":-27.6153,"longitude":-48.4958,"registered_country":"Brazil","registered_country_code":"BR","country":"Brazil"},"autonomous_system":{"description":"Universidade Federal de Santa Catarina","routed_prefix":"150.162.128.0/17","asn":"263300","country_code":"BR","name":"Universidade Federal de Santa Catarina","path":["11537","1916","11242","263300","263300"]},"ports":["443"],"protocols":["443/https"],"ipinteger":"785687190","version":"0","tags":["http","https"]} +{"metadata":{"os":"Windows"},"address":"63.34.124.225","ip":"63.34.124.225","ports":["443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.sca1b.amazontrust.com/sca1b.crt"],"ocsp_urls":["http://ocsp.sca1b.amazontrust.com"]},"authority_key_id":"59a4660652a07b95923ca394072796745bf93dd0","basic_constraints":{"is_ca":false},"certificate_policies":[{"id":"2.16.840.1.114412.1.2"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.sca1b.amazontrust.com/sca1b.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOM=","signature":"BAMARzBFAiAtZ+HM+D92/KcJatySnk673g6DE15zJJDouHWR68iMdwIhALgl8N+d1HoC3YMBCZk5jrv3fIz/Wh23amWf9jmIjqlI","timestamp":"1589845209","version":"0"},{"log_id":"XNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbHDso=","signature":"BAMARzBFAiBnoRzJVbeGLM92Yy4sUoYrBc+Okg2QAUmaPbvOex9DjgIhALNSXWMnsV2sRgBwmmaweqoVwYyOicJzIdbHOoVCVqnc","timestamp":"1589845209","version":"0"}],"subject_alt_name":{"dns_names":["*.pageuppeople.com","*.dc7.pageuppeople.com","login.dc7.pageuppeople.com","loginuat.dc7.pageuppeople.com"]},"subject_key_id":"92c22c77ed174d8cf24f3657cd9e45361c2ed32a"},"fingerprint_md5":"ccc3aa61f4eb26df1eb69df491d4d3aa","fingerprint_sha1":"03654a1f7274086bed44a1ddfe821fe9dc86fd63","fingerprint_sha256":"1e9c3edef5da9c63e8d7cfd3e98b66f505d35983d196289de4178b2a00f30aca","issuer":{"common_name":["Amazon"],"country":["US"],"organization":["Amazon"],"organizational_unit":["Server CA 1B"]},"issuer_dn":"C=US, O=Amazon, OU=Server CA 1B, CN=Amazon","names":["login.dc7.pageuppeople.com","loginuat.dc7.pageuppeople.com","*.pageuppeople.com","*.dc7.pageuppeople.com"],"redacted":false,"serial_number":"8623476629180517274354509706432500651","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"cRv8zzaENeyKKNxjuo+fkz6hBAjR7ZT9V4x5FjPFL1yGHTmhNVzWYTCTGbIS7kJPvd2IssOjhe8SGwgzHlLWMareywsBXLLkYIgkzgknhbsULlh55xB0yIrfMHbkeufA/ws//6Y2mwtTf9RRN9CcVKULNfEYcjM7jpv33hksye7BV4x/Y6xqN5x+WALgIBpsDjxrsRLiwxPYCb2FcF91u+oeD8IhM7nvgHOVAngQFQAOo8PSip52vazljg0/HTBC69LJxRAY3Ro7djzpu6vv8YIAJWD6gKDRMgLFU27526EYIi3vaNVxQDxxt/p928qaLD1Hn9vWmRntkq9dzPHirA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"dd9c76f580ce07fc1c7b1f839fbad631a03f39288701ba930fbd07e07fa59a7c","subject":{"common_name":["*.pageuppeople.com"]},"subject_dn":"CN=*.pageuppeople.com","subject_key_info":{"fingerprint_sha256":"40967c9dc8d039851922bc2d4c8aa9a006e50044285e7e8d92f51d949b9b595c","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"qFnTy2krrFreCs4JbJd706mM4uR46Pcgl7TXVzARAPzG0fkvoQoj9v6XIC0tAxq99FcYaBzBxFqJREeeVr4mLQAKGoibBOPGE6OvSCKfqNslBmIBDb72qD3Ov3LDF2aXUrvhA8gcwTF0F8qgDtMMVJckZxioJPsgkBWKt1wyxlhtdOSjrAmRLmUltabaAVdjWSiVcnn8DF9PIq/UcPixl7NQDZj5+WwFy64ZwHw2ayUUyyjLbmYPi/vEpAmSCAd6E/RZVADmwpNE+oimfZwbov5d9qJshjNXppIsPghqPPd2uORWJC+pYFUprvtk1iyq7slaEnhWVnA32X2eF8gamQ=="}},"tbs_fingerprint":"70347944f483b798e5b2f865d2aef239570eff45b4ace44e69aa6385c5d71c87","tbs_noct_fingerprint":"60299bbe878217e594faf44a2a2a2b063b20111044c3e64cc1395fbf9ac5cf73","validation_level":"DV","validity":{"end":"2021-06-18T12:00:00Z","length":"34257600","start":"2020-05-18T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.rootca1.amazontrust.com/rootca1.cer"],"ocsp_urls":["http://ocsp.rootca1.amazontrust.com"]},"authority_key_id":"8418cc8534ecbc0c94942e08599cc7b2104e0a08","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.rootca1.amazontrust.com/rootca1.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"59a4660652a07b95923ca394072796745bf93dd0"},"fingerprint_md5":"eb268e55d434febda36a979a44654b6d","fingerprint_sha1":"917e732d330f9a12404f73d8bea36948b929dffc","fingerprint_sha256":"f55f9ffcb83c73453261601c7e044db15a0f034b93c05830f28635ef889cf670","issuer":{"common_name":["Amazon Root CA 1"],"country":["US"],"organization":["Amazon"]},"issuer_dn":"C=US, O=Amazon, CN=Amazon Root CA 1","redacted":false,"serial_number":"144918209630989264145272943054026349679957517","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"hZK+Nbt5z6OBQhzk42NzUzlSNefRrf2umYqsiRIvu+dvmtVOcuogMGH5l7LNpScCRajKdj6YSoOetuZF4PJD9gjebehu2zEHE/AvMQ2TbWE3e1jw/FGYkSgCTwV2t9PwG8LmXtBmhREPLoHGEIEp/iBgSPPy8IQTU2U1FRFrglFAVVdfGLWwIj6t8l6jAePDs/nLQVrmUpG75DaHTy2ppAdoNbqUcs0O6g59V/J5/DfFe2CesuvALZB3DUkQJ6U4rcQSo7SjyEizFQse4uIZ3MR2Usi8ikF4cNltl7NKi3gtXrQPo0xgyuFHy3gtEhexUovKOSy9tS/CMwKWq9qUfw=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"7a3a96e64a895c66676cc71400ed0e3ce9718be9ec5d46edb4f4a52d96a4414d","subject":{"common_name":["Amazon"],"country":["US"],"organization":["Amazon"],"organizational_unit":["Server CA 1B"]},"subject_dn":"C=US, O=Amazon, OU=Server CA 1B, CN=Amazon","subject_key_info":{"fingerprint_sha256":"252333a8e3abb72393d6499abbacca8604faefa84681ccc3e5531d44cc896450","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wk4WZ93OvGrIN1rsOjCwHebREugSKEjM6CnBuW5T1aPrAzkazHeH9gG52XDMz2uN4+MDcYaZbcumlCpOE9anvQTsChY8Cus5scS1WKO2x1Yl7D5SeqjjKRYHuW5Qz/tfMfgdugNKYokDrj5H8g8nkeMUIIX4+umKNfVfnplN52s376RQPkTs+lqFZgecfhdqVfMXijUe7umsw3VOWFV9U2sKa5sUQtflrAGJs+qj/s/AKwyEwthTFctn8NCIyjrRF3P1X5rUxXIefgHxmDBjKqryei3F4gIahuUyPg69EbTPPJPvF1AQnkPCBirgDWi+04iLSmWMStTDLkybVfSG5Q=="}},"tbs_fingerprint":"69705fe01ba047449263e6c7da7742c31b60ff17bf90f6c4b916fd2f52aab9cc","tbs_noct_fingerprint":"69705fe01ba047449263e6c7da7742c31b60ff17bf90f6c4b916fd2f52aab9cc","validation_level":"DV","validity":{"end":"2025-10-19T00:00:00Z","length":"315360000","start":"2015-10-22T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.rootg2.amazontrust.com/rootg2.cer"],"ocsp_urls":["http://ocsp.rootg2.amazontrust.com"]},"authority_key_id":"9c5f00dfaa01d7302b3888a2b86d4a9cf2119183","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.rootg2.amazontrust.com/rootg2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"8418cc8534ecbc0c94942e08599cc7b2104e0a08"},"fingerprint_md5":"e865a22aae524d26869af0448d6fd896","fingerprint_sha1":"06b25927c42a721631c1efd9431e648fa62e1e39","fingerprint_sha256":"87dcd4dc74640a322cd205552506d1be64f12596258096544986b4850bc72706","issuer":{"common_name":["Starfield Services Root Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["Starfield Technologies, Inc."],"province":["Arizona"]},"issuer_dn":"C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Services Root Certificate Authority - G2","redacted":false,"serial_number":"144918191876577076464031512351042010504348870","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"YjdCXLwQtT6LLOkMm2xF4gcAevnFWAu5CIw+7bMlPLVvUOTNNWqnkzSWMiGpSESrnO09tKpzbeR/FoCJbM8oAxiDR3mjEH4wW6w7sGDgd9QIpuEdfF7Au/maeyKdpwAJfqxGF4PcnCZXmTA5YpaP7dreqsXMGz7KQ2hsVxa81Q4gLv7/wmpdLqBKbRRYh5TmOTFffHPLkIhqhBGWJ6bt2YFGpn6jcgAKUj6DiAdjd4lpFw85hdKrCEVN0FE6/V1dN2RMfjCyVSRCnTawXZwXgWHxyvkQAiSr6w10kY17RSlQOYiypok1JR4UakcjMS9cmvqtmg5iUaQqqcT5NJ0hGA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"064778d61d47af9b3bf3cbd1dabc44c6575ab14d0be5b08461fc6ebeac97db18","subject":{"common_name":["Amazon Root CA 1"],"country":["US"],"organization":["Amazon"]},"subject_dn":"C=US, O=Amazon, CN=Amazon Root CA 1","subject_key_info":{"fingerprint_sha256":"fbe3018031f9586bcbf41727e417b7d1c45c2f47f93be372a17b96b50757d5a2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sniAccp41eNxr0eAUHR9btjXiHb0mWj3WCFg+XSEAS+sAi2G06BDek6ypNA2ugG+jdtIyAcXNkz07ogjxz7rN/W1GfhJaLDe17l2OB1hnqT+gjal5UpW5EXh+f20Fvp02pybNTkv+rAgUAZsetCAsqb5r+xHGY9QOAfcooc5WPi61an5SGcwlu6UeF5viaNRwDCGZqFFZrpU66PDkflI3P/R6DAtfS10cDXXiCT3nsRZbrtzhxfyMkYouEP6tx2qyrTynyQOLUv3cVxeaf/qlQLLOIquUDhv2/stYhvFxx5U4XfgZ8gPnIcj1j9AIH8ggMSATD47JCaOBK5smsiqDQ=="}},"tbs_fingerprint":"c95f7b20f6fcd39fd3a07a2e44252423b634fdbe35e1e045d964deea626115cb","tbs_noct_fingerprint":"c95f7b20f6fcd39fd3a07a2e44252423b634fdbe35e1e045d964deea626115cb","validation_level":"unknown","validity":{"end":"2037-12-31T01:00:00Z","length":"713278800","start":"2015-05-25T12:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://x.ss2.us/x.cer"],"ocsp_urls":["http://o.ss2.us/"]},"authority_key_id":"bf5fb7d1cedd1f86f45b55acdcd710c20ea988e7","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://s.ss2.us/r.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"9c5f00dfaa01d7302b3888a2b86d4a9cf2119183"},"fingerprint_md5":"c6150925cfea5941ddc7ff2a0a506692","fingerprint_sha1":"9e99a48a9960b14926bb7f3b02e22da2b0ab7280","fingerprint_sha256":"28689b30e4c306aab53b027b29e36ad6dd1dcf4b953994482ca84bdc1ecac996","issuer":{"country":["US"],"organization":["Starfield Technologies, Inc."],"organizational_unit":["Starfield Class 2 Certification Authority"]},"issuer_dn":"C=US, O=Starfield Technologies, Inc., OU=Starfield Class 2 Certification Authority","redacted":false,"serial_number":"12037640545166866303","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"Ix3jilfKfekXeUzxHlX9zFNuPkcP38ZV8rIENu2AH1PEXTQoa77HVfxn6ss/f5CyM80bWBCCAvj4L/UTYNQFzvGBCMHdp3WXTxi5bd73k5EIun5ALO3B6rt2njMGdx0NCH9T3Rtkq4In8WnVTV6u9KHDdadYRC3yPHCYrLpptpV3fw8xXiz8oIc6R2nweV/0FFSklV4ReBJgJ86fwnf/I1N3Xbr/6lnn28+vkpbvJJo1EHqckcYOfZn2Pxnf9XJU4RWpB1l7g79SLkaMsgBkdhxI09h56G5WzK4sA5DXGTiZ5MoJGVv/B5awqH80Sd9WqfewX+0z7YxHtzADXfQDjA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"49d851948bc94134d7b0d7db70db8a471a832fb089a6e2c49c1f41b22d2044b5","subject":{"common_name":["Starfield Services Root Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["Starfield Technologies, Inc."],"province":["Arizona"]},"subject_dn":"C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Services Root Certificate Authority - G2","subject_key_info":{"fingerprint_sha256":"2b071c59a0a0ae76b0eadb2bad23bad4580b69c3601b630c2eaf0613afa83f92","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1Qw6xCr5TuL1vhmXX46IU7EfP8vPnyATbSk6yA99PPdrdjhj2TZgqJteXACAsi9Zf/aH+SVDhudpG1KakOFx49gtDU5v9shJ2bbzGlauK7Z0FOvP+ybjGrodli5qO1iUiUdW/yWgk3BTg9qEdBTDZ54EaDrfjkBaHUpOz0ORO+dW1gBwy1Lue32uOue8MflF9sJgzxNZAiuAzDRH37nekGVtAs8skaam596FGEl8Zk6jOm2pte40LroNA7gz30frsWuNJdmbzoHRRUYylnCH3gIOSUOFtmxzu2TqYUGsydRU34cvxyKyJsyfWVRon/y+Ki/EVRx1QGAXhQJVOYt/BQ=="}},"tbs_fingerprint":"8408d5e5010ab8da67eb33a7d79ace944dd0ac103ae6ead3ff30dec571066b03","tbs_noct_fingerprint":"8408d5e5010ab8da67eb33a7d79ace944dd0ac103ae6ead3ff30dec571066b03","validation_level":"unknown","validity":{"end":"2034-06-28T17:39:16Z","length":"783279556","start":"2009-09-02T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T15:12:54Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T05:10:16Z"},"get":{"body":"\r\n\r\n\r\n\r\n403 - Forbidden: Access is denied.\r\n\r\n\r\n\r\n

      Server Error

      \r\n
      \r\n
      \r\n

      403 - Forbidden: Access is denied.

      \r\n

      You do not have permission to view this directory or page using the credentials that you supplied.

      \r\n
      \r\n
      \r\n\r\n\r\n","body_sha256":"c55f527e536de44c7980fecece7428ae5a765647495e47008a8a54fa1e434736","headers":{"connection":"keep-alive","content_length":"1233","content_type":"text/html","server":"Microsoft-IIS/8.5","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 08:46:07 GMT"}],"x_powered_by":"ASP.NET"},"metadata":{"description":"Microsoft IIS 8.5","manufacturer":"Microsoft","product":"IIS","version":"8.5"},"status_code":"403","status_line":"403 Forbidden","title":"403 - Forbidden: Access is denied.","timestamp":"2020-07-14T08:46:15Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T03:32:47Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T06:17:10Z"},"dhe":{"support":false,"timestamp":"2020-07-12T10:14:40Z"}}},"ipint":"1059224801","updated_at":"2020-07-14T08:46:15Z","location":{"country_code":"IE","continent":"Europe","city":"Dublin","postal_code":"D02","timezone":"Europe/Dublin","province":"Leinster","latitude":53.3338,"longitude":-6.2488,"registered_country":"United States","registered_country_code":"US","country":"Ireland"},"autonomous_system":{"description":"AMAZON-02","routed_prefix":"63.32.0.0/14","asn":"16509","country_code":"US","name":"AMAZON-02","path":["7018","1299","16509"]},"protocols":["443/https"],"ipinteger":"-511958465"} +{"address":"81.158.253.47","ipint":"1369373999","updated_at":"2020-07-15T05:58:12Z","p7547":{"cwmp":{"get":{"headers":{"content_length":"0","server":"gSOAP/2.7"},"status_code":"404","status_line":"404 Not Found","timestamp":"2020-07-15T05:58:12Z"}}},"ip":"81.158.253.47","location":{"country_code":"GB","continent":"Europe","city":"Exmouth","postal_code":"EX8","timezone":"Europe/London","province":"England","latitude":50.6138,"longitude":-3.4037,"registered_country":"United Kingdom","registered_country_code":"GB","country":"United Kingdom"},"autonomous_system":{"description":"BT-UK-AS BTnet UK Regional network","routed_prefix":"81.128.0.0/11","asn":"2856","country_code":"GB","name":"BT-UK-AS BTnet UK Regional network","path":["11164","5400","2856"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"805150289","version":"0","tags":["cwmp"]} +{"address":"154.89.20.70","ip":"154.89.20.70","p80":{"http":{"get":{"body":"众赢棋牌
      ","body_sha256":"7c8a7bf1c368b33e84362f0415364dedc9c468b7d05fb4e41d95d846ad47bbb0","headers":{"accept_ranges":"bytes","connection":"keep-alive","content_length":"979","content_type":"text/html","last_modified":"Sat, 11 Apr 2020 09:41:52 GMT","server":"nginx","unknown":[{"key":"etag","value":"\"5e9190e0-3d3\""},{"key":"date","value":"Tue, 07 Jul 2020 18:17:14 GMT"}]},"metadata":{"description":"nginx","product":"nginx"},"status_code":"200","status_line":"200 OK","title":"众赢棋牌","timestamp":"2020-07-07T18:17:13Z"}}},"ports":["80","443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cacerts.digicert.com/EncryptionEverywhereDVTLSCA-G1.crt"],"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"55744fb2724ff560ba50d1d7e6515c9a01871ad7","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.2"},{"id":"2.23.140.1.2.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOM=","signature":"BAMASDBGAiEApE4xd6dup5vmkTekcSnT5TEO4DjU9JLz07oZSnUjes4CIQD7VM0nzx75OUWSkojOW9JjTXkN4N5P4O4st3Xgj/mGzA==","timestamp":"1582615108","version":"0"},{"log_id":"XNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbHDso=","signature":"BAMARjBEAiA8D13Nj692n0ZgX1Uu4ITcgf3Jee1PIz18bcO7GGwBTAIgNc3msfCfawApzyogwCJ3dVmnF8Vaou6KWQ8cDTfJjHY=","timestamp":"1582615108","version":"0"}],"subject_alt_name":{"dns_names":["zy8.com","www.zy8.com"]},"subject_key_id":"156f6cd61baf1ecdf81e6a9032659d96120da49d"},"fingerprint_md5":"5fd8fc5149a37cf9c9d1d11511cc605c","fingerprint_sha1":"f840e1297cff390418f544bbce1ad777c197dfc0","fingerprint_sha256":"67fcc8a37fa15c5829bac724dbc354ab873b6861492bdcff6173896f3078f671","issuer":{"common_name":["Encryption Everywhere DV TLS CA - G1"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=Encryption Everywhere DV TLS CA - G1","names":["zy8.com","www.zy8.com"],"redacted":false,"serial_number":"13012925484051119050711117663171921065","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"q48Mwhqeqz8QvDVjqQUztUeYaqMvC5SseQMWmXmq1MTx61De/QT2McD31VvE4gD0icNbzgfjxT8Zz9t2xuNlfXqJOYAx/J2KkLQfG4LFDCCXYN3mS3pyc6SEu6BHKx0nOHuQ2MEDWGRl5L1rEu/McKJ1F2dDIUyiXzLi3ugJH24xZ50Gzu0noZAEY3ZSiWpGyxrTxyORPbSFrtl9LcOUIge2lDsyC8ImmD5FMjLPF/bRYNz0lfNbsibka2+uAfmJsO0ma33YX0Y8vPV4vhG+ICXBTe+DgNQUU5XlGcpsicuS1TbAIQVuNOEAlN2xum0W6m5pXWqGMImDcIjd8w+7WQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d72a9832501b02d445be5008e99679ad27d119a4f9a0bd18c5ae4d707c15306d","subject":{"common_name":["zy8.com"]},"subject_dn":"CN=zy8.com","subject_key_info":{"fingerprint_sha256":"dabdfa4941cf0242a1715a0a683a3b8672d6e76060826eec331d5649ac1b13c5","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"oaz5zDA/Xszl+AFndhGndZxaS3QQBrs9OKQ8Y/2TpOZriPyg0C/47buhtvxBoGr10pCnbQHN/UtUj8qDmJR9oNzUrM+kcpdkYPq6imRYVt374qiBSeF/K/MrLKLGJIgT7D+u8bwiKaNJC/dNTiI/0+xT5yl5ifWyRq86HoJOVBRqD7QhYbBxp9EOFgOqsIuu+tYssdERmeUDCCrZ0tnvIJiKvpA/rjYUygl/0MhXLEQhrrM4jtuyldclP+QSMjhIvSCfaMkDxHnsGqoBu/u4dyyICXbvpSOFXqGR00w+xINudYFDfw75KcPh5fx0uOPb8ZrLujCQMrtlRHgtmMryDQ=="}},"tbs_fingerprint":"e7101b171dfe855200425bf008e85d6fb3a01ef66a2fbfd47a275fb68ee0ec0f","tbs_noct_fingerprint":"4521a513922fd72f878438715f0358fcaaedb5b01a4eb1cc2641dd330247a049","validation_level":"DV","validity":{"end":"2021-02-24T12:00:00Z","length":"31579200","start":"2020-02-25T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"03de503556d14cbb66f0a3e21b1bc397b23dd155","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.2"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl3.digicert.com/DigiCertGlobalRootCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"55744fb2724ff560ba50d1d7e6515c9a01871ad7"},"fingerprint_md5":"eea4526fb5d65383bcc1f7dd2f84a2a1","fingerprint_sha1":"594f2dd10352c2360138ee35aa906f973aa30bd3","fingerprint_sha256":"15eb0a75c673abfbdcd2fafc02823c91fe6cbc36e00788442c8754d72bec3717","issuer":{"common_name":["DigiCert Global Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","redacted":false,"serial_number":"3290217995900168375215973871519570865","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"K3Gp6/aGq7aBZsxf/oQ+TD/BSwW3AU4ETK+GQf2kFzYZkby5SFrHdPomunx2HBzViUchGoofGgg7gHW0W3MlQAXWM0r5LUvStcr82QDWYNPaUy4taCQmyaJ+VB+6wxHstSigOlSNF2a6vg4rgexixeiV4YSB03Yqp2t3TeZHM9ESfkus74nQyW7pRGezj+TC44xCagCQQOzzNmzEAP2SnCrJsNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjyrMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"98f2ab2de1252f98da15ef721320ec062314aa71cc22deea0910f0b6d9873933","subject":{"common_name":["Encryption Everywhere DV TLS CA - G1"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"subject_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=Encryption Everywhere DV TLS CA - G1","subject_key_info":{"fingerprint_sha256":"188ef96a7484764b878f4e66ade13449df6313a755a94233cd74471e564155b2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"s94/rCRpvjV3JCHqYpygeq3eNEjFbkwO9/1DKI5HtV8XArrnp6zRQWIhvvg32lGe3MXVSBjMMa7emllUx2iVvGGbp1ZL04r+UV6Eo1PQ5gj1qqToX5TtwDqPFIL6IME9fB0XiuzcpHKndpCfqmOmnXKvsgHpjjO/vYR78+Vn/qsroicLpakrSc9U5hHuf2IO497UTgjFQwEf9Pff7eHK4fd29+CJZQ5SSN2kxvLFf5c2V7m4QiLIGyLgi9txMKHyu6J8IiLmYNeRmucxPyfB9gJXq/qQN1eRuAZEsqxHim5xsm1sqoiRQbG5kja3ul97ApFzmdZ5y8MFl/f6nUykDw=="}},"tbs_fingerprint":"39f6aef8cde515e315495cf5ef2f0d06d698b761da1a17816c9304b11898d2d4","tbs_noct_fingerprint":"39f6aef8cde515e315495cf5ef2f0d06d698b761da1a17816c9304b11898d2d4","validation_level":"DV","validity":{"end":"2027-11-27T12:46:10Z","length":"315532800","start":"2017-11-27T12:46:10Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"176","lifetime_hint":"600"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T07:38:18Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T06:23:37Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T10:50:12Z"}}},"ipint":"2589529158","updated_at":"2020-07-09T10:50:12Z","location":{"country_code":"HK","continent":"Asia","city":"Central","timezone":"Asia/Hong_Kong","province":"Central and Western District","latitude":22.2909,"longitude":114.15,"registered_country":"Seychelles","registered_country_code":"SC","country":"Hong Kong"},"autonomous_system":{"description":"POWERLINE-AS-AP POWER LINE DATACENTER","routed_prefix":"154.89.16.0/20","asn":"132839","country_code":"HK","name":"POWERLINE-AS-AP POWER LINE DATACENTER","path":["6939","132839"]},"protocols":["443/https","80/http"],"ipinteger":"1175738778"} +{"address":"23.206.165.19","ip":"23.206.165.19","p80":{"http":{"get":{"body":"\nInvalid URL\n\n

      Invalid URL

      \nThe requested URL \"[no URL]\", is invalid.

      \nReference #9.b823fea5.1594716331.211e8baf\n\n","body_sha256":"147c0ee5f775f6ee08c46e94d08e0d17e5f15fe137b4a8f986ef23f3b685dddc","headers":{"connection":"close","content_length":"209","content_type":"text/html","expires":"Tue, 14 Jul 2020 08:45:31 GMT","server":"AkamaiGHost","unknown":[{"key":"mime_version","value":"1.0"},{"key":"date","value":"Tue, 14 Jul 2020 08:45:31 GMT"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-14T08:45:31Z"}}},"ports":["80"],"version":"0","tags":["akamai","http"],"p443":{"https":{"rsa_export":{"support":false,"timestamp":"2020-07-09T07:34:26Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T11:55:45Z"},"dhe":{"support":false,"timestamp":"2020-07-12T05:21:06Z"}}},"ipint":"399418643","updated_at":"2020-07-14T08:45:31Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"NTT-COMMUNICATIONS-2914","routed_prefix":"23.206.160.0/20","asn":"2914","country_code":"US","name":"NTT-COMMUNICATIONS-2914","path":["7018","2914"]},"protocols":["80/http"],"ipinteger":"329633303"} +{"address":"185.197.193.123","ip":"185.197.193.123","p80":{"http":{"get":{"body":"\r\n403 Forbidden\r\n\r\n

      403 Forbidden

      \r\n
      nginx
      \r\n\r\n\r\n","body_sha256":"32f2fa940d4b4fe19aca1e53a24e5aac29c57b7c5ee78588325b87f1b649c864","headers":{"connection":"keep-alive","content_length":"146","content_type":"text/html","server":"nginx","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 09:49:47 GMT"}]},"metadata":{"description":"nginx","product":"nginx"},"status_code":"403","status_line":"403 Forbidden","title":"403 Forbidden","timestamp":"2020-07-07T09:51:30Z"}}},"ports":["80","443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cacerts.digitalcertvalidation.com/TrustAsiaTLSRSACA.crt"],"ocsp_urls":["http://statuse.digitalcertvalidation.com"]},"authority_key_id":"7fd399f3a0470e31005656228eb7cc9eddca018a","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.2"},{"id":"2.23.140.1.2.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOM=","signature":"BAMASDBGAiEAugudecCQuN1ed9rWtjsz7HAXwJnkg0BEyGg7bxI0T9sCIQC73dtBKmEyCDxozBJgXhi67JMj+NxWDjG/JqbUFbA8QQ==","timestamp":"1590147537","version":"0"},{"log_id":"XNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbHDso=","signature":"BAMARzBFAiEA7axAfnIYuZAj/PvFst7zzot4wRKoekYgIG/jNsfXkhwCIG9cpVwSTa7XZHhSVDZNaFok7NQ2BYQvvBOFYDzIBMse","timestamp":"1590147538","version":"0"}],"subject_alt_name":{"dns_names":["bst118114.com","www.bst118114.com"]},"subject_key_id":"d0337a17e1a102107846589f5fa0db16b4ec7d6b"},"fingerprint_md5":"36f1f6f62dcadd413e6874e7d5a8460c","fingerprint_sha1":"ff9d7cb1c906a02f1edd00f7857e8310da7cff83","fingerprint_sha256":"ec1da9a104bffe1b48e177c8c8bbb5838bb46c7668fe7542e73266b8cc8578f9","issuer":{"common_name":["TrustAsia TLS RSA CA"],"country":["CN"],"organization":["TrustAsia Technologies, Inc."],"organizational_unit":["Domain Validated SSL"]},"issuer_dn":"C=CN, O=TrustAsia Technologies, Inc., OU=Domain Validated SSL, CN=TrustAsia TLS RSA CA","names":["bst118114.com","www.bst118114.com"],"redacted":false,"serial_number":"7468291297997387655234384429756133458","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"OLK4WBico1VQ2KPvTIqfrLCAWQuscvDPFRNT1UyUePyzPMhbEVho19qhuGSMhliEOAFuenocwzSY7B4rvbgmNcZ7QgKvyAC5hADa+zo3vq+DEj3KW6G2RBm4Jj29waj3yiEO3Uj+rcJiOhIwFQVpkZKK2PQyLvjGRHXLRwP2tXgQa4mbSARGqiqVNgnddwYaEDYsGS5cdhUY0tsF7KULr1/V96SQdG+UrFaf+4vDcjZasSmmOVkYFXnkBWjHdIXOr6VM8kMRAX/+XgTFSdb1qX6RRzR5Mq8JOzTU+mlsQg4ZDJHZRN0lCnrdrS3K5IqdXfym9bad8sloZrLB5R64EA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"a3622e695db819f27379287a4b0bb06d23dbfe5b12768be5f0ce3483a3ef3055","subject":{"common_name":["bst118114.com"]},"subject_dn":"CN=bst118114.com","subject_key_info":{"fingerprint_sha256":"e482083104ed47314a901564e505f0cd53534018ab1f52a99e1fca236e2f73b1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"lUG7avSfA0S/ovBCCZrOi4gZ0Z/V54TGUOpsP0dbP4o5iwFlx1FLa143d59bI0G9iejqJCOhb58OPrhqVqDrbBSTOREgWuL3zvVDEjxWl44hALRB9tavicCDGq0+GeQ7Igh6Oy5ZaTeOrBVsUqqnKD31jZJm4IKVeog4wKOD6SW1edCzSk+vpoTxk7qTIJKGr5BCiooOhqYxX01TDRwsPuVTFy1o54Q9/CwXxKW7KZkH/SEbMmlx4wq/OY/9ackI1uxJCIDSqkG0DZnUOvdmoTibP2fMoNq5INj99NW3Ymbwonk9NS9T0eNBSfESO9gNSBuFR+C+iC55yGe6JH7udw=="}},"tbs_fingerprint":"0f8fb8c8fae61e922d8cc4da651b57b6b9569d9a1327f6fccbfef63694ffcbd8","tbs_noct_fingerprint":"749658f1694433453a66ccc34004d0325b2c829d7a1763e43f3793384b5a2fee","validation_level":"DV","validity":{"end":"2021-05-23T12:00:00Z","length":"31665600","start":"2020-05-22T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"03de503556d14cbb66f0a3e21b1bc397b23dd155","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.2"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl3.digicert.com/DigiCertGlobalRootCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"7fd399f3a0470e31005656228eb7cc9eddca018a"},"fingerprint_md5":"1d53326643d689c49dc2956250ff52c0","fingerprint_sha1":"ec4191d1f357bd539483286fa67fd219143d2611","fingerprint_sha256":"79f1f5ab697debf195f5b7da65f95399682edaeb80115b9d42a6ae5e2fa98802","issuer":{"common_name":["DigiCert Global Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","redacted":false,"serial_number":"7311534772508790650765434802415791662","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"rd1U6Pl2W/gzMraLbfeUNi/IneyUVjZfYcpNga17ydsrqLn9+wMiYxiKECSnpVo1j96fxZnmpytA9Uu4mskNJdPTg2cx5k5ANSiP80cCZ18IEH+HVtnk4YrpJ/WHljH/nBHh/dNSg+AaWdTsS48hIs10xGIOtee1wiYMCJG+SHkYm4fhgJUTpcSe2po0iAaRHDEpKCdTch3eK4Vtb0VRD1Cq1vUZf3UAnuLjXndOKQaBgJ3BiQFREPyBJV7w4Byjoh9k5i39MTCKLUi+LUKqe5SVamwXUt1A0h19tbdNJ7QGFBruJ9tUh+89Ydg67euSDVl4yjpdFT0HiflXIlhGYQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"96c647304bad78a67abc93bbb49856473c1c08e22f108605d4c5cec568bea94e","subject":{"common_name":["TrustAsia TLS RSA CA"],"country":["CN"],"organization":["TrustAsia Technologies, Inc."],"organizational_unit":["Domain Validated SSL"]},"subject_dn":"C=CN, O=TrustAsia Technologies, Inc., OU=Domain Validated SSL, CN=TrustAsia TLS RSA CA","subject_key_info":{"fingerprint_sha256":"8f3a8cebfe7ca33b0f46fc54ce0d21ce333e19c7f08536d4fc6d13083bcbee15","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"oFmvV/qYfsAJvGIdRZNTIym0OUMATjilWmUfznwofhen/d7u72RxnFFP5b1RoFEJ28yYUdVFdnqSWnvpu3MZ1yCnQ9P1UvW7QIMCbMxhb8KKl3mgqhaD+9cD5l441MC0+9Pqr1+IXcmHziXI3k8+UCrYPM0MMWivceCU/QqDpqFXVYRAQIg9w8EeXxYDhw8MBsXSVlQb5LZ6AM43Uy1w3W0lQuY2dLvKKvQYkw7+4wJbAeRfGmYL0mQzkHha8Gjk2ylkhCJxIZ3ISmUw9Xc+mgZZNcRhCOT2VgJ1QG2v6Hx995Lcpmkw7BOsUQ51ve6Q5IpgkWpOghG33t3V8OjleQ=="}},"tbs_fingerprint":"d3fe7073da1f0bc2ace8379d492e0dc37565ee0258199d00b7d6fdd8073c6d12","tbs_noct_fingerprint":"d3fe7073da1f0bc2ace8379d492e0dc37565ee0258199d00b7d6fdd8073c6d12","validation_level":"DV","validity":{"end":"2027-12-08T12:28:26Z","length":"315532800","start":"2017-12-08T12:28:26Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"176","lifetime_hint":"300"},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T22:57:03Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T03:43:06Z"},"get":{"body":"\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n千赢老虎-专业的网上买球站\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n

      千赢qy88

      \r\n\r\n\r\n
      \r\n
      \r\n\t
      \r\n\t\t\"千贏冰箱\"\r\n\t\t
      \r\n\t\t\t\r\n\t\t
      \r\n\t\t
      \r\n\t\t\t
      \r\n\t\t\t\tENGLISH\r\n\t\t\t
      \r\n\t\t\t\r\n\t\t\t
      \r\n\t\t\t \r\n\t\t\t \r\n\t\t\t\t
      \r\n\t\t\t\t
      \r\n\t\t\t
      \r\n\t\t\t\t\t
      \r\n \r\n \r\n \r\n\t\t\t\t\t
      \r\n
      \r\n\t\t\t
      \r\n\t\t
      \r\n\t
      \r\n
      \r\n
      \r\n
      \r\n\r\n\r\n\r\n
      \r\n
      \r\n
      \r\n \r\n
      \"1\"
      \r\n \r\n
      \"2\"
      \r\n \r\n
      \"3\"
      \r\n \r\n
      \"4\"
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n\r\n
      \r\n
      \r\n新闻\r\n
      \r\n\r\n\r\n
      \r\n
      \r\n
      \r\n\r\n \r\n\r\n
      \r\n
      \r\n
      \r\n

      2+

      \r\n

      拥有2支独立的研发团队

      \r\n
      \r\n
      \r\n

      10+

      \r\n

      公司建筑面积超10万平方米

      \r\n
      \r\n
      \r\n

      18+

      \r\n

      最快效率18秒/台

      \r\n
      \r\n
      \r\n

      82+

      \r\n

      公司拥有专利共计82项

      \r\n
      \r\n
      \r\n

      100+

      \r\n

      公司生产产能达100万台/年

      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
      \r\n
      \r\n

      明星单品

      \r\n STAR PRODUCTS\r\n
      \r\n
      \r\n \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n

      千赢qy88-480WBDGF

      \r\n 了解详情 >\r\n
      \r\n
      \r\n \r\n \r\n \r\n
      \r\n

      千赢qy88-397WBBGN Type 2\r\n
      \r\n
      \r\n

      千赢qy88-397WBBGN Type 2

      \r\n 了解详情 >\r\n
      \r\n
      \r\n \r\n \r\n \r\n
      \r\n

      千赢qy88-480WBDGH\r\n
      \r\n
      \r\n

      千赢qy88-480WBDGH

      \r\n 了解详情 >\r\n
      \r\n
      \r\n \r\n \r\n \r\n
      \r\n

      千赢qy88-430WBASQ Type 4\r\n
      \r\n
      \r\n

      千赢qy88-430WBASQ Type 4

      \r\n 了解详情 >\r\n
      \r\n
      \r\n \r\n \r\n \r\n
      \r\n

      千赢qy88-430WBAGQ Type 1\r\n
      \r\n
      \r\n

      千赢qy88-430WBAGQ Type 1

      \r\n 了解详情 >\r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n\r\n\r\n\r\n
      \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n

      \r\n Copyright 2007-2019 All right reserved. 千贏棋牌首页
      \r\n 苏ICP备19043915号 苏公网安备 32041202001684号 支持印象互动 \r\n

      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n
      \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","body_sha256":"9fe5033ba6540c7df261dd81182c98f4094e94fc0552dc94c43e022c5c74440b","headers":{"connection":"keep-alive","content_type":"text/html","last_modified":"Wed, 06 May 2020 23:23:10 GMT","server":"nginx","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 20:41:08 GMT"},{"key":"etag","value":"W/\"5eb346de-2ca1\""}],"vary":"Accept-Encoding"},"metadata":{"description":"nginx","product":"nginx"},"status_code":"200","status_line":"200 OK","title":"千赢老虎-专业的网上买球站","timestamp":"2020-07-13T20:43:01Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T10:34:52Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T02:41:42Z"},"dhe":{"support":false,"timestamp":"2020-07-12T14:01:30Z"}}},"ipint":"3116745083","updated_at":"2020-07-14T03:43:06Z","location":{"country_code":"DE","continent":"Europe","timezone":"Europe/Berlin","latitude":51.2993,"longitude":9.491,"registered_country":"Germany","registered_country_code":"DE","country":"Germany"},"autonomous_system":{"description":"QUICKPACKET","routed_prefix":"185.197.192.0/22","asn":"46261","country_code":"US","name":"QUICKPACKET","path":["11164","3491","46261"]},"protocols":["443/https","80/http"],"ipinteger":"2076296633"} +{"metadata":{"os":"Ubuntu"},"address":"52.193.232.246","ip":"52.193.232.246","ports":["22","443"],"version":"0","tags":["http","https","ssh"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"basic_constraints":{"is_ca":true},"extended_key_usage":{"client_auth":true,"code_signing":true,"email_protection":true,"ipsec_end_system":true,"ipsec_tunnel":true,"ipsec_user":true,"ocsp_signing":true,"server_auth":true,"time_stamping":true},"key_usage":{"certificate_sign":true,"content_commitment":true,"crl_sign":true,"data_encipherment":true,"digital_signature":true,"key_encipherment":true,"value":"111"}},"fingerprint_md5":"1c4da5114da771c6d8982182510bbb70","fingerprint_sha1":"9d47b2397b7f86ea86adf2daa181c1841c7140a0","fingerprint_sha256":"af0a816e57386c4bc8eeaeb885b465e54938427e585d6c5d73719072332b8ce4","issuer":{"common_name":["ip-10-1-0-118"],"country":["US"],"organization":["ip-10-1-0-118"],"organizational_unit":["ip-10-1-0-118"]},"issuer_dn":"CN=ip-10-1-0-118, O=ip-10-1-0-118, OU=ip-10-1-0-118, C=US","redacted":false,"serial_number":"0","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"EXTXvvm7NiITaEcCkwzef8IzDdwSxa+pRSx41DvAd7Ek7wD3937tW5rG/mjnkYgNeXtaXV2cBEl/QaQsYOD69VUx/PieX48l3QLVhBmFbl4OkKBTd0YG1epZyFIQ4OsaUSO0ZnwpUuOmz3dQi5c5DL6Q6bTilFxchd29wIuw9p7wyl5GJEpcaD1NYUi6hYkUYPL4tm9GDUXY5voz36GH0PGzx6n0CZY4KTsl+lMG9Y6QB+cCLrtRq8ANIKWMUTr1MudKpuGnqjBvbgVViRxAc8A2uI+BO+ZzuA//OxJrDeP98vJEw1ijI9+AuxaOpgSE/vMdLg6wri/FhlJxLRXaRQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"862cc0f4a8df3981ae00361db9c3504448f920b56e7e3698a02b478ba81cdf3f","subject":{"common_name":["ip-10-1-0-118"],"country":["US"],"organization":["ip-10-1-0-118"],"organizational_unit":["ip-10-1-0-118"]},"subject_dn":"CN=ip-10-1-0-118, O=ip-10-1-0-118, OU=ip-10-1-0-118, C=US","subject_key_info":{"fingerprint_sha256":"427ac07f9e3d1162798ebbc8d8aba0d446d0ae48d537be242f072c00da9c8aa3","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"ycgkvRJ258IUdOFC0rmQaTKLkMkVrENJxXUgR5sZt69GLl1CpO+JEEeqqVQH3cJ5ru7M+nmC8zdMO90cInMwQYHOFSG6I31j45+k1B0yc9uARs5vfCdPW3bWIwBcXyffDjibBgbgdHJdYZtXB18NviX2mT4vI1WqCnnD1/RvkOFihi09Om/6XL/DsrBiCeMU+1G62K9YI6JhLAndKpBLxO7pfnh4xvBcSGhGV/dO16vaAJTSKoXUSA4Seg8h1t8TdsfpyjBKCwdd+PHhgbh8lCKlNIf1FBU7eytw9nurRbPVXeomYHCzsyiKrs9qTxGja1x5efjY4u2flLBQ1nCZ0Q=="}},"tbs_fingerprint":"695ed942b3c64bc1a0c6f1a393a21e2f049ebc7eeccb27159e0115ca4d004092","tbs_noct_fingerprint":"695ed942b3c64bc1a0c6f1a393a21e2f049ebc7eeccb27159e0115ca4d004092","validation_level":"unknown","validity":{"end":"2036-12-31T03:47:11Z","length":"655344000","start":"2016-03-26T03:47:11Z"},"version":"3"}},"cipher_suite":{"id":"0x0004","name":"TLS_RSA_WITH_RC4_128_MD5"},"ocsp_stapling":false,"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2","timestamp":"2020-07-09T23:46:25Z"},"heartbleed":{"heartbeat_enabled":true,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T03:20:58Z"},"ssl_3":{"support":true,"timestamp":"2020-07-15T08:29:04Z"},"get":{"body":"\r\n\r\n403 Forbidden\r\n\r\n

      Forbidden

      \r\nYou don't have permission to access /\r\non this server.

      \r\n


      \r\n
      HTTP Server at 10.1.0.70 Port 443
      \r\n\r\n","body_sha256":"fb08272cd040e834bf013ad65a141e9326dfcb11386c032a8ff2a1a82bc5a188","headers":{"connection":"Keep-Alive","content_length":"266","content_type":"text/html; charset=iso-8859-1","unknown":[{"key":"keep_alive","value":"timeout=15; max=19"},{"key":"date","value":"Mon, 13 Jul 2020 03:17:32 GMT"}]},"status_code":"403","status_line":"403 Forbidden","title":"403 Forbidden","timestamp":"2020-07-13T03:16:54Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T12:05:07Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T06:40:22Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"1024","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5lOB//////////8="}},"support":true,"timestamp":"2020-07-12T13:22:43Z"}}},"p22":{"ssh":{"v2":{"banner":{"comment":"Ubuntu-2ubuntu2.4","raw":"SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.4","software":"OpenSSH_6.6.1p1","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"856uzvsOwBzgoscmvdlCl/DHPGqC7zToi7FCXtWhvEA="}},"metadata":{"description":"OpenSSH 6.6.1p1","product":"OpenSSH","version":"6.6.1p1"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"uinl4yjkzeaOEDHelnGe+mJxFo8mmZFu/yZTsitkvjw=","y":"GO9ACkIMZoLDXiuYtjzanfW3t2IEETa1tiQt0qbqcUw="},"fingerprint_sha256":"7384ce363fb633c7b334b7b7aaaaa31a8492999052af4595d6e37069fff039ef","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["aes128-ctr","aes192-ctr","aes256-ctr","arcfour256","arcfour128","aes128-gcm@openssh.com","aes256-gcm@openssh.com","chacha20-poly1305@openssh.com","aes128-cbc","3des-cbc","blowfish-cbc","cast128-cbc","aes192-cbc","aes256-cbc","arcfour","rijndael-cbc@lysator.liu.se"],"compressions":["none","zlib@openssh.com"],"macs":["hmac-md5-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-ripemd160-etm@openssh.com","hmac-sha1-96-etm@openssh.com","hmac-md5-96-etm@openssh.com","hmac-md5","hmac-sha1","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-ripemd160","hmac-ripemd160@openssh.com","hmac-sha1-96","hmac-md5-96"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","ssh-dss","ecdsa-sha2-nistp256","ssh-ed25519"],"kex_algorithms":["curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group-exchange-sha1","diffie-hellman-group14-sha1","diffie-hellman-group1-sha1"],"server_to_client":{"ciphers":["aes128-ctr","aes192-ctr","aes256-ctr","arcfour256","arcfour128","aes128-gcm@openssh.com","aes256-gcm@openssh.com","chacha20-poly1305@openssh.com","aes128-cbc","3des-cbc","blowfish-cbc","cast128-cbc","aes192-cbc","aes256-cbc","arcfour","rijndael-cbc@lysator.liu.se"],"compressions":["none","zlib@openssh.com"],"macs":["hmac-md5-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-ripemd160-etm@openssh.com","hmac-sha1-96-etm@openssh.com","hmac-md5-96-etm@openssh.com","hmac-md5","hmac-sha1","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-ripemd160","hmac-ripemd160@openssh.com","hmac-sha1-96","hmac-md5-96"]}},"timestamp":"2020-07-14T08:48:34Z"}}},"ipint":"885123318","updated_at":"2020-07-15T08:29:04Z","location":{"country_code":"JP","continent":"Asia","city":"Tokyo","postal_code":"102-0082","timezone":"Asia/Tokyo","province":"Tokyo","latitude":35.6882,"longitude":139.7532,"registered_country":"United States","registered_country_code":"US","country":"Japan"},"autonomous_system":{"description":"AMAZON-02","routed_prefix":"52.192.0.0/15","asn":"16509","country_code":"US","name":"AMAZON-02","path":["7018","174","16509"]},"protocols":["22/ssh","443/https"],"ipinteger":"-152518348"} +{"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.sca1b.amazontrust.com/sca1b.crt"],"ocsp_urls":["http://ocsp.sca1b.amazontrust.com"]},"authority_key_id":"59a4660652a07b95923ca394072796745bf93dd0","basic_constraints":{"is_ca":false},"certificate_policies":[{"id":"2.16.840.1.114412.1.2"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.sca1b.amazontrust.com/sca1b.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOM=","signature":"BAMARzBFAiACRrvKAz7Mn83IoLXcXuRQF0WDkWUsfcf1tnglprrh+AIhAJHOf0TfsxHgJGtL7Amj4MukO2QnzMAlQGpP6vUbek+P","timestamp":"1592183754","version":"0"},{"log_id":"XNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbHDso=","signature":"BAMARzBFAiEAotz8hbTYEmJXwHwjHq5/6SPZu+c9CPtZWl4ZIQ9+aBACIC7b0Gu6Nqws7o2ZxwoQUAv1OkipjAUbxyrXkgemQa+/","timestamp":"1592183754","version":"0"}],"subject_alt_name":{"dns_names":["*.fastretailing.com"]},"subject_key_id":"0581b61802e149ea57ab21d212272265c5bd0ea9"},"fingerprint_md5":"1ebbdecd5c4c05a71f1ed788ce37fc2b","fingerprint_sha1":"70700fbfbb745b1c936d288369de6a2e93fb1717","fingerprint_sha256":"626af26ea1efe6c273133703bccb1e3acef915a80936e71a3175ca04e4959efe","issuer":{"common_name":["Amazon"],"country":["US"],"organization":["Amazon"],"organizational_unit":["Server CA 1B"]},"issuer_dn":"C=US, O=Amazon, OU=Server CA 1B, CN=Amazon","names":["*.fastretailing.com"],"redacted":false,"serial_number":"12830282562426148191427447602061564643","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"eSWgnaa+rElB0aD9lsISaJa2jqkehkAY0E1i+ZoeEXOvFGHJC87FP9aj1qgs7L3rLadmVeF++aGSYlbx+LH0+qp1fledBIP7QldoxZTvxynxngpQjH23cBP/MtGP41WrAqXRMXqLUmSRYv2+eeEuYd84hvmDxfjxd9FkBcrHpeMkp7nF+pN19od2aEd61tDb+tIlnpxxlw5OCtxQU9UibQcSyvnNbj/pdlUTKfBrzf6JdCAb9OuqUE2VpKdEBE1N9nmcSK0xldUfvFtQutgcMiMSzGIdENjLaMWkeQjSNp+tU35AqbFW8/zro+qGhYw+5O4Ca19FNqeAINUQRKL/0w=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d49509fdb5f2ea7b252ffb98de71a8c62675ff2adc21bddc6b1fc81147acd9b9","subject":{"common_name":["*.fastretailing.com"]},"subject_dn":"CN=*.fastretailing.com","subject_key_info":{"fingerprint_sha256":"f3a28cb07a6b2e3a58befe950f7d72e5db32e9ea4aab6e85ca1046a86d3d9501","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"u7MmRAHGQ1UCl3+NeyL9q2h6fZMJMXAM4ImjNR/9AD0UqL9T1+5cqwJzJuyBcsdwqi7ZvTrVeMj+IFJZadWL6JaefuSRS2R0akTfOG4Wcp+P30LdU/KW+wEnEvEBS3EydwAHf4qvxDkQNYQFwGCO2LXAq5nsjjywPO8hrsJV9gXY3ORFc/Z7sFgB7VrJXI/xKVSGyM4rNRKHrsMy6BPSqjjT9CJxcup9GIZTJk/sbotP1CywpwGy6jmvxnVvqeKl/aWG3J+bzIDAI6j9mnV9WF6rLTAJQaAzqK+BhmIEMy5fTEGVixD6UWzl+FkiA+gteSfnZDRvR9r7lzd2rds1Jw=="}},"tbs_fingerprint":"3a5a02fd6a8226e953e1b3d4199cd727154c6348738d497efc1b07d9c075520e","tbs_noct_fingerprint":"d4ee564ae0d286a0d91cd3ab417c69206f192488b4bc4919b4c93355076bac0e","validation_level":"DV","validity":{"end":"2021-07-15T12:00:00Z","length":"34171200","start":"2020-06-15T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.rootca1.amazontrust.com/rootca1.cer"],"ocsp_urls":["http://ocsp.rootca1.amazontrust.com"]},"authority_key_id":"8418cc8534ecbc0c94942e08599cc7b2104e0a08","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.rootca1.amazontrust.com/rootca1.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"59a4660652a07b95923ca394072796745bf93dd0"},"fingerprint_md5":"eb268e55d434febda36a979a44654b6d","fingerprint_sha1":"917e732d330f9a12404f73d8bea36948b929dffc","fingerprint_sha256":"f55f9ffcb83c73453261601c7e044db15a0f034b93c05830f28635ef889cf670","issuer":{"common_name":["Amazon Root CA 1"],"country":["US"],"organization":["Amazon"]},"issuer_dn":"C=US, O=Amazon, CN=Amazon Root CA 1","redacted":false,"serial_number":"144918209630989264145272943054026349679957517","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"hZK+Nbt5z6OBQhzk42NzUzlSNefRrf2umYqsiRIvu+dvmtVOcuogMGH5l7LNpScCRajKdj6YSoOetuZF4PJD9gjebehu2zEHE/AvMQ2TbWE3e1jw/FGYkSgCTwV2t9PwG8LmXtBmhREPLoHGEIEp/iBgSPPy8IQTU2U1FRFrglFAVVdfGLWwIj6t8l6jAePDs/nLQVrmUpG75DaHTy2ppAdoNbqUcs0O6g59V/J5/DfFe2CesuvALZB3DUkQJ6U4rcQSo7SjyEizFQse4uIZ3MR2Usi8ikF4cNltl7NKi3gtXrQPo0xgyuFHy3gtEhexUovKOSy9tS/CMwKWq9qUfw=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"7a3a96e64a895c66676cc71400ed0e3ce9718be9ec5d46edb4f4a52d96a4414d","subject":{"common_name":["Amazon"],"country":["US"],"organization":["Amazon"],"organizational_unit":["Server CA 1B"]},"subject_dn":"C=US, O=Amazon, OU=Server CA 1B, CN=Amazon","subject_key_info":{"fingerprint_sha256":"252333a8e3abb72393d6499abbacca8604faefa84681ccc3e5531d44cc896450","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wk4WZ93OvGrIN1rsOjCwHebREugSKEjM6CnBuW5T1aPrAzkazHeH9gG52XDMz2uN4+MDcYaZbcumlCpOE9anvQTsChY8Cus5scS1WKO2x1Yl7D5SeqjjKRYHuW5Qz/tfMfgdugNKYokDrj5H8g8nkeMUIIX4+umKNfVfnplN52s376RQPkTs+lqFZgecfhdqVfMXijUe7umsw3VOWFV9U2sKa5sUQtflrAGJs+qj/s/AKwyEwthTFctn8NCIyjrRF3P1X5rUxXIefgHxmDBjKqryei3F4gIahuUyPg69EbTPPJPvF1AQnkPCBirgDWi+04iLSmWMStTDLkybVfSG5Q=="}},"tbs_fingerprint":"69705fe01ba047449263e6c7da7742c31b60ff17bf90f6c4b916fd2f52aab9cc","tbs_noct_fingerprint":"69705fe01ba047449263e6c7da7742c31b60ff17bf90f6c4b916fd2f52aab9cc","validation_level":"DV","validity":{"end":"2025-10-19T00:00:00Z","length":"315360000","start":"2015-10-22T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.rootg2.amazontrust.com/rootg2.cer"],"ocsp_urls":["http://ocsp.rootg2.amazontrust.com"]},"authority_key_id":"9c5f00dfaa01d7302b3888a2b86d4a9cf2119183","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.rootg2.amazontrust.com/rootg2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"8418cc8534ecbc0c94942e08599cc7b2104e0a08"},"fingerprint_md5":"e865a22aae524d26869af0448d6fd896","fingerprint_sha1":"06b25927c42a721631c1efd9431e648fa62e1e39","fingerprint_sha256":"87dcd4dc74640a322cd205552506d1be64f12596258096544986b4850bc72706","issuer":{"common_name":["Starfield Services Root Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["Starfield Technologies, Inc."],"province":["Arizona"]},"issuer_dn":"C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Services Root Certificate Authority - G2","redacted":false,"serial_number":"144918191876577076464031512351042010504348870","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"YjdCXLwQtT6LLOkMm2xF4gcAevnFWAu5CIw+7bMlPLVvUOTNNWqnkzSWMiGpSESrnO09tKpzbeR/FoCJbM8oAxiDR3mjEH4wW6w7sGDgd9QIpuEdfF7Au/maeyKdpwAJfqxGF4PcnCZXmTA5YpaP7dreqsXMGz7KQ2hsVxa81Q4gLv7/wmpdLqBKbRRYh5TmOTFffHPLkIhqhBGWJ6bt2YFGpn6jcgAKUj6DiAdjd4lpFw85hdKrCEVN0FE6/V1dN2RMfjCyVSRCnTawXZwXgWHxyvkQAiSr6w10kY17RSlQOYiypok1JR4UakcjMS9cmvqtmg5iUaQqqcT5NJ0hGA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"064778d61d47af9b3bf3cbd1dabc44c6575ab14d0be5b08461fc6ebeac97db18","subject":{"common_name":["Amazon Root CA 1"],"country":["US"],"organization":["Amazon"]},"subject_dn":"C=US, O=Amazon, CN=Amazon Root CA 1","subject_key_info":{"fingerprint_sha256":"fbe3018031f9586bcbf41727e417b7d1c45c2f47f93be372a17b96b50757d5a2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sniAccp41eNxr0eAUHR9btjXiHb0mWj3WCFg+XSEAS+sAi2G06BDek6ypNA2ugG+jdtIyAcXNkz07ogjxz7rN/W1GfhJaLDe17l2OB1hnqT+gjal5UpW5EXh+f20Fvp02pybNTkv+rAgUAZsetCAsqb5r+xHGY9QOAfcooc5WPi61an5SGcwlu6UeF5viaNRwDCGZqFFZrpU66PDkflI3P/R6DAtfS10cDXXiCT3nsRZbrtzhxfyMkYouEP6tx2qyrTynyQOLUv3cVxeaf/qlQLLOIquUDhv2/stYhvFxx5U4XfgZ8gPnIcj1j9AIH8ggMSATD47JCaOBK5smsiqDQ=="}},"tbs_fingerprint":"c95f7b20f6fcd39fd3a07a2e44252423b634fdbe35e1e045d964deea626115cb","tbs_noct_fingerprint":"c95f7b20f6fcd39fd3a07a2e44252423b634fdbe35e1e045d964deea626115cb","validation_level":"unknown","validity":{"end":"2037-12-31T01:00:00Z","length":"713278800","start":"2015-05-25T12:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://x.ss2.us/x.cer"],"ocsp_urls":["http://o.ss2.us/"]},"authority_key_id":"bf5fb7d1cedd1f86f45b55acdcd710c20ea988e7","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://s.ss2.us/r.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"9c5f00dfaa01d7302b3888a2b86d4a9cf2119183"},"fingerprint_md5":"c6150925cfea5941ddc7ff2a0a506692","fingerprint_sha1":"9e99a48a9960b14926bb7f3b02e22da2b0ab7280","fingerprint_sha256":"28689b30e4c306aab53b027b29e36ad6dd1dcf4b953994482ca84bdc1ecac996","issuer":{"country":["US"],"organization":["Starfield Technologies, Inc."],"organizational_unit":["Starfield Class 2 Certification Authority"]},"issuer_dn":"C=US, O=Starfield Technologies, Inc., OU=Starfield Class 2 Certification Authority","redacted":false,"serial_number":"12037640545166866303","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"Ix3jilfKfekXeUzxHlX9zFNuPkcP38ZV8rIENu2AH1PEXTQoa77HVfxn6ss/f5CyM80bWBCCAvj4L/UTYNQFzvGBCMHdp3WXTxi5bd73k5EIun5ALO3B6rt2njMGdx0NCH9T3Rtkq4In8WnVTV6u9KHDdadYRC3yPHCYrLpptpV3fw8xXiz8oIc6R2nweV/0FFSklV4ReBJgJ86fwnf/I1N3Xbr/6lnn28+vkpbvJJo1EHqckcYOfZn2Pxnf9XJU4RWpB1l7g79SLkaMsgBkdhxI09h56G5WzK4sA5DXGTiZ5MoJGVv/B5awqH80Sd9WqfewX+0z7YxHtzADXfQDjA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"49d851948bc94134d7b0d7db70db8a471a832fb089a6e2c49c1f41b22d2044b5","subject":{"common_name":["Starfield Services Root Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["Starfield Technologies, Inc."],"province":["Arizona"]},"subject_dn":"C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Services Root Certificate Authority - G2","subject_key_info":{"fingerprint_sha256":"2b071c59a0a0ae76b0eadb2bad23bad4580b69c3601b630c2eaf0613afa83f92","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1Qw6xCr5TuL1vhmXX46IU7EfP8vPnyATbSk6yA99PPdrdjhj2TZgqJteXACAsi9Zf/aH+SVDhudpG1KakOFx49gtDU5v9shJ2bbzGlauK7Z0FOvP+ybjGrodli5qO1iUiUdW/yWgk3BTg9qEdBTDZ54EaDrfjkBaHUpOz0ORO+dW1gBwy1Lue32uOue8MflF9sJgzxNZAiuAzDRH37nekGVtAs8skaam596FGEl8Zk6jOm2pte40LroNA7gz30frsWuNJdmbzoHRRUYylnCH3gIOSUOFtmxzu2TqYUGsydRU34cvxyKyJsyfWVRon/y+Ki/EVRx1QGAXhQJVOYt/BQ=="}},"tbs_fingerprint":"8408d5e5010ab8da67eb33a7d79ace944dd0ac103ae6ead3ff30dec571066b03","tbs_noct_fingerprint":"8408d5e5010ab8da67eb33a7d79ace944dd0ac103ae6ead3ff30dec571066b03","validation_level":"unknown","validity":{"end":"2034-06-28T17:39:16Z","length":"783279556","start":"2009-09-02T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T20:00:35Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T08:34:46Z"},"get":{"body":"Unknown path","body_sha256":"d7977d3a03704c0716b842cc75a4bff43ea8b5d6a76f3b77f4862fc96d700c9b","headers":{"connection":"keep-alive","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 18:58:13 GMT"}]},"status_code":"404","status_line":"404 Not Found","timestamp":"2020-07-13T18:58:12Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T12:36:23Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T12:26:15Z"},"dhe":{"support":false,"timestamp":"2020-07-12T13:07:22Z"}}},"address":"52.193.222.100","ipint":"885120612","updated_at":"2020-07-14T08:34:46Z","ip":"52.193.222.100","location":{"country_code":"JP","continent":"Asia","city":"Tokyo","postal_code":"102-0082","timezone":"Asia/Tokyo","province":"Tokyo","latitude":35.6882,"longitude":139.7532,"registered_country":"United States","registered_country_code":"US","country":"Japan"},"autonomous_system":{"description":"AMAZON-02","routed_prefix":"52.192.0.0/15","asn":"16509","country_code":"US","name":"AMAZON-02","path":["7018","174","16509"]},"ports":["443"],"protocols":["443/https"],"ipinteger":"1692320052","version":"0","tags":["http","https"]} +{"address":"49.73.249.196","ipint":"826931652","updated_at":"2020-07-09T05:26:57Z","ip":"49.73.249.196","location":{"country_code":"CN","continent":"Asia","city":"Suzhou","timezone":"Asia/Shanghai","province":"Jiangsu","latitude":31.3041,"longitude":120.5954,"registered_country":"China","registered_country_code":"CN","country":"China"},"autonomous_system":{"description":"CHINANET-BACKBONE No.31,Jin-rong Street","routed_prefix":"49.64.0.0/11","asn":"4134","country_code":"CN","name":"CHINANET-BACKBONE No.31,Jin-rong Street","path":["11164","4134"]},"ports":["53"],"protocols":["53/dns"],"ipinteger":"-990295759","version":"0","p53":{"dns":{"lookup":{"answers":[{"name":"c.afekv.com","response":"221.224.191.62","type":"A"},{"name":"c.afekv.com","response":"192.150.186.1","type":"A"}],"errors":false,"open_resolver":true,"questions":[{"name":"c.afekv.com","type":"A"}],"resolves_correctly":true,"support":true,"timestamp":"2020-07-09T05:26:57Z"}}},"tags":["dns"]} +{"address":"104.74.164.31","ip":"104.74.164.31","p80":{"http":{"get":{"body":"\nInvalid URL\n\n

      Invalid URL

      \nThe requested URL \"[no URL]\", is invalid.

      \nReference #9.1dad2c17.1594148348.3c8709f\n\n","body_sha256":"afdbf815cd06afe30aef01a54a7be69dda2db8fedcea70308d18cee622ccef11","headers":{"connection":"close","content_length":"208","content_type":"text/html","expires":"Tue, 07 Jul 2020 18:59:08 GMT","server":"AkamaiGHost","unknown":[{"key":"mime_version","value":"1.0"},{"key":"date","value":"Tue, 07 Jul 2020 18:59:08 GMT"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-07T18:59:08Z"}}},"ports":["80","443"],"version":"0","tags":["akamai","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cacerts.digicert.com/DigiCertSecureSiteECCCA-1.crt"],"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"db35445d2beb53af9e0bf5713da39973aefb5c53","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.1"},{"id":"2.23.140.1.2.2"}],"crl_distribution_points":["http://crl3.digicert.com/DigiCertSecureSiteECCCA-1.crl","http://crl4.digicert.com/DigiCertSecureSiteECCCA-1.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"value":"1"},"signed_certificate_timestamps":[{"log_id":"9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOM=","signature":"BAMARzBFAiBjSl441k97c8PoTcYMzWDArSoopXLHLYMazb/cgOXYQQIhAIr3WnuHwUCk+lFTAG/CKZeD4NInEtwAIN3QfAacDjJu","timestamp":"1591795855","version":"0"},{"log_id":"XNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbHDso=","signature":"BAMARzBFAiEAnboAvgye8gPQkXWyq2+4mItUzxYPEz8pOxxdki/mkhkCIE1w1V1yuIkTxARWE877WNPOfFqRE3pRIKlsCDV/Zv8f","timestamp":"1591795855","version":"0"}],"subject_alt_name":{"dns_names":["staging.ott.sky.com","www.tdm.dev.nowtv.com","xbox.crosstv.stage.nowtv.com","tv.client.staging.ott.sky.com","www.nft.prod.nowtv.com","stage.tv.client.ott.sky.com","staging.youview.tv.client.ott.sky.com","e2e.staging.youview.client.ott.sky.com","code-gazer-staging.developers.sky.com","auth.client.staging.ott.sky.com","roku.client.staging.ott.sky.com","crosstv.stage.nowtv.com","stage.chromecast.client.ott.sky.com","kids.client.staging.ott.sky.com","ms3-stage-s.sky.com","www.func.prod.nowtv.com","ms3-uat-p.sky.com","lg.crosstv.stage.nowtv.com","s1-atlantis.epgsky.com","installer.desktop.client.staging.ott.sky.com","www.e05.dev.nowtv.com","e2e.roku.client.staging.ott.sky.com","config.staging.ott.sky.com","ps3.crosstv.stage.nowtv.com","tv.client.e2e.staging.ott.sky.com","e2e.stage.chromecast.nowtv.com","auth.client.e2e.staging.ott.sky.com","ps4.crosstv.stage.nowtv.com","e2e.stage.chromecast.client.ott.sky.com","code-gazer.developers.sky.com","desktop.client.staging.ott.sky.com","e2e.tv.client.ott.sky.com","www.dev.nowtv.com"]},"subject_key_id":"9f47c39510edde032ea921c70e6fb5e700140df7"},"fingerprint_md5":"2373cfc354ca066348f1d25d08fa2fc8","fingerprint_sha1":"5b3fda448e08be99d5e6e99adaa7323dda557e17","fingerprint_sha256":"6ca6c3a65931a1a82402bb3aa6c532bee169dcc741244011b3a11adc26092cbc","issuer":{"common_name":["DigiCert Secure Site ECC CA-1"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Secure Site ECC CA-1","names":["xbox.crosstv.stage.nowtv.com","tv.client.staging.ott.sky.com","e2e.staging.youview.client.ott.sky.com","lg.crosstv.stage.nowtv.com","ps3.crosstv.stage.nowtv.com","ps4.crosstv.stage.nowtv.com","stage.tv.client.ott.sky.com","auth.client.staging.ott.sky.com","auth.client.e2e.staging.ott.sky.com","code-gazer.developers.sky.com","e2e.tv.client.ott.sky.com","staging.ott.sky.com","roku.client.staging.ott.sky.com","www.func.prod.nowtv.com","s1-atlantis.epgsky.com","desktop.client.staging.ott.sky.com","kids.client.staging.ott.sky.com","e2e.roku.client.staging.ott.sky.com","e2e.stage.chromecast.client.ott.sky.com","www.tdm.dev.nowtv.com","ms3-uat-p.sky.com","www.e05.dev.nowtv.com","config.staging.ott.sky.com","e2e.stage.chromecast.nowtv.com","www.dev.nowtv.com","staging.youview.tv.client.ott.sky.com","crosstv.stage.nowtv.com","stage.chromecast.client.ott.sky.com","www.nft.prod.nowtv.com","installer.desktop.client.staging.ott.sky.com","code-gazer-staging.developers.sky.com","ms3-stage-s.sky.com","tv.client.e2e.staging.ott.sky.com"],"redacted":false,"serial_number":"4305779303500807699545861857493853907","signature":{"self_signed":false,"signature_algorithm":{"name":"ECDSAWithSHA256","oid":"1.2.840.10045.4.3.2"},"valid":true,"value":"MEQCIGZIVVu9l4+TR/VSx7I1v5Iq1Sq00t9lW7G/Logzyu5pAiB89OGrO8XpmvvGbZec0Zeov8PcPgCM8qiYaAdmJGvBrw=="},"signature_algorithm":{"name":"ECDSAWithSHA256","oid":"1.2.840.10045.4.3.2"},"spki_subject_fingerprint":"cef99759a59df1a637b5b925a1a5e8435b689a641fcc485a2f03aa1475bf3846","subject":{"common_name":["staging.ott.sky.com"],"country":["GB"],"locality":["London"],"organization":["Sky Plc"]},"subject_dn":"C=GB, L=London, O=Sky Plc, CN=staging.ott.sky.com","subject_key_info":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","pub":"BF0wxlZrDVOihtDLoWi3pOHEB/RU7SmVSEClc5qdD5kaSIjMEjJ5Js4EO2E+9BDX64KMXTYmFJlM28u3lbz4ufw=","x":"XTDGVmsNU6KG0MuhaLek4cQH9FTtKZVIQKVzmp0PmRo=","y":"SIjMEjJ5Js4EO2E+9BDX64KMXTYmFJlM28u3lbz4ufw="},"fingerprint_sha256":"62cdd003faf691f9edb9bd9efdfa3cd3c30a8a44223a28921a6b9e0ccc8fbae3","key_algorithm":{"name":"ECDSA"}},"tbs_fingerprint":"3e1b23676b6a1695d18df297206a30e0fbff791f56b6b44fe0ff425f761bbf52","tbs_noct_fingerprint":"92cdccb2f7ef0aa039c4369f8cbd7a98086358d804cc8635d9ccb0971cd788fc","validation_level":"OV","validity":{"end":"2021-09-09T12:00:00Z","length":"39441600","start":"2020-06-10T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"03de503556d14cbb66f0a3e21b1bc397b23dd155","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl3.digicert.com/DigiCertGlobalRootCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"db35445d2beb53af9e0bf5713da39973aefb5c53"},"fingerprint_md5":"9dd797aed8aa7e7fa54f87dd7b04fe03","fingerprint_sha1":"9370c73f6c67904310c912bae29694418d120825","fingerprint_sha256":"99935e20424535ec016f337b2be68f1349de66cce4ca5ab367f8f3738215b833","issuer":{"common_name":["DigiCert Global Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","redacted":false,"serial_number":"15099003683604006848814258862226398944","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"q/3IH6J/UvB/6Q9OECLSeul5xkW0PvhDzYJhcRJOZeWYWU575/+8ZnDJ/JhYx4wbEZ+PVCDLiVhiKU3//F8W7ZdsVLqhdVVrOoZJv+JZar3RZ1rgwhavgHB6Sq142nTSzG5J3O7+i2NZj4MJVM5uKPDUx659T2m2CsjzzXhFRnacQrN1QFh7+EUKXmxB1oFMcC8k4BSi4ZYvsAAvb8Xh0g4fHEq8fbAwffNSfEvY3JEbAjeRVA31J1ifBMwliRzPHGLfeyiYwvPQIUJ9ODieH5vDzLq9XvtdmFzBPXlFnHKI9LphN6sUVXdf4B+dao9drFZEifuXbKlQ/2TRZPFeBg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"6ec762d32a390346fb12c1cbecfffbf30e53f8bc8aefd25f6719e2495e0128b8","subject":{"common_name":["DigiCert Secure Site ECC CA-1"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"subject_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Secure Site ECC CA-1","subject_key_info":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","pub":"BOa7deFrry7x5/s2SvikUooGyUWExkR4PAPEJIhU5fEuiTN6z10OOUu5mcBxqlp7yhDOMODxD4PcdHvJGRm93xo=","x":"5rt14WuvLvHn+zZK+KRSigbJRYTGRHg8A8QkiFTl8S4=","y":"iTN6z10OOUu5mcBxqlp7yhDOMODxD4PcdHvJGRm93xo="},"fingerprint_sha256":"679ff646d597ac2bef26c2d7759e2df4711a560db57bd02173350b9fdb668383","key_algorithm":{"name":"ECDSA"}},"tbs_fingerprint":"1b75977b353b45afdf05381ce8b4fb63a6674772d12225d371ec5fdcd7ac911e","tbs_noct_fingerprint":"1b75977b353b45afdf05381ce8b4fb63a6674772d12225d371ec5fdcd7ac911e","validation_level":"unknown","validity":{"end":"2029-02-15T12:45:24Z","length":"315619200","start":"2019-02-15T12:45:24Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02B","name":"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"160","lifetime_hint":"7300"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"ecdsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-10T06:57:16Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T07:11:34Z"},"get":{"body":"\nInvalid URL\n\n

      Invalid URL

      \nThe requested URL \"[no URL]\", is invalid.

      \nReference #9.4ad2c17.1594643789.2e6e546b\n\n","body_sha256":"2f14145bea2ea2547157cf88f19cd5598ac634bb7c33cce9e6dbebb5bc0904e3","headers":{"connection":"close","content_length":"208","content_type":"text/html","expires":"Mon, 13 Jul 2020 12:36:29 GMT","server":"AkamaiGHost","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 12:36:29 GMT"},{"key":"mime_version","value":"1.0"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-13T12:36:29Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T07:45:54Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T11:26:25Z"},"dhe":{"support":false,"timestamp":"2020-07-12T09:42:57Z"}}},"ipint":"1749722143","updated_at":"2020-07-14T07:11:34Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AKAMAI-ASN1","routed_prefix":"104.74.160.0/20","asn":"20940","country_code":"EU","name":"AKAMAI-ASN1","path":["6939","4766","20940","20940"]},"protocols":["443/https","80/http"],"ipinteger":"530860648"} +{"address":"125.64.242.125","ipint":"2101408381","updated_at":"2020-06-07T12:08:43Z","ip":"125.64.242.125","location":{"country_code":"CN","continent":"Asia","timezone":"Asia/Shanghai","latitude":34.7725,"longitude":113.7266,"registered_country":"China","registered_country_code":"CN","country":"China"},"autonomous_system":{"description":"CHINANET-BACKBONE No.31,Jin-rong Street","routed_prefix":"125.64.0.0/13","asn":"4134","country_code":"CN","name":"CHINANET-BACKBONE No.31,Jin-rong Street","path":["11164","4134"]},"ports":["53"],"protocols":["53/dns"],"ipinteger":"2113028221","version":"0","p53":{"dns":{"lookup":{"answers":[{"name":"c.afekv.com","response":"127.0.0.1","type":"A"}],"errors":false,"open_resolver":true,"questions":[{"name":"c.afekv.com","type":"A"}],"resolves_correctly":false,"support":true,"timestamp":"2020-06-07T12:08:43Z"}}},"tags":["dns"]} +{"metadata":{"os":"Windows,Windows"},"address":"223.6.106.57","ip":"223.6.106.57","p80":{"http":{"get":{"body":"\r\n\r\n\r\n\r\n\r\n网站访问报错\r\n\r\n\r\n\r\n\r\n

      \r\n\t
       
      \r\n
      \r\n \t

      抱歉!该网站可能由于以下原因无法访问!

      \r\n \t

      >>1、您访问的域名未绑定至主机;

      \r\n

      解决方法:需要网站管理员登录万网主机控制面板绑定域名,阿里云账号请登录阿里云虚拟主机控制台绑定。

      \r\n

      >>2、您正在使用IP访问;

      \r\n

      解决方法:请尝试使用域名进行访问。

      \r\n

      >>3、该站点已被网站管理员停止;

      \r\n

      解决方法:需要网站管理员登录万网主机控制面板开启站点,阿里云账号请登录阿里云虚拟主机控制台进行开通。

      \r\n
      \r\n
      \r\n\r\n\r\n","body_sha256":"03ff0e5d3aa0da08773bc502831005c19e261e17893bf6b802258eca186bb213","headers":{"cache_control":"private","content_length":"2320","content_type":"text/html","server":"Microsoft-IIS/7.5","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 18:58:45 GMT"}],"x_powered_by":"ASP.NET","x_ua_compatible":"IE=EmulateIE7"},"metadata":{"description":"Microsoft IIS 7.5","manufacturer":"Microsoft","product":"IIS","version":"7.5"},"status_code":"404","status_line":"404 Not Found","title":"网站访问报错","timestamp":"2020-07-07T18:58:45Z"}}},"ports":["80","21"],"version":"0","p21":{"ftp":{"banner":{"banner":"220 Microsoft FTP Service","metadata":{"description":"IIS","product":"IIS"},"timestamp":"2020-07-13T03:09:46Z"}}},"tags":["ftp","http"],"ipint":"3741739577","updated_at":"2020-07-13T03:09:46Z","location":{"country_code":"CN","continent":"Asia","timezone":"Asia/Shanghai","latitude":34.7725,"longitude":113.7266,"registered_country":"China","registered_country_code":"CN","country":"China"},"autonomous_system":{"description":"CNNIC-ALIBABA-CN-NET-AP Hangzhou Alibaba Advertising Co.,Ltd.","routed_prefix":"223.6.0.0/16","asn":"37963","country_code":"CN","name":"CNNIC-ALIBABA-CN-NET-AP Hangzhou Alibaba Advertising Co.,Ltd.","path":["11164","4134","58461","37963"]},"protocols":["21/ftp","80/http"],"ipinteger":"963249887"} +{"address":"118.80.98.108","ipint":"1984979564","updated_at":"2020-07-15T11:19:27Z","p7547":{"cwmp":{"get":{"body":"SOAP-ENV:Client\r\nHTTP Error: 404 Not Found\r\n\r\n\r\n\r\n\n","body_sha256":"45a4ae2a8dd1d89899853cc8d5e0f0710b04fbea30c4374460d78837a4ec549f","headers":{"content_length":"460","content_type":"text/xml; charset=utf-8","server":"gSOAP/2.7"},"status_code":"404","status_line":"404 Not Found","timestamp":"2020-07-15T11:19:27Z"}}},"ip":"118.80.98.108","location":{"country_code":"CN","continent":"Asia","timezone":"Asia/Shanghai","latitude":34.7725,"longitude":113.7266,"registered_country":"China","registered_country_code":"CN","country":"China"},"autonomous_system":{"description":"CHINA169-BACKBONE CHINA UNICOM China169 Backbone","routed_prefix":"118.80.0.0/15","asn":"4837","country_code":"CN","name":"CHINA169-BACKBONE CHINA UNICOM China169 Backbone","path":["7018","4837"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"1818382454","version":"0","tags":["cwmp"]} +{"metadata":{"os":"Ubuntu"},"address":"54.197.206.233","ip":"54.197.206.233","ports":["22"],"version":"0","tags":["ssh"],"p22":{"ssh":{"v2":{"banner":{"comment":"Ubuntu-4ubuntu0.3","raw":"SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3","software":"OpenSSH_7.6p1","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"xQ3V24jFrGEbdeo9pKmOnUY38C6ouglr/BXtofnFRmU="}},"metadata":{"description":"OpenSSH 7.6p1","product":"OpenSSH","version":"7.6p1"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"X+bJjyQPnOp27XethyCU8+j5mmamNeT7f3FRV/5hoXI=","y":"rm9SoWbq3q48YehducTIZHYM45IBGAt27Lya1VW5lfc="},"fingerprint_sha256":"df0caf535b4012fcd54936d5cd578c06ab35403396759ee48defa145f9b368d1","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ecdsa-sha2-nistp256","ssh-ed25519"],"kex_algorithms":["curve25519-sha256","curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group16-sha512","diffie-hellman-group18-sha512","diffie-hellman-group14-sha256","diffie-hellman-group14-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T22:38:49Z"}}},"ipint":"918933225","updated_at":"2020-07-14T22:38:49Z","location":{"country_code":"US","continent":"North America","city":"Ashburn","postal_code":"20149","timezone":"America/New_York","province":"Virginia","latitude":39.0481,"longitude":-77.4728,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AMAZON-AES","routed_prefix":"54.196.0.0/15","asn":"14618","country_code":"US","name":"AMAZON-AES","path":["16509","14618"]},"protocols":["22/ssh"],"ipinteger":"-372325066"} +{"address":"190.190.131.237","ipint":"3200156653","updated_at":"2020-07-15T04:21:22Z","p7547":{"cwmp":{"get":{"body":"401 Unauthorized

      Authorization Required

      This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required


      ","body_sha256":"721e96983952a29827a40e04ffddf6807212e81923bd0af4f1d90dcd482f504b","headers":{"connection":"Keep-Alive","content_length":"387","content_type":"text/html;charset=iso-8859-1","server":"Cisco-CcspCwmpTcpCR/1.0","www_authenticate":"Digest realm=\"Cisco_CCSP_CWMP_TCPCR\", nonce=\"020387fd8e8f6b8057a22012d4c7797a\", algorithm=\"MD5\", domain=\"/\", qop=\"auth\", stale=\"true\""},"status_code":"401","status_line":"401 Unauthorized","title":"401 Unauthorized","timestamp":"2020-07-15T04:21:22Z"}}},"ip":"190.190.131.237","location":{"country_code":"AR","continent":"South America","city":"Córdoba","postal_code":"5000","timezone":"America/Argentina/Cordoba","province":"Cordoba","latitude":-31.4015,"longitude":-64.1803,"registered_country":"Argentina","registered_country_code":"AR","country":"Argentina"},"autonomous_system":{"description":"Telecom Argentina S.A.","routed_prefix":"190.190.128.0/19","asn":"10481","country_code":"AR","name":"Telecom Argentina S.A.","path":["7018","6762","10481"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-310133058","version":"0","tags":["cwmp"]} +{"metadata":{"description":"ZyXEL","device_type":"DSL/cable modem","manufacturer":"ZyXEL"},"address":"66.112.84.19","ip":"66.112.84.19","ports":["443"],"version":"0","tags":["DSL/cable modem","embedded","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_key_id":"ad1bc8b3a63ecd9ee13486a7e810b33f9f0872ce","basic_constraints":{"is_ca":true},"subject_key_id":"ad1bc8b3a63ecd9ee13486a7e810b33f9f0872ce"},"fingerprint_md5":"033ffe7f62009b2d96a3c9b5716ebf2d","fingerprint_sha1":"42dcf11446c4eeac0499e79cd3741f462d320df6","fingerprint_sha256":"d6f2349d74e603c1713ea8ea6d998cbe0d0b972bd799521006c3f463ecd02abb","issuer":{"common_name":["ZyXEL"],"country":["TW"],"locality":["Hsinchu"],"organization":["ZyXEL"],"organizational_unit":["ZyXEL"],"province":["Taiwan"]},"issuer_dn":"C=TW, ST=Taiwan, L=Hsinchu, O=ZyXEL, OU=ZyXEL, CN=ZyXEL","redacted":false,"serial_number":"15988038931752720612","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"IafdaZjn9PJ2xfWAQ6CRQjNJBsg10B+3JEUHDSmSGp1Tripl/8mze+2vkHbQlmpQkKleq8SJl97kNSzqLmb5p90fo/26H+DGr/wXEJZyAiaiL44iujsfi/iNAHoiGKVvnUcphQXrJiCNFMLOKYyTJTws82hhvCfG4ApsQ8ODNFzctkZxDbzwlKy6FpzfbZFizpxVxhbEI0kARzuMypZLcCoVw3puitv8bE9pC3BB/G8zX3NtNLX/F/UHz9vdIUQRdoes8copj2RgkfK320b1HBJdlLwqpt4go0DclsDkSYvv7nWCcP3E6agSM7Y9iVIljgpQ2BVEpLqFkPMb4+V3Bw=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"93e6765ffd17b98ad29e6ecb514b63b3c70bad4dda38dc7ed89b1da1a1493144","subject":{"common_name":["ZyXEL"],"country":["TW"],"locality":["Hsinchu"],"organization":["ZyXEL"],"organizational_unit":["ZyXEL"],"province":["Taiwan"]},"subject_dn":"C=TW, ST=Taiwan, L=Hsinchu, O=ZyXEL, OU=ZyXEL, CN=ZyXEL","subject_key_info":{"fingerprint_sha256":"3fc15f8df6ffcb06e17163ec6fb69653e914e0164af33d1c80d499c69477a616","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"6s+GGPbeWRDYyyHHNO4h5IO/wHe+jWNp9Hqeksx8Jsf3icKNAmRWT3tcpkSlHrCLuR6x+yyCGpyImBASubQJGQZnrme3GDgHKDUDW5CltB5lY65oEVJO4gup3opeLFKXoe1A6i0e5zHcSSu3QKDold8BrTlL3xImVJdeHkbqOd3ukRh3DWk3CowIwA9yBKnIhbyFuAkpwzDwYGva++PDl1JpRN/UYxhZu/DZtuZmlvGIn8EydPKdGK3A25Y8+JV6fLxPTR05n8rPGsBaPg6caMzO0AdruuCuC0o/ReedkUquqw8Xzc3MVTW4gvBL6TUUMQHnAu+YwVZChW8LPB7CWQ=="}},"tbs_fingerprint":"37e2f9e3bf391635e77af7bd6eb08a86080c6429f9f702b5b711a641bb4facdf","tbs_noct_fingerprint":"37e2f9e3bf391635e77af7bd6eb08a86080c6429f9f702b5b711a641bb4facdf","validation_level":"unknown","validity":{"end":"2050-01-01T03:55:48Z","length":"1099699200","start":"2015-02-26T03:55:48Z"},"version":"3"}},"cipher_suite":{"id":"0x0035","name":"TLS_RSA_WITH_AES_256_CBC_SHA"},"ocsp_stapling":false,"session_ticket":{"length":"160"},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.0","timestamp":"2020-07-09T18:46:22Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T10:33:18Z"},"get":{"body":"\r\n\r\n\r\n\r\nCentury Link Modem Configurator\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n
      \r\n\t
      \r\n\t\t

      CenturyLink® Modem Configuration Zyxel PK5001Z

      \r\n\t\tCenturyLink.com\t\thelp\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n\t\r\n
      \r\n\t
      \r\n\t \r\n\t\t
      \r\n\t\t\t

      Modem GUI Login

      \t\t\t\r\n\t\t
      \r\n\t\t\t\t\r\n
      \r\n

      1. Enter the administrator username and password below.

      \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \t\t\t\t \r\n
      Administrator Username:
      Administrator Password:
      \r\n Show Password The default administrator username and password can be found on the sticker located under the modem.
      \r\n
      \r\n
      \r\n\t\t

      2. Click "Apply" to log in.

      \r\n\t\t Apply\r\n
      \r\n\t\t
      \r\n\t\t
      \r\n\t\t\r\n\t
      \r\n\t
      \r\n\t
      Copyright © 2018, CenturyLink Inc., All Rights Reserved.
      \r\n
      \r\n\r\n\r\n\r\n","body_sha256":"ddf732d5945eef9017b69d0bafa4bbaa039ea73df6a391040c9e00488df9d31e","headers":{"content_type":"text/html; charset=iso-8859-1","unknown":[{"key":"binary","value":"login.cgi"}]},"status_code":"200","status_line":"200 OK","title":"Century Link Modem Configurator","timestamp":"2020-07-14T01:11:54Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T05:10:55Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T07:47:19Z"},"dhe":{"support":false,"timestamp":"2020-07-12T02:33:50Z"}}},"ipint":"1114657811","updated_at":"2020-07-14T10:33:18Z","location":{"country_code":"US","continent":"North America","city":"Ville Platte","postal_code":"70586","timezone":"America/Chicago","province":"Louisiana","latitude":30.695,"longitude":-92.2697,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"CENTURYLINK-LEGACY-LIGHTCORE","routed_prefix":"66.112.64.0/18","asn":"22561","country_code":"US","name":"CENTURYLINK-LEGACY-LIGHTCORE","path":["7018","3356","209","22561"]},"protocols":["443/https"],"ipinteger":"324300866"} +{"address":"104.99.249.168","ip":"104.99.249.168","p80":{"http":{"get":{"body":"\nInvalid URL\n\n

      Invalid URL

      \nThe requested URL \"[no URL]\", is invalid.

      \nReference #9.2415da8b.1592939680.48aa3754\n\n","body_sha256":"c20a27129a08cb8a89d48a71c0ca3096f7617c12ce01209735eaedb78559cd07","headers":{"connection":"close","content_length":"209","content_type":"text/html","expires":"Tue, 23 Jun 2020 19:14:40 GMT","server":"AkamaiGHost","unknown":[{"key":"mime_version","value":"1.0"},{"key":"date","value":"Tue, 23 Jun 2020 19:14:40 GMT"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-06-23T19:14:40Z"}}},"ports":["80","443"],"version":"0","tags":["akamai","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cacerts.digicert.com/DigiCertSecureSiteECCCA-1.crt"],"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"db35445d2beb53af9e0bf5713da39973aefb5c53","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.1"},{"id":"2.23.140.1.2.2"}],"crl_distribution_points":["http://crl3.digicert.com/DigiCertSecureSiteECCCA-1.crl","http://crl4.digicert.com/DigiCertSecureSiteECCCA-1.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"value":"1"},"signed_certificate_timestamps":[{"log_id":"9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOM=","signature":"BAMASDBGAiEAzwiugzsb80yrmM/71G6ExU/J+H7XiJWrt3VItllqxGUCIQCey7i1NCQEd+S5XbFpuVbKoaOS8HdOflplCWsMVFfdRg==","timestamp":"1590149626","version":"0"},{"log_id":"XNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbHDso=","signature":"BAMARzBFAiAWrJLjME4P8LXr4C39aR2flfB6KD0cdNQG7xfvkNUo0QIhAPAUbQaCSP+DdhTTXhUWXnNKeX32AONolWQTmKu0c6FJ","timestamp":"1590149626","version":"0"}],"subject_alt_name":{"dns_names":["uat.accounts.amadeus.com","btprd.accounts.amadeus.com","dev.accounts.sellingplatformconnect.amadeus.com","uat.accounts.sellingplatformconnect.amadeus.com","pdt.accounts.amadeus.com","btprd.accounts.sellingplatformconnect.amadeus.com","dev.accounts.amadeus.com","fvt.accounts.sellingplatformconnect.amadeus.com","mig.accounts.amadeus.com","mig.accounts.sellingplatformconnect.amadeus.com","fvt.accounts.amadeus.com","ppt.accounts.amadeus.com","ppt.accounts.sellingplatformconnect.amadeus.com","skl.accounts.sellingplatformconnect.amadeus.com","skl.accounts.amadeus.com","pdt.accounts.sellingplatformconnect.amadeus.com"]},"subject_key_id":"855b515be601b71cca569c1b910ababbd2435273"},"fingerprint_md5":"2e1f623d3b8dcab4b61226208b654211","fingerprint_sha1":"eb01e647f51b292a48e5df741a05889432e84a60","fingerprint_sha256":"7b75e814cf0ef182bece8fd56ca3771228e5a94363674f97f5b596b0f06e7016","issuer":{"common_name":["DigiCert Secure Site ECC CA-1"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Secure Site ECC CA-1","names":["fvt.accounts.sellingplatformconnect.amadeus.com","fvt.accounts.amadeus.com","ppt.accounts.amadeus.com","skl.accounts.sellingplatformconnect.amadeus.com","btprd.accounts.sellingplatformconnect.amadeus.com","dev.accounts.amadeus.com","mig.accounts.amadeus.com","pdt.accounts.sellingplatformconnect.amadeus.com","dev.accounts.sellingplatformconnect.amadeus.com","mig.accounts.sellingplatformconnect.amadeus.com","ppt.accounts.sellingplatformconnect.amadeus.com","uat.accounts.amadeus.com","btprd.accounts.amadeus.com","uat.accounts.sellingplatformconnect.amadeus.com","pdt.accounts.amadeus.com","skl.accounts.amadeus.com"],"redacted":false,"serial_number":"3465543625199735090397370805039790939","signature":{"self_signed":false,"signature_algorithm":{"name":"ECDSAWithSHA256","oid":"1.2.840.10045.4.3.2"},"valid":true,"value":"MEUCIQCmKZUMjnhR/wuQLvb3O6r08VTplPfWWYZeSlDD40zQSQIgPQMWEIrzXe/m/g/6A6Ic8MgLWE/rqQS//QFpkwRX/3A="},"signature_algorithm":{"name":"ECDSAWithSHA256","oid":"1.2.840.10045.4.3.2"},"spki_subject_fingerprint":"c7461c74f249ecb6a6e71306f48efd4c96546d4fc6d4195c11ea637fa1df9fcf","subject":{"common_name":["uat.accounts.amadeus.com"],"country":["ES"],"locality":["Madrid"],"organization":["Amadeus IT Group, S.A."],"province":["MADRID"]},"subject_dn":"C=ES, ST=MADRID, L=Madrid, O=Amadeus IT Group, S.A., CN=uat.accounts.amadeus.com","subject_key_info":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","pub":"BNb9/8VdmNx9oQNlnL2awtKZMiMSRz55u888aYPYc+463S/RJ7rgb4SaiYd4hyr6GfiYpkIRspdPzONjuMgf3u0=","x":"1v3/xV2Y3H2hA2WcvZrC0pkyIxJHPnm7zzxpg9hz7jo=","y":"3S/RJ7rgb4SaiYd4hyr6GfiYpkIRspdPzONjuMgf3u0="},"fingerprint_sha256":"7b2e7edef810c7402bb2cf76e9cf7f0ee103f58a03690268b77848011a0c0216","key_algorithm":{"name":"ECDSA"}},"tbs_fingerprint":"86553c20ab628fc4143e3d470285e2fe9a7bc96c4a2c33cd25d84e78dafe6fc6","tbs_noct_fingerprint":"e2e068cf18c09c6775d45f2ce0bd15ce5733fec27cfd143525b93a0b53c6f42c","validation_level":"OV","validity":{"end":"2021-08-21T12:00:00Z","length":"39441600","start":"2020-05-22T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"03de503556d14cbb66f0a3e21b1bc397b23dd155","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl3.digicert.com/DigiCertGlobalRootCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"db35445d2beb53af9e0bf5713da39973aefb5c53"},"fingerprint_md5":"9dd797aed8aa7e7fa54f87dd7b04fe03","fingerprint_sha1":"9370c73f6c67904310c912bae29694418d120825","fingerprint_sha256":"99935e20424535ec016f337b2be68f1349de66cce4ca5ab367f8f3738215b833","issuer":{"common_name":["DigiCert Global Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","redacted":false,"serial_number":"15099003683604006848814258862226398944","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"q/3IH6J/UvB/6Q9OECLSeul5xkW0PvhDzYJhcRJOZeWYWU575/+8ZnDJ/JhYx4wbEZ+PVCDLiVhiKU3//F8W7ZdsVLqhdVVrOoZJv+JZar3RZ1rgwhavgHB6Sq142nTSzG5J3O7+i2NZj4MJVM5uKPDUx659T2m2CsjzzXhFRnacQrN1QFh7+EUKXmxB1oFMcC8k4BSi4ZYvsAAvb8Xh0g4fHEq8fbAwffNSfEvY3JEbAjeRVA31J1ifBMwliRzPHGLfeyiYwvPQIUJ9ODieH5vDzLq9XvtdmFzBPXlFnHKI9LphN6sUVXdf4B+dao9drFZEifuXbKlQ/2TRZPFeBg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"6ec762d32a390346fb12c1cbecfffbf30e53f8bc8aefd25f6719e2495e0128b8","subject":{"common_name":["DigiCert Secure Site ECC CA-1"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"subject_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Secure Site ECC CA-1","subject_key_info":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","pub":"BOa7deFrry7x5/s2SvikUooGyUWExkR4PAPEJIhU5fEuiTN6z10OOUu5mcBxqlp7yhDOMODxD4PcdHvJGRm93xo=","x":"5rt14WuvLvHn+zZK+KRSigbJRYTGRHg8A8QkiFTl8S4=","y":"iTN6z10OOUu5mcBxqlp7yhDOMODxD4PcdHvJGRm93xo="},"fingerprint_sha256":"679ff646d597ac2bef26c2d7759e2df4711a560db57bd02173350b9fdb668383","key_algorithm":{"name":"ECDSA"}},"tbs_fingerprint":"1b75977b353b45afdf05381ce8b4fb63a6674772d12225d371ec5fdcd7ac911e","tbs_noct_fingerprint":"1b75977b353b45afdf05381ce8b4fb63a6674772d12225d371ec5fdcd7ac911e","validation_level":"unknown","validity":{"end":"2029-02-15T12:45:24Z","length":"315619200","start":"2019-02-15T12:45:24Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02B","name":"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":true,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"160","lifetime_hint":"7300"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"ecdsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T16:19:27Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T07:23:59Z"},"get":{"body":"\nInvalid URL\n\n

      Invalid URL

      \nThe requested URL \"[no URL]\", is invalid.

      \nReference #9.3715da8b.1594673861.20af4ccd\n\n","body_sha256":"cac301a41fce45ef7fb6706328e72dc7001ffaae56adcfbd9298a10b92d990b3","headers":{"connection":"close","content_length":"209","content_type":"text/html","expires":"Mon, 13 Jul 2020 20:57:41 GMT","server":"AkamaiGHost","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 20:57:41 GMT"},{"key":"mime_version","value":"1.0"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-13T20:57:40Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T08:41:05Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T09:54:10Z"},"dhe":{"support":false,"timestamp":"2020-07-12T14:26:45Z"}}},"ipint":"1751382440","updated_at":"2020-07-14T07:23:59Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"VOCUS-RETAIL-AU Vocus Retail","routed_prefix":"104.99.240.0/20","asn":"9443","country_code":"AU","name":"VOCUS-RETAIL-AU Vocus Retail","path":["6939","4826","9443"]},"protocols":["443/https","80/http"],"ipinteger":"-1460051096"} +{"metadata":{"os":"Ubuntu"},"address":"69.164.201.239","ip":"69.164.201.239","ports":["22"],"version":"0","tags":["ssh"],"p22":{"ssh":{"v2":{"banner":{"comment":"Ubuntu-4ubuntu0.3","raw":"SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3","software":"OpenSSH_7.6p1","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"gcvxudJQGdXNPG028pMHAS4eVVe/NNRa7XUZJGwqfnE="}},"metadata":{"description":"OpenSSH 7.6p1","product":"OpenSSH","version":"7.6p1"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"9MoFPnwNAEbvTOiRg66quKXQHRPwVEFknlp4TDf5M+Q=","y":"Qa2u5n/qmrB07trQhBcyfaHkvw3qqPGFS93zreJjHWs="},"fingerprint_sha256":"1662005e4c57d4b73bcd38f7be784375f5f86e1d0c64a112f91f7754d94f8769","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ecdsa-sha2-nistp256","ssh-ed25519"],"kex_algorithms":["curve25519-sha256","curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group16-sha512","diffie-hellman-group18-sha512","diffie-hellman-group14-sha256","diffie-hellman-group14-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T14:45:28Z"}}},"ipint":"1168427503","updated_at":"2020-07-14T14:45:28Z","location":{"country_code":"US","continent":"North America","city":"Dallas","postal_code":"75270","timezone":"America/Chicago","province":"Texas","latitude":32.7787,"longitude":-96.8217,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"LINODE-AP Linode, LLC","routed_prefix":"69.164.192.0/20","asn":"63949","country_code":"US","name":"LINODE-AP Linode, LLC","path":["7018","1299","63949"]},"protocols":["22/ssh"],"ipinteger":"-271997883"} +{"address":"36.72.40.191","ipint":"608708799","updated_at":"2020-06-30T16:37:29Z","ip":"36.72.40.191","p80":{"http":{"get":{"body":"\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n","body_sha256":"7df262d411f096041e4ce30519c15fd38d684ffb6095c5ce3bc50db371e5676f","headers":{"cache_control":"no-cache, no-store, max-age=0","connection":"Keep-Alive","content_type":"text/html","pragma":"no-cache","x_frame_options":"SAMEORIGIN"},"status_code":"200","status_line":"200 OK","timestamp":"2020-06-30T16:37:29Z"}}},"location":{"country_code":"ID","continent":"Asia","city":"Jakarta","timezone":"Asia/Jakarta","province":"Jakarta","latitude":-6.1741,"longitude":106.8296,"registered_country":"Indonesia","registered_country_code":"ID","country":"Indonesia"},"autonomous_system":{"description":"TELKOMNET-AS-AP PT Telekomunikasi Indonesia","routed_prefix":"36.72.40.0/21","asn":"7713","country_code":"ID","name":"TELKOMNET-AS-AP PT Telekomunikasi Indonesia","path":["7018","6453","7713","7713"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"-1087879132","version":"0","tags":["http"]} +{"address":"23.221.111.171","ip":"23.221.111.171","p80":{"http":{"get":{"body":"\nInvalid URL\n\n

      Invalid URL

      \nThe requested URL \"[no URL]\", is invalid.

      \nReference #9.6734dfad.1593520844.35fe878\n\n","body_sha256":"f5d508ac5e5a03f204518192d3bc789ea199d2ec35587a97dc83b1538d36a37f","headers":{"connection":"close","content_length":"208","content_type":"text/html","expires":"Tue, 30 Jun 2020 12:40:44 GMT","server":"AkamaiGHost","unknown":[{"key":"mime_version","value":"1.0"},{"key":"date","value":"Tue, 30 Jun 2020 12:40:44 GMT"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-06-30T12:40:44Z"}}},"ports":["80"],"version":"0","tags":["akamai","http"],"p443":{"https":{"rsa_export":{"support":false,"timestamp":"2020-07-09T06:33:43Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T10:09:11Z"},"dhe":{"support":false,"timestamp":"2020-07-12T11:57:56Z"}}},"ipint":"400388011","updated_at":"2020-07-12T11:57:56Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AKAMAI-AS","routed_prefix":"23.221.96.0/20","asn":"16625","country_code":"US","name":"AKAMAI-AS","path":["11164","20940","16625"]},"protocols":["80/http"],"ipinteger":"-1418732265"} +{"address":"74.206.113.119","ip":"74.206.113.119","p80":{"http":{"get":{"body":"default backend - 404","body_sha256":"673c79de9e33392bc95881a3d58488cf44e0509352a299e09bf119e2b09d170a","headers":{"connection":"keep-alive","content_length":"21","content_type":"text/plain; charset=utf-8","server":"openresty/1.15.8.1","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 09:51:24 GMT"}]},"metadata":{"description":"openresty 1.15.8.1","product":"openresty","version":"1.15.8.1"},"status_code":"404","status_line":"404 Not Found","timestamp":"2020-07-07T09:51:24Z"}}},"ports":["80","443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"basic_constraints":{"is_ca":false},"extended_key_usage":{"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"subject_alt_name":{"dns_names":["ingress.local"]}},"fingerprint_md5":"922da10d9b858139ae56a832c4843b4c","fingerprint_sha1":"a910bb9cc398302684481304144cb20c3bacd011","fingerprint_sha256":"edab61e3881d8ee4e92da095ec650ebd5f6bfd6552b2eeff7372bf4209a3b557","issuer":{"common_name":["Kubernetes Ingress Controller Fake Certificate"],"organization":["Acme Co"]},"issuer_dn":"O=Acme Co, CN=Kubernetes Ingress Controller Fake Certificate","names":["ingress.local"],"redacted":false,"serial_number":"32903508623651722958197314627355044743","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"An7TwlMbkCQ99OwUIujwquTrK6TwzByQSVq73q11kHnUtZrajnFNAqkWRD4kwYG2XL4BMI8CWoQ6MEruIfjNsDLbYaRllEOEM2FX1TVuyY8iL4gmY+BB8edjdoBWnpVRjBMSGbSmqh4mNhaAKQr7ykcjrGOu0wiwaoXCc1Be7/+FX1nJuW92e47emYiHels2S3dYUiUrpUTe5NLwKeiZ3TPTFwrAzYBwFLH8H+OCtaXlQ3HDNa6KFjn8OlbUB2wrLJsSI4+l7NhhVVC7UmMbUJ/q2gkims0ayPgMJwelQTuTNHZ1nLQ/tC8esPH5DO0vjmiWnb44hy3B7bPDlf2vHA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d22a5198cb860dc7b37a00e63641d3ad001cc3b434ef2a37495d9b299b737340","subject":{"common_name":["Kubernetes Ingress Controller Fake Certificate"],"organization":["Acme Co"]},"subject_dn":"O=Acme Co, CN=Kubernetes Ingress Controller Fake Certificate","subject_key_info":{"fingerprint_sha256":"e93ac4e0ed4ce96392cbfcfd11e2b0fabcb4f20651b7534bbbd9802afd1bb78c","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"2ZXBsrccMnyheXLcXK4wUls980Ewgf2fTtYh6SbZp9RFAMH1OAHDHIj6sOOXMsUyV8+qGKNklLVhBsV8q+di7fXJFmHENdig//7HpVu0ngEgCk9be/PffM5TuIEYaYGnmn3CDeEzJBhB6J/OafzLlJ3oWF+43noqetVwGdbOtcfcDiGVfx/ncVqk3UO+vkuh5h9PsKkBe37FOkzG0t7qu4SNI91DO3/CGQSlKZg6+UVFpthTWh1Z3WsAflZXArO1own9dZGwFfKA+dWtgr+8h0GNtIRygS2/YvNDUos85hBP5sBzFCIuh9C99QCqmJQb12X0pOz15jtriVNHUXh4Nw=="}},"tbs_fingerprint":"33c21923feea81851d2af8eceb6b11325b6f87e78aa7fe0945718cf1e080ee13","tbs_noct_fingerprint":"33c21923feea81851d2af8eceb6b11325b6f87e78aa7fe0945718cf1e080ee13","validation_level":"unknown","validity":{"end":"2021-06-18T14:54:46Z","length":"31536000","start":"2020-06-18T14:54:46Z"},"version":"3"}},"cipher_suite":{"id":"0xCCA8","name":"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"176","lifetime_hint":"600"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2","timestamp":"2020-07-09T18:25:12Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T11:19:55Z"},"get":{"body":"default backend - 404","body_sha256":"673c79de9e33392bc95881a3d58488cf44e0509352a299e09bf119e2b09d170a","headers":{"connection":"keep-alive","content_length":"21","content_type":"text/plain; charset=utf-8","server":"openresty/1.15.8.1","strict_transport_security":"max-age=15724800; includeSubDomains","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 18:57:48 GMT"}]},"metadata":{"description":"openresty 1.15.8.1","product":"openresty","version":"1.15.8.1"},"status_code":"404","status_line":"404 Not Found","timestamp":"2020-07-13T18:57:47Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T06:54:47Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T07:14:32Z"},"dhe":{"support":false,"timestamp":"2020-07-12T09:38:17Z"}}},"ipint":"1255043447","updated_at":"2020-07-14T11:19:55Z","location":{"country_code":"US","continent":"North America","city":"Phoenix","postal_code":"85017","timezone":"America/Phoenix","province":"Arizona","latitude":33.5141,"longitude":-112.1235,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"IMDC-AS12025","routed_prefix":"74.206.96.0/19","asn":"12025","country_code":"US","name":"IMDC-AS12025","path":["11164","6461","12025"]},"protocols":["443/https","80/http"],"ipinteger":"2003947082"} +{"metadata":{"os":"Ubuntu"},"address":"8.208.13.88","ip":"8.208.13.88","ports":["22"],"version":"0","tags":["ssh"],"p22":{"ssh":{"v2":{"banner":{"comment":"Ubuntu-4ubuntu0.2","raw":"SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.2","software":"OpenSSH_7.6p1","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"ZFaIAzEAWqBTdagv0LIFvJIueKdQ8vmdGnK07i0YXmo="}},"metadata":{"description":"OpenSSH 7.6p1","product":"OpenSSH","version":"7.6p1"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"Ms74b/YkJXyNQ6y3L4y8QIlJnMIqhWd8jnvHFya6+Jw=","y":"TU67agcKGBsf/4qBTNjrmGz0QAF03fIQ/HaKJAfIBt0="},"fingerprint_sha256":"be73dafdfef433d7f9dd55abc2c80a41c576f435e9811de27dc977960ad8996b","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ecdsa-sha2-nistp256"],"kex_algorithms":["curve25519-sha256","curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group16-sha512","diffie-hellman-group18-sha512","diffie-hellman-group14-sha256","diffie-hellman-group14-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T06:12:35Z"}}},"ipint":"147852632","updated_at":"2020-07-14T06:12:35Z","location":{"country_code":"SG","continent":"Asia","timezone":"Asia/Singapore","latitude":1.3667,"longitude":103.8,"registered_country":"Singapore","registered_country_code":"SG","country":"Singapore"},"autonomous_system":{"description":"CNNIC-ALIBABA-US-NET-AP Alibaba (US) Technology Co., Ltd.","routed_prefix":"8.208.0.0/19","asn":"45102","country_code":"CN","name":"CNNIC-ALIBABA-US-NET-AP Alibaba (US) Technology Co., Ltd.","path":["7018","1299","45102"]},"protocols":["22/ssh"],"ipinteger":"1477300232"} +{"address":"47.103.96.211","ipint":"795304147","p8080":{"http":{"get":{"body":"\n\n\n\n\n \n Apache Tomcat/7.0.52\n \n \n \n \n\n \n

      \n \n
      \n

      Apache Tomcat/7.0.52

      \n
      \n
      \n
      \n

      If you're seeing this, you've successfully installed Tomcat. Congratulations!

      \n
      \n \n
      \n \n \n \n
      \n \n
      \n
      \n
      \n

      Developer Quick Start

      \n \n \n
      \n
      \n

      Examples

      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n

      Managing Tomcat

      \n

      For security, access to the manager webapp is restricted.\n Users are defined in:

      \n
      $CATALINA_HOME/conf/tomcat-users.xml
      \n

      In Tomcat 7.0 access to the manager application is split between\n different users.   Read more...

      \n
      \n

      Release Notes

      \n

      Changelog

      \n

      Migration Guide

      \n

      Security Notices

      \n
      \n
      \n
      \n
      \n

      Documentation

      \n

      Tomcat 7.0 Documentation

      \n

      Tomcat 7.0 Configuration

      \n

      Tomcat Wiki

      \n

      Find additional important configuration information in:

      \n
      $CATALINA_HOME/RUNNING.txt
      \n

      Developers may be interested in:

      \n \n
      \n
      \n
      \n
      \n

      Getting Help

      \n

      FAQ and Mailing Lists

      \n

      The following mailing lists are available:

      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n

      Other Downloads

      \n \n
      \n
      \n
      \n
      \n

      Other Documentation

      \n \n
      \n
      \n
      \n
      \n

      Get Involved

      \n \n
      \n
      \n
      \n
      \n

      Miscellaneous

      \n \n
      \n
      \n
      \n
      \n

      Apache Software Foundation

      \n \n
      \n
      \n
      \n
      \n

      Copyright ©1999-2020 Apache Software Foundation. All Rights Reserved

      \n
      \n \n\n\n","body_sha256":"33ad8e7bb70ad12df9a80fe9df8780dbc7af7f0a4b0a2358ac0dd0da5c929c35","headers":{"content_type":"text/html;charset=ISO-8859-1","server":"Apache-Coyote/1.1","unknown":[{"key":"date","value":"Fri, 10 Jul 2020 18:23:27 GMT"}]},"metadata":{"description":"Apache Coyote 1.1","manufacturer":"Apache","product":"Coyote","version":"1.1"},"status_code":"200","status_line":"200 OK","title":"Apache Tomcat/7.0.52","timestamp":"2020-07-10T18:23:27Z"}}},"updated_at":"2020-07-10T18:23:27Z","ip":"47.103.96.211","location":{"country_code":"CN","continent":"Asia","timezone":"Asia/Shanghai","latitude":34.7725,"longitude":113.7266,"registered_country":"China","registered_country_code":"CN","country":"China"},"autonomous_system":{"description":"CNNIC-ALIBABA-CN-NET-AP Hangzhou Alibaba Advertising Co.,Ltd.","routed_prefix":"47.102.0.0/15","asn":"37963","country_code":"CN","name":"CNNIC-ALIBABA-CN-NET-AP Hangzhou Alibaba Advertising Co.,Ltd.","path":["11164","4134","4812","4811","37963"]},"ports":["8080"],"protocols":["8080/http"],"ipinteger":"-748656849","version":"0","tags":["http"]} +{"address":"2.92.212.172","ipint":"39638188","updated_at":"2020-07-15T10:45:17Z","p7547":{"cwmp":{"get":{"body":"401 Unauthorized\n

      401 Unauthorized

      \nThe requested method needs authorization.\n\n","body_sha256":"06e426bf500904d413dd2d56725e95502fe9afd3121c281c5a0a7fba4464970e","headers":{"connection":"close","content_type":"text/html","unknown":[{"key":"date","value":"Wed, 15 Jul 2020 13:45:07 GMT"}],"www_authenticate":"Digest realm=\"SERCOMM CPE Authentication\",nonce=\"1594820707\",algorithm=\"MD5\",qop=\"auth\""},"status_code":"401","status_line":"401 Unauthorized","title":"401 Unauthorized","timestamp":"2020-07-15T10:45:17Z"}}},"ip":"2.92.212.172","location":{"country_code":"RU","continent":"Europe","city":"Moscow","postal_code":"125009","timezone":"Europe/Moscow","province":"Moscow","latitude":55.7527,"longitude":37.6172,"registered_country":"Russia","registered_country_code":"RU","country":"Russia"},"autonomous_system":{"description":"CORBINA-AS OJSC Vimpelcom","routed_prefix":"2.92.0.0/14","asn":"8402","country_code":"RU","name":"CORBINA-AS OJSC Vimpelcom","path":["7018","3356","8402","8402"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-1395368958","version":"0","tags":["cwmp"]} +{"metadata":{"os":"CentOS,CentOS"},"address":"51.158.191.23","ip":"51.158.191.23","p80":{"http":{"get":{"body":"
      Website is under construction !
      ","body_sha256":"44555c18e38726e73be2d7d2eed0e6aa00a1327f98f5b23a2ffcf40ad9937eb1","headers":{"cache_control":"no-store, no-cache, must-revalidate, post-check=0, pre-check=0","content_length":"69","content_type":"text/html; charset=UTF-8","expires":"Thu, 19 Nov 1981 08:52:00 GMT","pragma":"no-cache","server":"Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 08:28:02 GMT"}],"x_powered_by":"PHP/5.4.16"},"metadata":{"description":"Apache httpd 2.4.6","manufacturer":"Apache","product":"httpd","version":"2.4.6"},"status_code":"200","status_line":"200 OK","timestamp":"2020-07-14T08:28:23Z"}}},"ports":["80","22","443"],"version":"0","tags":["http","ssh"],"p443":{"https":{"heartbleed":{"heartbeat_enabled":true,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T04:14:18Z"},"get":{"body":"\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n 51.158.191.23\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n
      \r\n
      \r\n
      \r\n

      Welcome To 51.158.191.23

      \r\n
      \r\n Find Out More\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n
      \r\n

      We've got what you need!

      \r\n
      \r\n

      Start Bootstrap has everything you need to get your new website up and running in no time! All of the templates and themes on Start Bootstrap are open source, free to download, and easy to use. No strings attached!

      \r\n Get Started!\r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n
      \r\n

      At Your Service

      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n

      Sturdy Templates

      \r\n

      Our templates are updated regularly so they don't break.

      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n

      Ready to Ship

      \r\n

      You can use this theme as is, or you can make changes!

      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n

      Up to Date

      \r\n

      We update dependencies to keep things fresh.

      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n

      Made with Love

      \r\n

      You have to make your websites with love these days!

      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n

      Let's Get In Touch!

      \r\n
      \r\n

      Ready to start your next project with us? That's great! Give us a call or send us an email and we will get back to you as soon as possible!

      \r\n
      \r\n
      \r\n \r\n

      contact@51.158.191.23

      \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n\r\n\r\n\r\n","body_sha256":"25ff3065f34ad1af02cb39b8d3888562f59af492506e266b00bdf0c461168885","headers":{"content_type":"text/html; charset=UTF-8","server":"Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 22:14:29 GMT"}],"x_powered_by":"PHP/5.4.16"},"metadata":{"description":"Apache httpd 2.4.6","manufacturer":"Apache","product":"httpd","version":"2.4.6"},"status_code":"200","status_line":"200 OK","title":"51.158.191.23","timestamp":"2020-07-13T22:14:50Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqsqmj//////////w=="}},"support":true,"timestamp":"2020-07-12T14:15:25Z"}}},"p22":{"ssh":{"v2":{"banner":{"raw":"SSH-2.0-OpenSSH_7.4","software":"OpenSSH_7.4","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"kKYzD4RnQuOKrd2BIzuA/zqd+ZSqgMgq4/A5Bg6RbDo="}},"metadata":{"description":"OpenSSH 7.4","product":"OpenSSH","version":"7.4"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ssh-rsa","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"fingerprint_sha256":"57fb76e3fcfac8ea19d2a6ec1b1232a5a881ac9301d9a1d9f2d05dd44d22ed6d","key_algorithm":"ssh-rsa","rsa_public_key":{"exponent":"65537","length":"2048","modulus":"9TPHSZMB7CrxZHIcC4ri5nsN9xTcD1aXQv0aX+vEk2w6WIsFEMRtr2w1HtT+au+7UjOUKBKRR92Zyy2pRNKF7IPHkM7/+3hLKOGLgqcdmQ/OOFhbBvpzfSTfZGGwSe/zdqW66UiA63b6RSxqX2OAJ6kJkhcJUlOnLCK1KM6XRwlKfxDWmPMaRREk8WC8mn+qoMsjQPcI8mPDvqHnQLEuWwJ4JbxEp8ttRVTgNscmlMNPV1vQqAdFrcot/FVQh7anS8zByw93hf4VGASe5uf1b7nrB99tnePoWk8KkGuGDSMMwY0lvfgxdXJUKKsa6vrBBo3ocgikt9QppKM/Iv9h6Q=="}},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com","aes128-cbc","aes192-cbc","aes256-cbc","blowfish-cbc","cast128-cbc","3des-cbc"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-dss","ssh-rsa","rsa-sha2-512","rsa-sha2-256"],"kex_algorithms":["curve25519-sha256","curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group16-sha512","diffie-hellman-group18-sha512","diffie-hellman-group-exchange-sha1","diffie-hellman-group14-sha256","diffie-hellman-group14-sha1","diffie-hellman-group1-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com","aes128-cbc","aes192-cbc","aes256-cbc","blowfish-cbc","cast128-cbc","3des-cbc"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T10:29:26Z"}}},"ipint":"866041623","updated_at":"2020-07-14T10:29:26Z","protocols":["22/ssh","443/https","80/http"],"ipinteger":"398433843"} +{"p22":{"ssh":{"v2":{"banner":{"raw":"SSH-2.0-XXXX","software":"XXXX","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"ICUY7NxS2bkjk7HMzWhAB8Wcmdu7nSvigoEkTVgxvFQ="}},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha1"},"host_key_algorithm":"ssh-rsa","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha1"}},"server_host_key":{"fingerprint_sha256":"821abae0bf03517a18ff9cceb2167d3be632a35ffdcdeac92888ec3bb5d3490e","key_algorithm":"ssh-rsa","rsa_public_key":{"exponent":"65537","length":"2048","modulus":"mqoSqdYN4kyPMMT0VwSD6W9eOhO7aKuNOHRtI4Po4Xjm3LXJQ9l0I3Md628kYAYvjvOpZLImHVhw/OxXlVJaGlJTOdbLSKqzigJv2aUbo3H69/r8jhq1eLtJLpEMEW8zdljN/daBIaYRThX83PApgDmmELteqhE4QbdYvu4XK7scbKqL/zCDm8vEUm6esVl4GllB39u6YAdtEqR+kq8YQYWTCwJgTlWZtZdzZy3Xiwjpj7D4ziFLjF0R+SE+F3d1dKUA6ki4c3lwpsxy+abLUpy4aKI/WbTDEaYfdmCY33pxFh0PKugaAnfIcTDe9C59puKB5zBRLqEXYak5tuhwMQ=="}},"support":{"client_to_server":{"ciphers":["aes128-ctr","aes256-ctr","3des-ctr"],"compressions":["zlib@openssh.com","none"],"macs":["hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","ssh-dss"],"kex_algorithms":["curve25519-sha256@libssh.org","ecdh-sha2-nistp521","ecdh-sha2-nistp384","ecdh-sha2-nistp256","diffie-hellman-group14-sha1","diffie-hellman-group1-sha1","kexguess2@matt.ucc.asn.au"],"server_to_client":{"ciphers":["aes128-ctr","aes256-ctr","3des-ctr"],"compressions":["zlib@openssh.com","none"],"macs":["hmac-sha1"]}},"timestamp":"2020-07-14T04:36:39Z"}}},"address":"155.93.101.34","ipint":"2606589218","updated_at":"2020-07-14T04:36:39Z","ip":"155.93.101.34","location":{"country_code":"NG","continent":"Africa","city":"Aba","timezone":"Africa/Lagos","province":"Abia State","latitude":5.1069,"longitude":7.3748,"registered_country":"Nigeria","registered_country_code":"NG","country":"Nigeria"},"autonomous_system":{"description":"UNSPECIFIED","routed_prefix":"155.93.101.0/24","asn":"16284","country_code":"NG","name":"UNSPECIFIED","path":["6939","37662","16284"]},"ports":["22"],"protocols":["22/ssh"],"ipinteger":"577068443","version":"0","tags":["ssh"]} +{"address":"47.56.109.225","ip":"47.56.109.225","p80":{"http":{"get":{"body":"\r\n\r\n\r\n\r\n\r\n\r\n打开链接填写地址-免费领取运动服饰\r\n\r\n\r\n\r\n\r\n\r\n
      \r\n\t
      \r\n\t\t
      提示
      \r\n\t\t
      \r\n\t\t
      \r\n\t\t\t
      取消
      \r\n\t\t\t
      确定
      \r\n\t\t
      \r\n\t
      \r\n
      \r\n\t\r\n
      \r\n\t
      \r\n
      \r\n\r\n\r\n

      活动详情

      \r\n\r\n
      \r\n\t

        \"timg.jpg\"/

        按客服要求完成任务,提交地址免费领取品牌服饰

        剩余198个名额。

        请注意查看活动规则

      \r\n\t
      \r\n\t\t
      \r\n\t\t\t姓名\r\n\t\t\t\r\n\t\t
      \r\n\t\t
      \r\n\t\t\t电话\r\n\t\t\t\r\n\t\t
      \r\n\t\t
      \r\n\t\t\t地址\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t
      \r\n\t\t
      \r\n\t\t\t详细地址\r\n\t\t\t\r\n\t\t
      \r\n\t\t
      \r\n\t\t\t款式\r\n\t\t\t
      \r\n\t\t\t\t\t\t\t\t男款\r\n\t\t\t\t\t\t\t\t女款\r\n\t\t\t\t\t\t\t
      \r\n\t\t
      \r\n\t\t
      \r\n\t\t\t尺码\r\n\t\t\t
      \r\n\t\t\t\t\t\t\t\tS\r\n\t\t\t\t\t\t\t\tM\r\n\t\t\t\t\t\t\t\tL\r\n\t\t\t\t\t\t\t\tXL\r\n\t\t\t\t\t\t\t\t2XL\r\n\t\t\t\t\t\t\t\t3XL\r\n\t\t\t\t\t\t\t\t4XL\r\n\t\t\t\t\t\t\t\t5XL\r\n\t\t\t\t\t\t\t
      \r\n\t\t
      \r\n\t\t
      \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t我已阅读并同意《用户协议》《活动规则》\r\n\t\t
      \r\n\t\t
      \r\n\t\t\t订单查询\r\n\t\t\t立即提交\r\n\t\t
      \r\n\t
      \r\n
      \r\n\r\n","body_sha256":"ccf76fd153680ca3098170c451479e512d2e2d4bbb83669a1e0d0edabe4b96d0","headers":{"cache_control":"no-store, no-cache, must-revalidate, post-check=0, pre-check=0","connection":"keep-alive","content_type":"text/html; Charset=utf-8;charset=UTF-8","expires":"Thu, 19 Nov 1981 08:52:00 GMT","pragma":"no-cache","server":"nginx","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 09:44:33 GMT"}],"vary":"Accept-Encoding"},"metadata":{"description":"nginx","product":"nginx"},"status_code":"200","status_line":"200 OK","title":"打开链接填写地址-免费领取运动服饰","timestamp":"2020-07-07T09:44:31Z"}}},"ports":["80","21","8888"],"version":"0","p21":{"ftp":{"banner":{"banner":"220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------\r\n220-You are user number 1 of 50 allowed.\r\n220-Local time is now 02:58. Server port: 21.\r\n220-This is a private system - No anonymous login\r\n220-IPv6 connections are also welcome on this server.\r\n220 You will be disconnected after 15 minutes of inactivity.","metadata":{"description":"Pure-FTPd","product":"Pure-FTPd"},"timestamp":"2020-07-13T18:58:11Z"}}},"tags":["ftp","http"],"ipint":"792227297","p8888":{"http":{"get":{"body":"\n\n\n \n 安全入口校验失败\n\n\n

      请使用正确的入口登录面板

      \n

      错误原因:当前宝塔新安装的已经开启了安全入口登录,新装机器都会随机一个8位字符的安全入口名称,亦可以在面板设置处修改,如您没记录或不记得了,可以使用以下方式解决

      \n

      解决方法:在SSH终端输入以下一种命令来解决

      \n

      1.查看面板入口:/etc/init.d/bt default

      \n

      2.关闭安全入口:rm -f /www/server/panel/data/admin_path.pl

      \n

      注意:【关闭安全入口】将使您的面板登录地址被直接暴露在互联网上,非常危险,请谨慎操作

      \n
      \n
      宝塔Linux面板, 请求帮助
      \n\n","body_sha256":"19d530bec602f2100992574f4c4ec88de2aa12d4aedc6a79b6a3edbd772332ca","headers":{"content_length":"946","content_type":"text/html; charset=utf-8","unknown":[{"key":"date","value":"Sun, 12 Jul 2020 05:34:59 GMT"}]},"status_code":"200","status_line":"200 OK","title":"安全入口校验失败","timestamp":"2020-07-12T05:34:58Z"}}},"updated_at":"2020-07-13T18:58:11Z","location":{"country_code":"HK","continent":"Asia","timezone":"Asia/Hong_Kong","latitude":22.25,"longitude":114.1667,"registered_country":"United States","registered_country_code":"US","country":"Hong Kong"},"autonomous_system":{"description":"CNNIC-ALIBABA-US-NET-AP Alibaba (US) Technology Co., Ltd.","routed_prefix":"47.56.0.0/16","asn":"45102","country_code":"CN","name":"CNNIC-ALIBABA-US-NET-AP Alibaba (US) Technology Co., Ltd.","path":["11164","3491","45102"]},"protocols":["21/ftp","80/http","8888/http"],"ipinteger":"-512935889"} +{"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.sectigo.com/SectigoRSAOrganizationValidationSecureServerCA.crt"],"ocsp_urls":["http://ocsp.sectigo.com"]},"authority_key_id":"17d9d6252767f931c24943d93036448c6ca94feb","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://sectigo.com/CPS"],"id":"1.3.6.1.4.1.6449.1.2.1.3.4"},{"id":"2.23.140.1.2.2"}],"crl_distribution_points":["http://crl.sectigo.com/SectigoRSAOrganizationValidationSecureServerCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"u9nfvB+KcbWTlCOXqpJ7RzhXlQqrUugakJZkNo4e0YU=","signature":"BAMARTBDAh8nMcX/Yrm0u1jG3IyKRwoKtOutSRPuh/fHpmPySkfVAiBLk2rYlCwPc9zFiVY2LyqO08nuB5tCSX2qtyPO1Rew0g==","timestamp":"1554477011","version":"0"},{"log_id":"RJRlLrDuzq/EQAfYqP4owNrmgr7YyzG1P9MzlrW2gag=","signature":"BAMARjBEAiBKegYxeR7op3MZkqgsgJwjGF+Rli98LmsPnb/KC1Z6DQIgWlMNSzQyWdcjpEXuEfpPWLpOkahR/M3JMgUjTBgQdwM=","timestamp":"1554477011","version":"0"},{"log_id":"XNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbHDso=","signature":"BAMARzBFAiBoGurJcWV6cWjKaSpx+iT+Qc3XDLHv0bXGvAoMCYJYiQIhAK7DzIQDP2+EQucVO3WTdwBHpqXPit1TtWT7ezR1RQTu","timestamp":"1554477011","version":"0"}],"subject_alt_name":{"dns_names":["*.fksgroup.com","fksgroup.com"]},"subject_key_id":"027cf35073962d4316e06c744de8955b2e03cbea"},"fingerprint_md5":"77296a2d9f7dd5bb956c47fbd74a31b1","fingerprint_sha1":"9237b4e21deb4097432e0dce4335ef020a781335","fingerprint_sha256":"2739dcbf3a8bea2662c8660cdc7f7a71a836588436cc5cf269a6b57fcb051391","issuer":{"common_name":["Sectigo RSA Organization Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Organization Validation Secure Server CA","names":["*.fksgroup.com","fksgroup.com"],"redacted":false,"serial_number":"19546001740421377733070445654681831526","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"QI/R2P4rYTY1HTqHVx+m58+AOoSgWgQegTISD2mxYthOMTJ2fWQ9e22FmMVARv03Efxb/XZcDgXLObKp76megthmOQTONu4W4w7MfRBfs+EtyXFHb2OdXf5WQPaWZTPAvDDXGBboa9U/XB6GUqW6hh95w5cN2dn45fckg2yXFSDOF+YNRgGjdV8ros5ATIxqtoZlnHxiGzLU/yMJj72MQm8wT8ffOLW0mnH+lwlfLUEq4cyDF981SEXBZDzF74zlQJPDmfaciU6xTx0+6yynwLGHYYic9jnqM+N7741pKmPpwPrFhqEqsR6avE4FqChknhrDO0SULw4anfPeRTtSMg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"e2d2bdf7837b6b80991f2fd5967bf56d792d5c0d0fe49874939e16ce3b04aa92","subject":{"common_name":["*.fksgroup.com"],"country":["SG"],"locality":["Singapore"],"organization":["Enerfo PTE LTD"],"organizational_unit":["IT","PremiumSSL Wildcard"],"postal_code":["049315"],"province":["Singapore"],"street_address":["10 collyer quay"]},"subject_dn":"C=SG, postalCode=049315, ST=Singapore, L=Singapore, street=10 collyer quay, O=Enerfo PTE LTD, OU=IT, OU=PremiumSSL Wildcard, CN=*.fksgroup.com","subject_key_info":{"fingerprint_sha256":"b691e967664d3ddad34f2cff81a9189368141eaf9cbe5dfe44943cea6149a921","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sDakNTms350qp6p8I+0q2DHnhGnG3oqqW4CUZPPGo6dzH3ldkFQczYAceFcYJIRMmEioZaIHewOuzFEgxDCScKG2n1/6eNZMqxtbTodTyyyrf1aV2tTAt/UmDpVx8ZKdzXSN/DN1R2/2NUhGphuqUg6fqvIVdeOtamxFOBRt4/GFBk+/gslhKm9knSwB8/p8dD2dVBjBP9lTx3tGz8FL9GidY4VHQnbe6BmkEvpj5QxPQEohsyQFCCYJT+XrzaWRWPRdYiHITp1eDNJnuYPcAw+HoA9YoawgDg6ApagwNK7sBhLux1ZDiHFk6KefNHu7Uo1Z48ZtCvVOEwTIrXEUSw=="}},"tbs_fingerprint":"71ee49ee8808f7453c5822468e3ca68fb747bc9aa02295fa74a61b8dfd453a1e","tbs_noct_fingerprint":"664121037dd660f303f905c82a13a91fca00558dafed136b72cb342bcad180ee","validation_level":"OV","validity":{"end":"2021-04-04T23:59:59Z","length":"63158399","start":"2019-04-05T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.usertrust.com/USERTrustRSAAddTrustCA.crt"],"ocsp_urls":["http://ocsp.usertrust.com"]},"authority_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.5.29.32.0"},{"id":"2.23.140.1.2.2"}],"crl_distribution_points":["http://crl.usertrust.com/USERTrustRSACertificationAuthority.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"17d9d6252767f931c24943d93036448c6ca94feb"},"fingerprint_md5":"886ea78b530e0fd5bda4e12527ab6a2c","fingerprint_sha1":"40cef3046c916ed7ae557f60e76842828b51de53","fingerprint_sha256":"72a34ac2b424aed3f6b0b04755b88cc027dccc806fddb22b4cd7c47773973ec0","issuer":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"issuer_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","redacted":false,"serial_number":"25906064879583303349170707072060521101","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"ThNAlsnD5m5bwOO69Bfhrgkfyb/LDCUW8nNTs3Yat6tIBtbNAHwgRUNFbBZaGxNh10m6pAKkrOjOzi3JKnSj3N6uq9BoNviRrzwB93fVC8+Xq+uH5xWo+jBaYXEgscBDxLmPbYox6xU2JPti1Qucj+lmveZhUZeTth2HvbC1bP6mESkGYTQxMD0gJ3NR0N6Fg9N3OSBGltqnxloWJ4Wyz04PToxcvr44APhL+XJ71PJ616IphdAEutNCLFGIUi7RPSRnR+xVzBv0yjTqJsHe3cQhifa6ezIejpZehEU4z4CqN2mLYBd0FUiRnG3wTqN3yhscSPr5z0noX0+FCuKPkBurcEya67emP7SsXaRfz+bYipaQ908mgWB2XQ8kd5GzKjGfFlqyXYwcKapInI5v03hAcNt37N3j0VcFcC3mSZiIBYRiBXBWdoY5TtMibx3+bfEOs2LEPMvAhblhHrrhFYBZlAyuBbuMf1a+HNJav5fyakywxnB2sJCNwQs2uRHY1ihc6k/+JLcYCpsM0MF8XPtpvcyiTcaQvKZN8rG61ppnW5YCUtCC+cQKXA0o4D/I+pWVidWkvklsQLI+qGu41SWyxP7x09fn1txDAXYw+zuLXfdKiXyaNb78yvBXAfCNP6CHMntHWpdLgtJmwsQt6j8k9Kf5qLnjatkYYaA7jBU="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"11ae5971b53b6939128816c32b07d164fb6939e8ace8c081c7fe2567e4a93eea","subject":{"common_name":["Sectigo RSA Organization Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["Sectigo Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Organization Validation Secure Server CA","subject_key_info":{"fingerprint_sha256":"4648564dc7c901037f631391d765643e8f8f86622849f59dfc9564838e1e8a76","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"nJMCRkVKUkiS/FeN+S3qU76zLNXYqKXsW2kDwB0Q9lkz3v4HSKjojHpnSvH1jcM3ZtAykffEnQRgxLVK4oOLp64m1F06XvjRFnG7ir1xon3IzqJgJLBSoDpFUd54k2xiYPHkVpy3O/c8Vdjf1XoxfDV/ElFw4Sy+BKzL+k/hfGVqwECn2XylY4QZ4ffK76q06Fha2ZnjJt+OErK43DOyNtoUHZZYQkBuCyKFHFEirsTIBkVtkuZntxkj5Ng2a4XQf8dS48+wdQHgibSov4o2TqPgbOuEQc6lL0giE5dQYkUeCaXMn2xXcEAG2yDoG9bzk4unMp63RBUJ16/9fAEc2w=="}},"tbs_fingerprint":"e026e0f68af3244234cc4761d16483e4e01ae177b780fd7892c11412fe1f4399","tbs_noct_fingerprint":"e026e0f68af3244234cc4761d16483e4e01ae177b780fd7892c11412fe1f4399","validation_level":"OV","validity":{"end":"2030-12-31T23:59:59Z","length":"383875199","start":"2018-11-02T00:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.usertrust.com"]},"authority_key_id":"adbd987a34b426f7fac42654ef03bde024cb541a","basic_constraints":{"is_ca":true},"certificate_policies":[{"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.usertrust.com/AddTrustExternalCARoot.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"5379bf5aaa2b4acf5480e1d89bc09df2b20366cb"},"fingerprint_md5":"db78cbd190952735d940bc80ac2432c0","fingerprint_sha1":"eab040689a0d805b5d6fd654fc168cff00b78be3","fingerprint_sha256":"1a5174980a294a528a110726d5855650266c48d9883bea692b67b6d726da98c5","issuer":{"common_name":["AddTrust External CA Root"],"country":["SE"],"organization":["AddTrust AB"],"organizational_unit":["AddTrust External TTP Network"]},"issuer_dn":"C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root","redacted":false,"serial_number":"26471149583208131559647911801012699958","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"k2X2N4OVD17Dghwf1nfnPIrAqgnw6Qsm8eDCanWhx3nJuVJgyCkSDvCtA9YJxHbf5aaBladG2oJXqZWSxbaPAyJsM3fBezIXbgfOWhRBOgUkG/YUBjuoJSQOu8wqdd25cEE/fNBjNiEHH0b/YKSR4We83h9+GRTJY2eR6mcHa7SPi8BuQ33DoYBssh68U4V93JChpLwt70ZyVzUFv7tGu25tN5m2/yOSkcZuQPiPKVbqX9VfFFOs8E9h6vcizKdWC+K4NB8m2XsZBWg/ujzUOAai0+aPDuO0cW1AQsWEtECVK/RloEh59h2BY5adT3Xg+HzkjqnR8q2Ks4zHIc3C7w=="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"2c1fb55882eb4d8c782a3fd3eb37e60c0518b5eedd91149a5b3e5a5a234a1c5f","subject":{"common_name":["USERTrust RSA Certification Authority"],"country":["US"],"locality":["Jersey City"],"organization":["The USERTRUST Network"],"province":["New Jersey"]},"subject_dn":"C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority","subject_key_info":{"fingerprint_sha256":"c784333d20bcd742b9fdc3236f4e509b8937070e73067e254dd3bf9c45bf4dde","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"gBJlFzYOw9sIs9CsVw127c0n00ytUINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZtF+mvX2do2NCtnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8/hPwhxR79uQfjtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax1Jt4A8BQOujM8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9yn8iNK5+O2hmAUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf4TKuzJM7UXiVZ4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQNwZNUMBkTrNN9N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kCnusSTJV882sFqV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/kjbmUZIO8yZ9HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhCLkMaTLTwJUdZ+gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgEJTm4Diup8kyXHAc/DVL17e8vgg8="}},"tbs_fingerprint":"ad6aa4176b5386d8511f619ddb40b9abbadda4dd7fc17364db614483fdcca847","tbs_noct_fingerprint":"ad6aa4176b5386d8511f619ddb40b9abbadda4dd7fc17364db614483fdcca847","validation_level":"unknown","validity":{"end":"2020-05-30T10:48:38Z","length":"631152000","start":"2000-05-30T10:48:38Z"},"version":"3"}},{"parsed":{"extensions":{"authority_key_id":"adbd987a34b426f7fac42654ef03bde024cb541a","basic_constraints":{"is_ca":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"adbd987a34b426f7fac42654ef03bde024cb541a"},"fingerprint_md5":"1d3554048578b03f42424dbf20730a3f","fingerprint_sha1":"02faf3e291435468607857694df5e45b68851868","fingerprint_sha256":"687fa451382278fff0c8b11f8d43d576671c6eb2bceab413fb83d965d06d2ff2","issuer":{"common_name":["AddTrust External CA Root"],"country":["SE"],"organization":["AddTrust AB"],"organizational_unit":["AddTrust External TTP Network"]},"issuer_dn":"C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root","redacted":false,"serial_number":"1","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"sJvghSXC1iPiD5YGkp1BmJzZhHmB2R5bFAcjNmWPsNh3u6xBbEdgg1Gw+TI95/z2JhPHgBalv1r8h894eYkhmuJMBwqGNbzy3lHE0pa33H5O7nD9HDnrDAJRFC2OvRbgwd9Gdeckrez0QrSFk3AQZ7qdBjVKGNMresxRQqF6Y9Hmu6HFK8I2vhMN5r1jfnl7pwkNQKtq3Y+Kw/b2jBpCBVHURfWfp2IhaBUgQzyZ53y9JNipkRdziD9WGzE4GLRxD5rNyA6eji4b4YyYg8sfMfFETMYEc0l2YA/H+L0XgGsu6cxMDlqaeQ8gCi7VnmMmHlWSlNiCF1p70LzHj06GBA=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"4df410fbf6761bcf75fe2a45e15fcab3640bf5e5d1300d0eeb5927152432179c","subject":{"common_name":["AddTrust External CA Root"],"country":["SE"],"organization":["AddTrust AB"],"organizational_unit":["AddTrust External TTP Network"]},"subject_dn":"C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root","subject_key_info":{"fingerprint_sha256":"942a6916a6e4ae527711c5450247a2a74fb8e156a8254ca66e739a11493bb445","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"t/caM+byAAQtOeBOW+0fvGwPzbX6I7bO3psRM5ekKUx9k5+9SryT7QMa44/P5W1QWtaXKZRagLBJetsulf24yr83OC0ePpFBrXBWx/BPP+gynnTKyJBU6cZfD3idmkA8Dqxhql4Uj56HoWpQ3NeaTq8Fs6ZxlJxxs1BgCscTnTgHhgKo6ahpJhiQq0ywTyOrOk+E2N/On+Fpb7vXQtdrROTHre5tQV9yWnEIN7N5ZaRZoJQ39wAvDcKSctrQOHLbFKhFxF0qfbe01sTurM0TRLfJK91DACX6YblpalgjEbenM49WdVn1zSnXRrcKK2W200JvFbK4e/vv6V1T1TRaJw=="}},"tbs_fingerprint":"32e1783f2384bc17836c03850527b18de7901a6909de7cf6b7d9d46659895d6c","tbs_noct_fingerprint":"32e1783f2384bc17836c03850527b18de7901a6909de7cf6b7d9d46659895d6c","validation_level":"unknown","validity":{"end":"2020-05-30T10:48:38Z","length":"631152000","start":"2000-05-30T10:48:38Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"24","name":"secp384r1"}}},"session_ticket":{"length":"176","lifetime_hint":"300"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T13:43:54Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T09:50:38Z"},"get":{"body":"\n\n\tFireware XTM User Authentication\n \n\n\n\t\n\n\n","body_sha256":"727f5c7ab6f84e7a7c9f857ac25fae2daa1fb30aa45bba5964221085f77df6b1","headers":{"accept_ranges":"bytes","connection":"keep-alive","content_length":"727","content_security_policy":"default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'self'; media-src 'self'; child-src 'self'","content_type":"text/html","last_modified":"Fri, 19 Apr 2019 20:04:49 GMT","strict_transport_security":"max-age=31536000","unknown":[{"key":"etag","value":"\"5cba29e1-2d7\""},{"key":"date","value":"Wed, 15 Jul 2020 05:18:34 GMT"}],"x_content_security_policy":"default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'self'; media-src 'self'; child-src 'self'","x_content_type_options":"nosniff","x_frame_options":"SAMEORIGIN","x_webkit_csp":"default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'self'; media-src 'self'; child-src 'self'","x_xss_protection":"1; mode=block"},"status_code":"200","status_line":"200 OK","title":"Fireware XTM User Authentication","timestamp":"2020-07-15T05:21:31Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T03:15:15Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T03:43:37Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"iZymqQ6ozwBpcdrUQ/mS2OKuzyuGNtndBpsLxLEBiQ6Zj1/th+d/dhbPSZDl5CwiBBXybuo9w5TMAUJqd0qCmlTMajKD2GXLcx8EthTKH71wvU63NytiSmncu8qTTNKaP6qjlM8T1Rr0U0UgywN8q2h9qJGLHBgFjKzH4V2oP3EAzhbXHMxcJG7d/DQCaZ/f9Z4o/IMvk8eBqrM6cyjny5UrNhXYDK/x9jitynU6O86GEx+MmPADV7/iWIkzMedOQAFDFNxN0irBRkkxsJyHcvrXC3G/f0Av4WGcuBt22Ae8iQtJL/pBrkqvx0Ns7jCS/5TpUKP9OXuJPVFyQjP8Mw=="}},"support":true,"timestamp":"2020-07-12T03:16:35Z"}}},"address":"203.126.23.36","ipint":"3414038308","updated_at":"2020-07-15T05:21:31Z","ip":"203.126.23.36","location":{"country_code":"SG","continent":"Asia","city":"Singapore","postal_code":"80","timezone":"Asia/Singapore","latitude":1.3854,"longitude":103.8656,"registered_country":"Singapore","registered_country_code":"SG","country":"Singapore"},"autonomous_system":{"description":"SINGNET SingNet","routed_prefix":"203.126.0.0/16","asn":"3758","country_code":"SG","name":"SINGNET SingNet","path":["11164","7473","3758"]},"ports":["443"],"protocols":["443/https"],"ipinteger":"605519563","version":"0","tags":["http","https"]} +{"metadata":{"os":"Debian"},"address":"35.222.93.190","ip":"35.222.93.190","ports":["22"],"version":"0","tags":["ssh"],"p22":{"ssh":{"v2":{"banner":{"comment":"Debian-10+deb9u7","raw":"SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u7","software":"OpenSSH_7.4p1","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"jqt8A+rA6p2ztj8N96v4OmJAhfWl3eS8nC7V6DhYUzo="}},"metadata":{"description":"OpenSSH 7.4p1","product":"OpenSSH","version":"7.4p1"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"kGHOVHh0VRL80ONfLHbElfMPxhYyiQPdTI7pUiB2ApI=","y":"C91tyCOtnh3pJ6rybPD3bLVpzvR6Jt++US1cgy/1agE="},"fingerprint_sha256":"3b098675c2923ca45923d69a84aa0be27b7ecc6b2783b8705211fa7af7e99b66","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ecdsa-sha2-nistp256","ssh-ed25519"],"kex_algorithms":["curve25519-sha256","curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group16-sha512","diffie-hellman-group18-sha512","diffie-hellman-group14-sha256","diffie-hellman-group14-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T04:14:55Z"}}},"ipint":"601775550","updated_at":"2020-07-14T04:14:55Z","location":{"country_code":"US","continent":"North America","timezone":"America/New_York","province":"Virginia","latitude":38.6583,"longitude":-77.2481,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"GOOGLE","routed_prefix":"35.220.0.0/14","asn":"15169","country_code":"US","name":"GOOGLE","path":["15169"]},"protocols":["22/ssh"],"ipinteger":"-1101144541"} +{"metadata":{"os":"Ubuntu,Ubuntu,Ubuntu"},"address":"142.93.66.37","ip":"142.93.66.37","p80":{"http":{"get":{"headers":{"cache_control":"no-cache","connection":"keep-alive","server":"nginx/1.14.0 (Ubuntu)","strict_transport_security":"max-age=31536000; includeSubDomains","unknown":[{"key":"date","value":"Tue, 23 Jun 2020 04:44:07 GMT"},{"key":"x_request_id","value":"a1de4e94-e0ee-4f87-9f5a-11e9f1a22371"},{"key":"x_runtime","value":"0.002793"}],"vary":"Origin"},"metadata":{"description":"nginx 1.14.0","product":"nginx","version":"1.14.0"},"status_code":"200","status_line":"200 OK","timestamp":"2020-06-23T04:44:06Z"}}},"ports":["80","22","443"],"version":"0","tags":["http","https","ssh"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.int-x3.letsencrypt.org/"],"ocsp_urls":["http://ocsp.int-x3.letsencrypt.org"]},"authority_key_id":"a84a6a63047dddbae6d139b7a64565eff3a8eca1","basic_constraints":{"is_ca":false},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"5xLysDd+GmL7jskMYYTx6ns3y1YdESZb8+DzS/JBVG4=","signature":"BAMARzBFAiAi5T4iJfIds/5HAGwaDw8lY6F10su+mQbO5YdURP3FzwIhANTMaOwAVUWmM/XNWLhVWoTll6F44iRN4nXA8kXJ1d3h","timestamp":"1589519966","version":"0"},{"log_id":"B7dcG+V9aP/xsMYdIxXHuuZXfFeUt2ruvGE6GmnTohw=","signature":"BAMARzBFAiEAs+2O4AZjOhS1iuWAIXqv9cqe3gxlvCdeEueum8EyYh0CIDYGDJK9rX3701RNY7iyMy1avdmXrPPMhMdmO839xiNx","timestamp":"1589519966","version":"0"}],"subject_alt_name":{"dns_names":["api.onpodio.com"]},"subject_key_id":"b57693810ff301a598721e6e911fa0a1a9e3786b"},"fingerprint_md5":"d143ad35224d62929ef5d8a21d3eebf4","fingerprint_sha1":"c8b8d57dbab34170984921c5a545f3fd1612b3bd","fingerprint_sha256":"24c7dc249f036e49e7118320790e5d599b91b50b515d795cb05d9325a9dbf1ef","issuer":{"common_name":["Let's Encrypt Authority X3"],"country":["US"],"organization":["Let's Encrypt"]},"issuer_dn":"C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3","names":["api.onpodio.com"],"redacted":false,"serial_number":"266954811089521807109678384134995873296536","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"A9WcOfu3n/etT3yzuS7KRbwu4+8ng5AYSxaYnYHdGa/mvb6TkYRKbd2iQDK5Wohvb2gjHHqedt5jKOlo4DJ0nrmgIEKTryWg+RgrvgdHLKmaHabVRXGipyiFNYH0u6CpAsLK0y6c4q52eefneSFbeAVsRJXo7fTd/G48epr59kBGl9QuVQr5XJPFwX2bkbBmHGi5fmFKOp46GLciNfFxltNaZGUGpw07dCJAPSJDmD7UjKNoa3loPgBOLBDBxOmvZsvATj8fm5rp6UC8NKAcywJ3I3rUUvr75fjoybV5Wf5OYFyQo6YSiBYj8uN6QIpzTDimlf9nOe5YeLC2eJoOCQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"bd348bbc9292e57f6dbdc012766b298cf55846a77915539276b3ca2083e2c3d8","subject":{"common_name":["api.onpodio.com"]},"subject_dn":"CN=api.onpodio.com","subject_key_info":{"fingerprint_sha256":"ac25e07591696a6bc5e63ae4099da10b83369b0b543345c50c4b8784d679113b","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1yU676HJuiTPiqWTkAUzmQDrBHgkpe4q+HuMXTYgAJZtRHxCDQYsrfArTIUtDEq4pxEpC1alQwmEpgIjAUQlsxHhi6ijBk8hKuSuMLhRFxaa/Biy2JGMiVwkHiwdKxRibVcO29VLoqQjBEHl0w4OAb/2mdalPJN49j2+vHc/EySaHFjUCotipRoCJJDXG7ekY3YAVAXd7d6y0xnbgzuRQMTMiil5Qxk/bhqFR8vadYsovy3FIeGAEiQwh5NvqbvO+AjMZo1OXZwfyte+Qav51coDCbSEQobBHHHGrnlv8T9x23Ffo61XY9lpEHeP1EXdhGQO1wjy08hbyDj7NIvecQ=="}},"tbs_fingerprint":"a7c884952b539825d1241bf7ea8c4b7b9fe06f5132952e90b20e40e6ac461ba3","tbs_noct_fingerprint":"af941e2b6e24fbe0e21ef80d8a362dee835f8d82d82a8fdc45cd5851dfd685a2","validation_level":"DV","validity":{"end":"2020-08-13T04:19:26Z","length":"7776000","start":"2020-05-15T04:19:26Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://apps.identrust.com/roots/dstrootcax3.p7c"],"ocsp_urls":["http://isrg.trustid.ocsp.identrust.com"]},"authority_key_id":"c4a7b1a47b2c71fadbe14b9075ffc41560858910","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["http://cps.root-x1.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1"}],"crl_distribution_points":["http://crl.identrust.com/DSTROOTCAX3CRL.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"a84a6a63047dddbae6d139b7a64565eff3a8eca1"},"fingerprint_md5":"b15409274f54ad8f023d3b85a5ecec5d","fingerprint_sha1":"e6a3b45b062d509b3382282d196efe97d5956ccb","fingerprint_sha256":"25847d668eb4f04fdd40b12b6b0740c567da7d024308eb6c2c96fe41d9de218d","issuer":{"common_name":["DST Root CA X3"],"organization":["Digital Signature Trust Co."]},"issuer_dn":"O=Digital Signature Trust Co., CN=DST Root CA X3","redacted":false,"serial_number":"13298795840390663119752826058995181320","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJouM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwuX4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlGPfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"78d2913356ad04f8f362019df6cb4f4f8b003be0d2aa0d1cb37d2fd326b09c9e","subject":{"common_name":["Let's Encrypt Authority X3"],"country":["US"],"organization":["Let's Encrypt"]},"subject_dn":"C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3","subject_key_info":{"fingerprint_sha256":"60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"nNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EFq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWAa6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3Dkw=="}},"tbs_fingerprint":"3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838","tbs_noct_fingerprint":"3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838","validation_level":"DV","validity":{"end":"2021-03-17T16:40:46Z","length":"157766400","start":"2016-03-17T16:40:46Z"},"version":"3"}}],"cipher_suite":{"id":"0xCCA8","name":"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"176","lifetime_hint":"300"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T19:33:22Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T12:45:18Z"},"get":{"headers":{"cache_control":"no-cache","connection":"keep-alive","server":"nginx/1.14.0 (Ubuntu)","strict_transport_security":"max-age=31536000; includeSubDomains","unknown":[{"key":"x_request_id","value":"58944c3d-c0aa-4c27-89bd-c36fc00cdb43"},{"key":"date","value":"Mon, 13 Jul 2020 22:41:50 GMT"},{"key":"x_runtime","value":"0.002620"}],"vary":"Origin"},"metadata":{"description":"nginx 1.14.0","product":"nginx","version":"1.14.0"},"status_code":"200","status_line":"200 OK","timestamp":"2020-07-13T22:41:49Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T05:21:48Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T12:40:25Z"},"dhe":{"support":false,"timestamp":"2020-07-12T08:35:58Z"}}},"p22":{"ssh":{"v2":{"banner":{"comment":"Ubuntu-4ubuntu0.3","raw":"SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3","software":"OpenSSH_7.6p1","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"pP5vKS+DVzl/4xHXRaI2XA9iGs5LuEYY0yNzpY8VcBE="}},"metadata":{"description":"OpenSSH 7.6p1","product":"OpenSSH","version":"7.6p1"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"KeNz8CzKXsuBEwN+MWTCiCg+2hwcwX4fefE2Lg6EX1E=","y":"B+fMiMOLj14FhqIqYBp+/JCPlwcm0oqC0AyA4XXU1HM="},"fingerprint_sha256":"a430a9bf022190ae031c92510b4f7fafa1500a78f7cec0c7f4eec33262d3234b","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ecdsa-sha2-nistp256","ssh-ed25519"],"kex_algorithms":["curve25519-sha256","curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group16-sha512","diffie-hellman-group18-sha512","diffie-hellman-group14-sha256","diffie-hellman-group14-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T16:02:20Z"}}},"ipint":"2388476453","updated_at":"2020-07-14T16:02:20Z","location":{"country_code":"US","continent":"North America","city":"New York","postal_code":"10012","timezone":"America/New_York","province":"New York","latitude":40.7279,"longitude":-73.9966,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"DIGITALOCEAN-ASN","routed_prefix":"142.93.64.0/20","asn":"14061","country_code":"US","name":"DIGITALOCEAN-ASN","path":["7018","1299","14061"]},"protocols":["22/ssh","443/https","80/http"],"ipinteger":"625106318"} +{"metadata":{"os":"Ubuntu"},"address":"52.78.80.144","ip":"52.78.80.144","p80":{"http":{"get":{"body":"\n\n\n\n\n\n\n\n\t\n\t\t\t\n\t\n\t\n\n\t\t\n\n\t\n\n\t\n\t\n\t트렌비 매거진 | MAG.TRENBE.COM\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\n\n\n\n\n\n\t\t\n\t\t\n\t\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\r\n\r\n\r\n
      \r\n\n\n\t
      \n\t\t\t\t\n\t\t
      \n\t\t
      \n\t\t
      \n\t\t\t
      \n\t\t\t\n\t\t\t\t\"TRENBE\"\n\t\t\t\n\t\t\t
      \n\t\t\t
      \n\t\t\t\t스토어\n\t\t\t\t랭킹\n\t\t\t\t소셜\n\t\t\t\tSALE 스캐너\n\t\t\t
      \n\t\t
      \n\t
      \n\t\t\t\n\t\t\t\n\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t
      \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
      \n\t\t\t\n\t\t\t\t
      \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
      \n\t\t\t\t

      Select Page

      \n\t\t\t
      \n\t\t\t\n\t\t
      \t\t\t\t\t\t
      \n\t\t\t\t\t
      \n\t\t\t\t
      \n\t\t\t
      \n\n\t\t
      \n \n\n\t\t\t\t\n
      \n\t
      \n\t\t
      \n\t\t\t
      \n\t\t\t\t\n\t\t\t\t\t
      \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n
      \n\n
      \n\t
      \n\t
      \n\t\t
      \n\t\t\t\n\t\t\t\t\"바야흐로\n\t\t\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t\t

      바야흐로 바버의 계절

      \n\t\t\t
      \n\t\t\t\t\t\t\t\t

      by Hyejung | Oct 25, 2019

      \n\t\t\t
      \n\t\t\t
      \n\t\t\t\t

      바야흐로 바버의 계절 John Barbour (1849~)  바버 브랜드의 최초 설립자인 존 바버(John Barbour, 1849~)은 14살 때부터 의류 소매업을 시작해...

      \n\t\t\t
      \n\t\t
      \n\t\t\t
      \n\t
      \n\t\t
      \n\t\t\t\n\t\t\t\t\"20-30대\n\t\t\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t\t

      20-30대 남성 명품 지갑 추천 TOP 4

      \n\t\t\t
      \n\t\t\t\t\t\t\t\t

      by Hyejung | Oct 18, 2019

      \n\t\t\t
      \n\t\t\t
      \n\t\t\t\t

      1. GUCCI 구찌 GG 수프림 킹 스네이크 프린트 지갑, 40만원 대 DETAIL  GG로고가 들어간 수프림 캔버스 소재에 킹 스네이크 프린트가 포인트가 되어주며 내부에는...

      \n\t\t\t
      \n\t\t
      \n\t\t\t
      \n\t\n\t
      \n\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t
      \n\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t\t

      가성비 갑! 대학생 가방 추천

      \n\t\t\t
      \n\t\t\t\t\t\t\t\t

      by Hyejung | Oct 14, 2019

      \n\t\t\t
      \n\t\t\t
      \n\t\t\t\t

      가성비 갑! 대학생 가방 추천 가성비와 활용성 모두를 만족시켜주는 가방 아이템 1. GUCCI 구찌 GG 마이크로시마 캔버스 디스코백, 60만원 대 DETAIL  GG로고의 캔버스 패브릭 소재와 가죽 소재가 어우러진 디자인의 구찌 디스코백. 스트랩 끈 조절이 가능해 숄더백과 크로스백 두 가지 형태로 가볍게 매칭하기 좋은 제품이다. 내부 포켓과 8개의 카드 슬롯이 함께 구성되어있어 수납력을 높였으며, 무게감...

      \n\t\t\t
      \n\t\t
      \n\t\t\t
      \n\t
      \n\t\t
      \n\t\t\t\n\t\t\t\t\"가을엔\n\t\t\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t\t

      가을엔 뭐 입지? for MAN

      \n\t\t\t
      \n\t\t\t\t\t\t\t\t

      by Hyejung | Oct 7, 2019

      \n\t\t\t
      \n\t\t\t
      \n\t\t\t\t

      가을엔 뭐 입지? for MAN ‘옷 잘 입는’ 남자들의 가을 #대세템 1. STONE ISLAND #와펜감성 #스톤아일랜드 BRAND STORY  스톤 아일랜드는 이탈리아...

      \n\t\t\t
      \n\t\t
      \n\t\t\t
      \n\t
      \n\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t
      \n\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t\t

      2019 상반기 베스트셀러 TOP 5

      \n\t\t\t
      \n\t\t\t\t\t\t\t\t

      by Hyejung | Oct 2, 2019

      \n\t\t\t
      \n\t\t\t
      \n\t\t\t\t

      2019 상반기 베스트 TOP 5 2019 상반기 인기 상품 & 베스트셀러 리뷰 1. GUCCI 구찌 GG 마몬트 가죽 반지갑, 40만원 대 DETAIL  부드러운 고급 가죽 소재에 빈티지한 금장 로고가 포인트로 들어가 심플하고 깔끔한 매력을 주는 기본 반지갑.  2개의 지폐 수납공간과 8개의 카드 슬롯 + 2개의 엑스트라 슬롯으로 카드 수납공간 또한 다양하게 나누어져 있어 얇은 두께임에도...

      \n\t\t\t
      \n\t\t
      \n\t\t\t
      \n\t
      \n\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t
      \n\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t\t

      2020 S/S – Burberry(버버리)

      \n\t\t\t
      \n\t\t\t\t\t\t\t\t

      by Hyejung | Sep 27, 2019

      \n\t\t\t
      \n\t\t\t
      \n\t\t\t\t

      2020 S/S – Burberry 2020 S/S 버버리 봄 여름 컬렉션 미리 보기 ” 토마스 버버리(Thomas Burberry)는 대담한 혁신가이자 동시에 낭만적인 몽상가였다. 과거에서 영감을 받아 미래를 그려내는 것이 버버리 킹덤의 ‘진화(EVOLUTION)’라고 생각하며, 이것에서 영감을 받아 이번 컬렉션의 스토리를 구성했다. “ -...

      \n\t\t\t
      \n\t\t
      \n\t\t\t
      \n\t
      \n\t\t
      \n\t\t\t\n\t\t\t\t\"감성의\n\t\t\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t\t

      감성의 끝판왕, ‘메종 마르지엘라’

      \n\t\t\t
      \n\t\t\t\t\t\t\t\t

      by Hyejung | Sep 24, 2019

      \n\t\t\t
      \n\t\t\t
      \n\t\t\t\t

      감성의 끝판왕, ‘메종 마르지엘라’ 감성의 끝판왕, ‘메종 마르지엘라’ 메종 마르지엘라, 그 감성의 끝은 어디인가  Martin...

      \n\t\t\t
      \n\t\t
      \n\t\t\t
      \n\t
      \n\t\t
      \n\t\t\t\n\t\t\t\t\"가을엔\n\t\t\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t\t

      가을엔 뭐 입지?

      \n\t\t\t
      \n\t\t\t\t\t\t\t\t

      by Hyejung | Sep 18, 2019

      \n\t\t\t
      \n\t\t\t
      \n\t\t\t\t

      가을엔 뭐 입지? 1. Trench Coat #가을 = 트렌치코트   찬 바람이 불기 시작할 때 가장 먼저 꺼내는 #트렌치코트.  ‘가을 = 트렌치코트’라는 말이 있을 정도로...

      \n\t\t\t
      \n\t\t
      \n\t\t\t
      \n\t
      \n\t\t
      \n\t\t\t\n\t\t\t\t\"지금은\n\t\t\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t\t

      지금은 애니멀 프린트 시대

      \n\t\t\t
      \n\t\t\t\t\t\t\t\t

      by Hyejung | Sep 9, 2019

      \n\t\t\t
      \n\t\t\t
      \n\t\t\t\t

      지금은 애니멀 프린트 시대 올 가을을 대표하는 애니멀 프린트 아이템으로 완성하는 스타일링 올 가을을 대표하는 애니멀 프린트 아이템으로 완성하는 스타일링 OUTER 심플한 블랙...

      \n\t\t\t
      \n\t\t
      \n\t\t\t
      \n\t
      \n\t\t
      \n\t\t\t\n\t\t\t\t\"요가복\n\t\t\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t\t

      요가복 계의 샤넬, ‘룰루레몬’

      \n\t\t\t
      \n\t\t\t\t\t\t\t\t

      by Hyejung | Sep 2, 2019

      \n\t\t\t
      \n\t\t\t
      \n\t\t\t\t

      lululemon 요가복 계의 샤넬, ‘룰루레몬’ 1. Brand Story  요가복이라면 입은 듯 안 입은 듯 편안한 신축성에 땀 배출이 잘 되는 것이...

      \n\t\t\t
      \n\t\t
      \n\t\t\t
      \n\t
      \n\t\t
      \n\t\t\t\n\t\t\t\t\"당신이\n\t\t\t\t\t
      \n\t\t\t\t
      \n\t\t\t\t\t\t

      당신이 궁금해할 법한 패션 용어 7

      \n\t\t\t
      \n\t\t\t\t\t\t\t\t

      by Trendy Story | Aug 31, 2019

      \n\t\t\t
      \n\t\t\t
      \n\t\t\t\t

       패션 잡지를 읽거나 쇼핑을 하다 보면 가끔 궁금해질 때가 있습니다. 사려고 상품명을 검색해보긴 하지만 정확히 무엇을 얘기하는지 모르겠단 말이죠. 그래서 이번에 준비했습니다....

      \n\t\t\t
      \n\t\t
      \n\t\t\t
      \n
      \n
      \n\n\"Loading\"\n\n\t
        \n\t\t
      • \n\t\t\t\n\t\t\t\t
      • 1
      • \n\t\t\t\t\t
      • ...
      • \n\t\t\t\t\t\n\t\t\t\t
      • 2
      • \n\t\t\t\t\t\n\t\t\t\t
      • 3
      • \n\t\t\t\t\t\n\t\t\t\t
      • 4
      • \n\t\t\t\t\t\t\t\t
      • ...
      • \n\t\t\n\t\t\t\t
      • 5
      • \n\t\t\t\t\t
      • \n\t
      \n
      \n\n\t\t\t
      \n\t\t\t\t\n\t\t\t\t\n\t\t\t
      \n\t\t\t\t\n\t\t\t\t\n\t\t\t
      \n\t\t\t\t\t\t\t
      \n\n\t\t\t\n\t\t
      \n\t
      \n
      \n\n\t\n\n\t
      \n\t\t\t\t
      \n\t\t\t
      \n\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t\t\t
        \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
      • \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
      • \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
      • \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
      • \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
      • \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
      • \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
      \n\t\t\t\t\n\t\t\t
      \n\t\t
      \n\t
      \n\t
      \n\n\t\t\t\n\t\n\t\t\n\t\r\n\r\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\n\n","body_sha256":"ff8956c40bcfa0395a86b428c030fb8249d8a50685b2ac92ddfbce5ac3398737","headers":{"connection":"keep-alive","content_type":"text/html; charset=UTF-8","link":"; rel=\"https://api.w.org/\"","server":"nginx/1.14.0 (Ubuntu)","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 15:01:14 GMT"}]},"metadata":{"description":"nginx 1.14.0","product":"nginx","version":"1.14.0"},"status_code":"200","status_line":"200 OK","title":"트렌비 매거진 | MAG.TRENBE.COM","timestamp":"2020-07-07T15:01:09Z"}}},"ports":["80","443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cacerts.rapidssl.com/RapidSSLRSACA2018.crt"],"ocsp_urls":["http://status.rapidssl.com"]},"authority_key_id":"53ca1759fc6bc003212f1aaee4aaa81c8256da75","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.2"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://cdp.rapidssl.com/RapidSSLRSACA2018.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"pLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BA=","signature":"BAMARjBEAiBK16E5gxG2UZ+pkePUr5B0qxquaslX2w/xpv+C5bUPqQIgHZNEbG1GTqLuZtD5J/T1Bu/BkLk/FbQd9SNbyfwmxlw=","timestamp":"1529569979","version":"0"},{"log_id":"h3W/51l8+IxDmV+9827/Vo1HVjb/SrVgwbTq/16ggw8=","signature":"BAMARzBFAiAgbS8MOy9WQCqTLctRnnA3I+eVIr/BK8xPKIc2ZQGaywIhAPrbnGEr7qNIWviOFso+Ww/Gq/r9SfNWewbocrjZ4Zp7","timestamp":"1529569979","version":"0"},{"log_id":"u9nfvB+KcbWTlCOXqpJ7RzhXlQqrUugakJZkNo4e0YU=","signature":"BAMASDBGAiEA6QWWqG9CG1bBZziWoDP+3N/LcXr7REax5kIO0TZsL5ICIQDxyjhceDa/wVJmXAzRcX/JH4NV5RVXIJEcUBntIb971w==","timestamp":"1529569979","version":"0"}],"subject_alt_name":{"dns_names":["*.etah.co.kr","etah.co.kr"]},"subject_key_id":"b926906b68c5fa837e61d369549e363fe9219627"},"fingerprint_md5":"8a5c4bb9b51ad6530d0d7f3adc303f8d","fingerprint_sha1":"4bc4bcbb43a5f356fed337de68094d829755a0ea","fingerprint_sha256":"fb9f5269d9d9ab2ec716a2a87d46e495d87932f788bea4c8f1b3fe5c8c7da6fb","issuer":{"common_name":["RapidSSL RSA CA 2018"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=RapidSSL RSA CA 2018","names":["*.etah.co.kr","etah.co.kr"],"redacted":false,"serial_number":"15715293698336041567366624673344155675","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"oItycx+fv3QfgrGPz0GefwYAYXfbv8tMW9e+8pUp5v5dZ7Tdh9p5YN6tFiO1p3s2IV0ZX6sRmF++9vZEizKqf09Abn5qZkv6WFr/F/95MqZVclOM4wecD+NeZ2YMBdWoXc4o4C3azuK77mppGgY/Yo5ok35qKzBo6DN6eGXIvbuWDIDuaTB8d+vCreCI2AikTFsxhmc0sBx1NcvrXjufRg/mfzGJzYVrYTA3FExvUusNrLhU9gAXaWAgwoIJWbG/kq3VZ5YeC2IuCNegCwaPR2LWH0vUXbp921gf9dRTUK5WojULU/7pCrKtDr+vWweQiajtbEVQbCqxZr4jy2vt7w=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"5579b048ee8677263cf6381953b7188239d4cc6934f925fe90d2526e6c157222","subject":{"common_name":["*.etah.co.kr"]},"subject_dn":"CN=*.etah.co.kr","subject_key_info":{"fingerprint_sha256":"fe732dd284c9736d87756f119c0c2f12ba225a8f3be0c638e8dc7dca3e961da7","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"q67awjHfN+PWSrd2CcDAntlnNMq9K7RbhfSuMPHZKNeRiY8378R3fJY+Em7Rs22hRNIE40XD9T7oZfKYafd42FN6u5rgVzWq9xYzjC0lVxLUyPrLBLJgXGpqkT1oQTSy00EgnJNm9Kf3zk5fLwMj+0mmSUhrwab+/VD1cXQHz/EiRHTzWrs/Pm0XE/hiOJxNuhAvB+Ba1O7cT3psOJeoxvSHPR1iHBDJIKC/F4+z7DXA2g2KfHk8xAUqwnmJ4kIjOQ734H+6nOYEWCCyAdrEbaJhf+NLqKIDmKluPVYhs+jMncs6YO9Ur1hrp9M9Yj44Ns6lAAeVe+vWLFmtq0GVpw=="}},"tbs_fingerprint":"1abef516fd2672e9284c19662231d88cf5f368d837ed2c851ade6c2ab8965b90","tbs_noct_fingerprint":"66af2623b77136604e6ddc2a89b1b70b1e96ae95bd7b7f01c6e1dd4e891fd5a5","validation_level":"DV","validity":{"end":"2020-07-20T12:00:00Z","length":"65707200","start":"2018-06-21T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"03de503556d14cbb66f0a3e21b1bc397b23dd155","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.2"},{"id":"2.16.840.1.114412.1.1"},{"id":"2.23.140.1.2.1"},{"id":"2.23.140.1.2.2"}],"crl_distribution_points":["http://crl3.digicert.com/DigiCertGlobalRootCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"53ca1759fc6bc003212f1aaee4aaa81c8256da75"},"fingerprint_md5":"eb2f0ff332094d37434e4dbfbacc9470","fingerprint_sha1":"98c6a8dc887963ba3cf9c2731cbdd3f7de05ac2d","fingerprint_sha256":"c790b47128447ec0b60f22bfcb795d71c326dd910ee12cbb4cc5a86191eb91bc","issuer":{"common_name":["DigiCert Global Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","redacted":false,"serial_number":"11493844307800274610657794896956183369","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"fiPH8so1blmSUVxhazwSNubSfLMp5kLYo5VhHs/yB68rKyVabhejgFLMqvbfkWwnhoW3rICK/V5jS1n9k3Xxs4ZIZK2gRz8kTihwjOvw/kyDXWRFgduaBievVHF6SLmZJ5vf0MbFOkkPiQaGzmVc2ijhyidSKInApqofu+HZtqvJ3ykwhJqDzclSrJUZza1Y+k7Tfb38JaraSvKq/ro5IyPC6VTPR1d/g4dBqxHsI18iv7gpJxzoAGVDlEMXzo8Z4TqR3BJCQWIH9xDKw3KrSMQNBOR9ramOa5a0wI1sGeEVcFh6N+5siFpRsS/YU5AHd0Jq/4U+Dl4S95dNXIycag=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"68b2569adf15bfd045f21946832bc524590aabed363deaa4feeb4f8a9344217c","subject":{"common_name":["RapidSSL RSA CA 2018"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"subject_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=RapidSSL RSA CA 2018","subject_key_info":{"fingerprint_sha256":"9ca59cb18adcfb2e48f2f2dfd55181ca36edf879dab2397ef61f2534a272b681","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"5S2oihEo9nnpezoziDtx4WWLLCll/e0t1EYemE5n+MgP5viaHLy+VpHP+ndX5D18INIuuAV8wFq26KF5U0WNIZiQp6mLtIWjUeWDPA28OeyhTlj9TLk2beytbtFU6ypbpWUltmvY5V8ngspC7nFRNCjpfnDED2kRyJzO8yoKMFz4J4JE8N7NA1uJwUEFMUvHLs0scLoPZkKcewIRm1RV2AxmFQxJkdf7YN9Pckkif2Xgm3b48BZn0zf0qXsSeGu84ua9gwzjzI7tbTBjayTpT+/XpWuBVv6fvarI6bikKB859OSGQuw73XXgeuFwEPHTIRoUtkzu3/EQ+LtwznkkdQ=="}},"tbs_fingerprint":"3fe338634e0510633de453ca350b15cec339b3dcb8ba9f2a2dd24d10a838feeb","tbs_noct_fingerprint":"3fe338634e0510633de453ca350b15cec339b3dcb8ba9f2a2dd24d10a838feeb","validation_level":"OV","validity":{"end":"2027-11-06T12:23:33Z","length":"315532800","start":"2017-11-06T12:23:33Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"176","lifetime_hint":"43200"},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-10T05:14:11Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T05:25:20Z"},"get":{"body":"\r\n\r\n\r\n\r\n 에타홈 - 집에 관한 모든 것\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n
      \r\n \"Loading...\"\r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n

      \r\n \r\n ETAHOME\r\n \r\n \r\n \r\n \r\n \r\n

      \r\n \r\n\r\n \r\n
      \r\n \r\n
      \r\n \r\n\r\n \r\n
      \r\n
      \r\n
      \r\n 검색\r\n \r\n \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n\r\n \r\n
      \r\n
        \r\n
      • \r\n 카테고리\r\n \r\n
        \r\n \r\n
        \r\n
      • \r\n\r\n
      • \r\n 베스트\r\n
      • \r\n
      • \r\n 특가\r\n
      • \r\n\r\n\r\n
      • \r\n 직구샵\r\n
        \r\n \r\n
        \r\n
      • \r\n\r\n \r\n
      • \r\n 컨텐츠\r\n
      • \r\n \r\n\r\n\r\n
      • \r\n \r\n
        \r\n
          \r\n
        • \r\n 애견용품\r\n
          \r\n \r\n
          \r\n \r\n \"\"\r\n \r\n
          \r\n
          \r\n
          \r\n
        • \r\n
        • \r\n 고양이용품\r\n
          \r\n
            \r\n
          • \r\n 브랜드별사료\r\n
          • \r\n
          • \r\n 캔/파우치 사료\r\n
          • \r\n
          • \r\n 간식/캣닙\r\n
          • \r\n
          • \r\n 영양제\r\n
          • \r\n
          • \r\n http://52.78.80.144/\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSorry, your browser does not handle frames!\n\n\n","body_sha256":"10f75155d5be86fdc42b9be34888cd61e0c008dc0bad6e71151d07aa89781144","headers":{"content_type":"text/html","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 07:47:39 GMT"},{"key":"etag","value":"\"008b9359\""}],"x_frame_options":"sameorigin"},"status_code":"200","status_line":"200 OK","timestamp":"2020-07-14T07:53:21Z"}}},"ports":["80","22","443"],"version":"0","tags":["data center","embedded","http","https","ipmi","ssh"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"subject_alt_name":{"dns_names":["ILOCZ25250K8M"]}},"fingerprint_md5":"a304aedf3eecd69fbb889a210cda6f69","fingerprint_sha1":"fbbb6ce998f50002308ec18c9cb6232824f7b627","fingerprint_sha256":"84ed1a2fd28e52e407eccf60398368c0c4cd659028df2617c9169738cf15767f","issuer":{"common_name":["Default Issuer (Do not trust)"],"country":["US"],"locality":["Houston"],"organization":["Hewlett Packard Enterprise"],"organizational_unit":["ISS"],"province":["Texas"]},"issuer_dn":"CN=Default Issuer (Do not trust), O=Hewlett Packard Enterprise, OU=ISS, L=Houston, ST=Texas, C=US","names":["ILOCZ25250K8M"],"redacted":false,"serial_number":"10227866933412777258","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"dWvgvbYib1cw6DGc2dtdr0uqGo/OH1bT1W8pJakw/VewxIDJre5FKfXXXkEzET8kXyIgrgv90lW/dVX+j3n/TcS9IxHSJH+7/Vc8vbmWOudFvXhTDWo8mXTk/kW30n2ObMcfvynmmw/7Nd1EvpuxgDtrOq+ackT3DhUfA6Kq7y4="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"680c7d1056b4591be83505aa86e9a3f9ff88239d0b880080ab494aa4325badd5","subject":{"common_name":["ILOCZ25250K8M"],"country":["US"],"locality":["Houston"],"organization":["Hewlett Packard Enterprise"],"organizational_unit":["ISS"],"province":["Texas"]},"subject_dn":"CN=ILOCZ25250K8M, O=Hewlett Packard Enterprise, OU=ISS, L=Houston, ST=Texas, C=US","subject_key_info":{"fingerprint_sha256":"be349ab9910728ef6acecfdbe03cff4b4ee19ea01c929c8436c1197d33189335","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"sBQarkbiHdObM2qBAtSmW25vKLRkukW5P7+3E5ArEaaxD3SGKXq4teNHeJVr7dQH7JIIOzlpW9c/R7l5BkNhaDD9Yq6WMR8A9BpicCQkxDuPafsebtBwPe6Ar34Ecgc4snD8sv7YPZL9Q9jUc0gLpBI6mO+uG4Z9zLzGyt+0Nt8="}},"tbs_fingerprint":"672bfc1bf3be9d6f12823cfeae76cbdd3614ae6e233dffd2c1f568d312a17062","tbs_noct_fingerprint":"672bfc1bf3be9d6f12823cfeae76cbdd3614ae6e233dffd2c1f568d312a17062","validation_level":"unknown","validity":{"end":"2033-02-27T17:19:11Z","length":"473299200","start":"2018-02-28T17:19:11Z"},"version":"3"}},"cipher_suite":{"id":"0x000A","name":"TLS_RSA_WITH_3DES_EDE_CBC_SHA"},"ocsp_stapling":false,"session_ticket":{"length":"160","lifetime_hint":"300"},"validation":{"browser_error":"x509: certificate signed by unknown authority","browser_trusted":false},"version":"TLSv1.2","timestamp":"2020-07-09T19:18:16Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T05:13:40Z"},"get":{"body":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSorry, your browser does not handle frames!\n\n\n","body_sha256":"10f75155d5be86fdc42b9be34888cd61e0c008dc0bad6e71151d07aa89781144","headers":{"content_type":"text/html","unknown":[{"key":"etag","value":"\"008b9359\""},{"key":"date","value":"Mon, 13 Jul 2020 22:45:28 GMT"}],"x_frame_options":"sameorigin"},"status_code":"200","status_line":"200 OK","timestamp":"2020-07-13T22:51:11Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T02:44:40Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T08:12:18Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqsqmj//////////w=="}},"support":true,"timestamp":"2020-07-12T04:53:46Z"}}},"p22":{"ssh":{"v2":{"banner":{"raw":"SSH-2.0-mpSSH_0.2.1","software":"mpSSH_0.2.1","version":"2.0"},"key_exchange":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqsqmj//////////w=="}}},"metadata":{"description":"HP mpSSH 0.2.1","manufacturer":"HP","product":"mpSSH","version":"0.2.1"},"selected":{"client_to_server":{"cipher":"aes256-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ssh-rsa","kex_algorithm":"diffie-hellman-group14-sha1","server_to_client":{"cipher":"aes256-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"fingerprint_sha256":"191fba73b0481f7075722933b869f8485b0054389c5a148d728e56875d1a3b20","key_algorithm":"ssh-rsa","rsa_public_key":{"exponent":"65537","length":"2048","modulus":"17O+St3SUJuY5oDpp+nJDfAC4WgflkX1t0OhmXQHrFlVmFkZ9Feuz5VlIFpBwOqwqErnNsspvcUghcSaqhN59z+pjWg/QSsiF6YLdUXS5fDtONKeRoEEC/jPoVMp1CvAbvPQDOGW9PpwN8imHEkfAkHtz9IW4IVug0meD4XPEIqhgNBdGrHBPgSI8Jn1GOeN2SDVcb3mk/aPREtvZjOY20YFymQ7S4iBEBhGfXkCdooWdg04Nd8ISfKCBKnrQ40/umAHnui36h2/ZV+7JRS9zqC1fXtceb82VCgrJifIYDqyyjf/NyrRa7CIoNii0ZOZqEG/grWakSK6CUfY1DoCYQ=="}},"support":{"client_to_server":{"ciphers":["aes256-ctr","aes256-cbc","aes128-cbc","3des-cbc"],"compressions":["none"],"macs":["hmac-sha1","hmac-sha2-256","hmac-md5"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","ssh-dss"],"kex_algorithms":["diffie-hellman-group14-sha1","diffie-hellman-group1-sha1"],"server_to_client":{"ciphers":["aes256-ctr","aes256-cbc","aes128-cbc","3des-cbc"],"compressions":["none"],"macs":["hmac-sha1","hmac-sha2-256","hmac-md5"]}},"timestamp":"2020-07-14T19:55:18Z"}}},"ipint":"3111532264","updated_at":"2020-07-14T19:55:18Z","location":{"country_code":"ES","continent":"Europe","timezone":"Europe/Madrid","latitude":40.4172,"longitude":-3.684,"registered_country":"Spain","registered_country_code":"ES","country":"Spain"},"autonomous_system":{"description":"SOLTIA","routed_prefix":"185.118.54.0/23","asn":"201942","country_code":"ES","name":"SOLTIA","path":["7018","1299","201942"]},"protocols":["22/ssh","443/https","80/http"],"ipinteger":"-399083847"} +{"address":"45.193.69.34","ipint":"767640866","updated_at":"2020-07-07T14:34:04Z","ip":"45.193.69.34","p80":{"http":{"get":{"body":"\n\n\n \n Test Page for the Nginx HTTP Server on Fedora\n \n \n \n\n \n

            Welcome to nginx on Fedora!

            \n\n
            \n \n\n","body_sha256":"64de234784c6580c1af10efe932785d02853d41bd5a08fb4b08a96a1bf1e9fb9","headers":{"connection":"keep-alive","content_type":"text/html","last_modified":"Tue, 06 Mar 2018 09:26:21 GMT","server":"nginx/1.12.2","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 14:25:48 GMT"},{"key":"etag","value":"W/\"5a9e5ebd-e74\""}],"vary":"Accept-Encoding"},"metadata":{"description":"nginx 1.12.2","product":"nginx","version":"1.12.2"},"status_code":"200","status_line":"200 OK","title":"Test Page for the Nginx HTTP Server on Fedora","timestamp":"2020-07-07T14:34:04Z"}}},"location":{"country_code":"HK","continent":"Asia","timezone":"Asia/Hong_Kong","province":"Central and Western District","latitude":22.2909,"longitude":114.15,"registered_country":"Hong Kong","registered_country_code":"HK","country":"Hong Kong"},"autonomous_system":{"description":"DXTL-HK DXTL Tseung Kwan O Service","routed_prefix":"45.193.64.0/18","asn":"134548","country_code":"HK","name":"DXTL-HK DXTL Tseung Kwan O Service","path":["7018","2914","134548","134548"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"574996781","version":"0","tags":["http"]} +{"address":"52.13.12.90","ipint":"873270362","updated_at":"2020-06-24T00:15:35Z","ip":"52.13.12.90","p80":{"http":{"get":{"headers":{"connection":"keep-alive","content_length":"0","strict_transport_security":"max-age=63072000000","unknown":[{"key":"date","value":"Wed, 24 Jun 2020 00:15:35 GMT"}],"x_content_type_options":"nosniff","x_xss_protection":"1; mode=block"},"status_code":"404","status_line":"404 Not Found","timestamp":"2020-06-24T00:15:35Z"}}},"ports":["80"],"protocols":["80/http"],"ipinteger":"1510739252","version":"0","tags":["http"]} +{"address":"177.106.97.135","ipint":"2976539015","updated_at":"2020-07-15T11:27:17Z","p7547":{"cwmp":{"get":{"headers":{"connection":"Keep-Alive","content_length":"0","www_authenticate":"Digest realm=\"HuaweiHomeGateway\",nonce=\"851a929b9045306dd1004bd24ed44f05\", qop=\"auth\", algorithm=\"MD5\""},"status_code":"401","status_line":"401 Unauthorized","timestamp":"2020-07-15T11:27:17Z"}}},"ip":"177.106.97.135","location":{"country_code":"BR","continent":"South America","city":"Uberaba","postal_code":"38000","timezone":"America/Sao_Paulo","province":"Minas Gerais","latitude":-19.5483,"longitude":-47.9414,"registered_country":"Brazil","registered_country_code":"BR","country":"Brazil"},"autonomous_system":{"description":"ALGAR TELECOM S/A","routed_prefix":"177.106.0.0/16","asn":"53006","country_code":"BR","name":"ALGAR TELECOM S/A","path":["7018","174","16735","53006"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-2023658831","version":"0","tags":["cwmp"]} +{"metadata":{"product":"DiskStation","description":"Synology DiskStation","device_type":"nas","manufacturer":"Synology"},"address":"88.120.220.98","ip":"88.120.220.98","p80":{"http":{"get":{"body":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNAS_doudou - Synology DiskStation\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
            \n\n
            \n
            \n\n\n\n\n\n\n\n\n\n\n\n\n\n
            \n\n\n\n","body_sha256":"c5b556a20d875673c45182c422fba72479caab9ded1183fcf9e166607a20f568","headers":{"cache_control":"no-store","connection":"keep-alive","content_security_policy":"base-uri 'self'; connect-src ws: wss: *; default-src 'self' 'unsafe-eval' data: blob: https://*.synology.com https://www.synology.cn/; font-src 'self' data: https://*.googleapis.com https://*.gstatic.com; form-action 'self'; frame-ancestors 'self' https://gofile.me http://gofile.me; frame-src 'self' data: blob: https://*.synology.com https://www.synology.cn/; img-src 'self' data: blob: https://*.google.com https://*.googleapis.com http://*.googlecode.com https://*.gstatic.com; media-src 'self' data: about:; report-uri webman/csp_report.cgi; script-src 'self' 'unsafe-eval' data: blob: https://*.synology.com https://www.synology.cn/ https://*.google.com https://*.googleapis.com; style-src 'self' 'unsafe-inline' https://*.googleapis.com;","content_type":"text/html; charset=\"UTF-8\"","p3p":"CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"","server":"nginx","unknown":[{"key":"keep_alive","value":"timeout=20"},{"key":"date","value":"Tue, 07 Jul 2020 14:00:22 GMT"}],"vary":"Accept-Encoding","x_content_type_options":"nosniff","x_frame_options":"SAMEORIGIN","x_xss_protection":"1; mode=block"},"metadata":{"description":"nginx","product":"nginx"},"status_code":"200","status_line":"200 OK","title":"NAS_doudou - Synology DiskStation","timestamp":"2020-07-07T14:00:19Z"}}},"ports":["80"],"version":"0","tags":["embedded","http","nas"],"ipint":"1484315746","updated_at":"2020-07-07T14:00:19Z","location":{"country_code":"FR","continent":"Europe","city":"Saint-Chamond","postal_code":"42400","timezone":"Europe/Paris","province":"Auvergne-Rhone-Alpes","latitude":45.4736,"longitude":4.5254,"registered_country":"France","registered_country_code":"FR","country":"France"},"autonomous_system":{"description":"PROXAD","routed_prefix":"88.120.0.0/13","asn":"12322","country_code":"FR","name":"PROXAD","path":["7018","174","12322","12322","12322","12322","12322"]},"protocols":["80/http"],"ipinteger":"1658615896"} +{"metadata":{"os":"Debian,Debian,Debian"},"address":"192.150.185.186","p8080":{"http":{"get":{"body":"\n\n400 Bad Request\n\n

            Bad Request

            \n

            Your browser sent a request that this server could not understand.
            \nReason: You're speaking plain HTTP to an SSL-enabled server port.
            \n Instead use the HTTPS scheme to access this URL, please.
            \n

            \n\n","body_sha256":"315b5579f75a8f732a18222b87bc50a81b03ce28aee9d7518ecb9288f38a9fdd","headers":{"content_length":"362","content_type":"text/html; charset=iso-8859-1","server":"Apache/2.4.25 (Debian)","unknown":[{"key":"date","value":"Fri, 10 Jul 2020 17:05:22 GMT"}]},"metadata":{"description":"Apache httpd 2.4.25","manufacturer":"Apache","product":"httpd","version":"2.4.25"},"status_code":"400","status_line":"400 Bad Request","title":"400 Bad Request","timestamp":"2020-07-10T17:05:22Z"}}},"ip":"192.150.185.186","p80":{"http":{"get":{"body":"\n\n\n \n \n Apache2 Debian Default Page: It works\n \n \n \n
            \n
            \n \"Debian\n \n Apache2 Debian Default Page\n \n
            \n\n
            \n\n\n
            \n
            \n It works!\n
            \n
            \n

            \n This is the default welcome page used to test the correct \n operation of the Apache2 server after installation on Debian systems.\n If you can read this page, it means that the Apache HTTP server installed at\n this site is working properly. You should replace this file (located at\n /var/www/html/index.html) before continuing to operate your HTTP server.\n

            \n\n\n

            \n If you are a normal user of this web site and don't know what this page is\n about, this probably means that the site is currently unavailable due to\n maintenance.\n If the problem persists, please contact the site's administrator.\n

            \n\n
            \n
            \n
            \n Configuration Overview\n
            \n
            \n

            \n Debian's Apache2 default configuration is different from the\n upstream default configuration, and split into several files optimized for\n interaction with Debian tools. The configuration system is\n fully documented in\n /usr/share/doc/apache2/README.Debian.gz. Refer to this for the full\n documentation. Documentation for the web server itself can be\n found by accessing the manual if the apache2-doc\n package was installed on this server.\n\n

            \n

            \n The configuration layout for an Apache2 web server installation on Debian systems is as follows:\n

            \n
            \n/etc/apache2/\n|-- apache2.conf\n|       `--  ports.conf\n|-- mods-enabled\n|       |-- *.load\n|       `-- *.conf\n|-- conf-enabled\n|       `-- *.conf\n|-- sites-enabled\n|       `-- *.conf\n          
            \n
              \n
            • \n apache2.conf is the main configuration\n file. It puts the pieces together by including all remaining configuration\n files when starting up the web server.\n
            • \n\n
            • \n ports.conf is always included from the\n main configuration file. It is used to determine the listening ports for\n incoming connections, and this file can be customized anytime.\n
            • \n\n
            • \n Configuration files in the mods-enabled/,\n conf-enabled/ and sites-enabled/ directories contain\n particular configuration snippets which manage modules, global configuration\n fragments, or virtual host configurations, respectively.\n
            • \n\n
            • \n They are activated by symlinking available\n configuration files from their respective\n *-available/ counterparts. These should be managed\n by using our helpers\n \n a2enmod,\n a2dismod,\n \n \n a2ensite,\n a2dissite,\n \n and\n \n a2enconf,\n a2disconf\n . See their respective man pages for detailed information.\n
            • \n\n
            • \n The binary is called apache2. Due to the use of\n environment variables, in the default configuration, apache2 needs to be\n started/stopped with /etc/init.d/apache2 or apache2ctl.\n Calling /usr/bin/apache2 directly will not work with the\n default configuration.\n
            • \n
            \n
            \n\n
            \n
            \n Document Roots\n
            \n\n
            \n

            \n By default, Debian does not allow access through the web browser to\n any file apart of those located in /var/www,\n public_html\n directories (when enabled) and /usr/share (for web\n applications). If your site is using a web document root\n located elsewhere (such as in /srv) you may need to whitelist your\n document root directory in /etc/apache2/apache2.conf.\n

            \n

            \n The default Debian document root is /var/www/html. You\n can make your own virtual hosts under /var/www. This is different\n to previous releases which provides better security out of the box.\n

            \n
            \n\n
            \n
            \n Reporting Problems\n
            \n
            \n

            \n Please use the reportbug tool to report bugs in the\n Apache2 package with Debian. However, check existing bug reports before reporting a new bug.\n

            \n

            \n Please report bugs specific to modules (such as PHP and others)\n to respective packages, not to the web server itself.\n

            \n
            \n\n\n\n\n
            \n
            \n
            \n
            \n \n\n\n","body_sha256":"f14e8167f12be74330c1b881b5aa3df95f5bd66d26f42cc03b87a7c38946c571","headers":{"accept_ranges":"bytes","content_type":"text/html","last_modified":"Thu, 17 Nov 2016 15:54:29 GMT","server":"Apache/2.4.25 (Debian)","unknown":[{"key":"etag","value":"\"29cd-5418134625740-gzip\""},{"key":"date","value":"Tue, 07 Jul 2020 12:37:16 GMT"}],"vary":"Accept-Encoding"},"metadata":{"description":"Apache httpd 2.4.25","manufacturer":"Apache","product":"httpd","version":"2.4.25"},"status_code":"200","status_line":"200 OK","title":"Apache2 Debian Default Page: It works","timestamp":"2020-07-07T12:37:16Z"}}},"ports":["80","8080","465","993","995","21","53","3306","443","587","143"],"version":"0","p21":{"ftp":{"banner":{"banner":"220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------\r\n220-You are user number 1 of 50 allowed.\r\n220-Local time is now 23:29. Server port: 21.\r\n220-This is a private system - No anonymous login\r\n220-IPv6 connections are also welcome on this server.\r\n220 You will be disconnected after 15 minutes of inactivity.","metadata":{"description":"Pure-FTPd","product":"Pure-FTPd"},"timestamp":"2020-07-13T03:29:27Z"}}},"p53":{"dns":{"lookup":{"errors":false,"open_resolver":false,"questions":[{"name":"c.afekv.com","type":"A"}],"resolves_correctly":false,"support":true,"timestamp":"2020-07-12T13:48:14Z"}}},"tags":["database","dns","ftp","http","https","imap","imaps","mysql","pop3s","smtp"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.int-x3.letsencrypt.org/"],"ocsp_urls":["http://ocsp.int-x3.letsencrypt.org"]},"authority_key_id":"a84a6a63047dddbae6d139b7a64565eff3a8eca1","basic_constraints":{"is_ca":false},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"sh4FzIuizYogTodm+Su5iiUgZ2va+nDnsklTLe+LkF4=","signature":"BAMARzBFAiBBgzQDhWKmCPukJp4mqRlxnslYBgDAi5QYnGKEueMy1wIhAMsU7TUGEtfTg4Lvj7wMNpJJLw+xMbWVdS1WxSbbYl/M","timestamp":"1592982503","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMARzBFAiBwOr+pq4BD2Ua/FuEuTPpc7Q3jO7vJ/jrUhwDSsV9rkgIhAK+0NtotK2J4TNu+euodEVjHQBR71EeupECws4UMdd/t","timestamp":"1592982503","version":"0"}],"subject_alt_name":{"dns_names":["lilani.ca","www.lilani.ca"]},"subject_key_id":"b6f7eeca533cd373bf4252d37ea4e6c1ee3979eb"},"fingerprint_md5":"bc55e37536d9fbb69a707824eea02d24","fingerprint_sha1":"12bb78c60c6c2c99381a2a073c14410b3a8cfdf5","fingerprint_sha256":"5928a67f7655e143e2860e22b357121cbbadb572ef7db7e927ffaedf99244287","issuer":{"common_name":["Let's Encrypt Authority X3"],"country":["US"],"organization":["Let's Encrypt"]},"issuer_dn":"C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3","names":["lilani.ca","www.lilani.ca"],"redacted":false,"serial_number":"408815827239725113961471609900494401691647","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"F8XLmzdpIrJt/Ub1uYIqfoHFsQEK1BxCfBMCMrg8fL3khr1V0jk0/gooY6zNRlFldlVVRP77EpS5dQECGxjKJPewfyUFZkpbWZioF4odOPyPwavLrlNmOHtgbC0i2BT+G5nHQpP8t9gGIa+foR2xIqS7+Fd/+TiEC8u4rgGQGF0j+JeOSiOzw2XWs5VEX1vvdv/3OstjcK0LfO4Tz9x1nmBXCrA2B3AVRu8zG1nVaFuP5QB18lO9dwwMK+uWv3dCz660Zx9PRV6hNJZ3ntKASBBJqcWtxH4tzbIMHhOW08oShKJS4i6GLkEQ8S8EVHHg0mGfJ7r+qtF6rENlvrE5PA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"333ad69a681318acae27dc25196de00c24164846f791f6e0a702dd1bfef6f5b2","subject":{"common_name":["lilani.ca"]},"subject_dn":"CN=lilani.ca","subject_key_info":{"fingerprint_sha256":"816eac5041b3ac8236284e5fc659354e1c33cbaab174347e29b220465b8d3b24","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"qOGlT9PMtuw9OZLeph5PUC9CaWD84Alpu9GMdi2fzpvSgjclE62UoDgRtTrRJnQ7A1nFLdM88Mcs6wZfYUB/l9+r/u/IaEuMGwrjKJmxSJZ2X42jJbzjSZwsJafKUo+mO3SKH7XcZcJVG2PB4LSIxz/g18t/PpPsckLQOJutGBlp7JTAW7smhwuvbBDkCwMhpW/fj0eqfCoi+0HlblboUEFbgeOIiTClH8TVU+danzZS5bI/gUNE+T6Ec4JpoXFhLPE7s0mXGBFppamjSP61oC3KIHxASMk0KV/zMKg+TLQYRDLM3GA4HOS16j0a0a0PwERV6zbGiIaB6CJJjBU7foadoWqywDmWIefYJTLmh6pG9Icxw1fcQtprhhMx/WfV+Th41THO/mw9ShoBd0KwC89Jyr9+StSfjqbM34LIvPA74HAhU9rLUHX/gaKCaIv3CwidaXtWgbPPcOX0dZs0XXj9uNFJ3Tn/1kyY/tBFZ+y8isBRVf1iieVGlPwK/YLoYRbi8Eaw0tt5Um3PXYyxiVDovDdCG2oCastl35DJ2DC1NleCav9E3ekf38QCjOellcxsHnxLvTMlVplX4cvR8KigTWXfavI82iAWiz8orbddqJoc+cyRNUizOjbDZHKWJeOuCvdMYhyMfEz7CoN0pu1eHtk7yG4Jj0XERkyixIM="}},"tbs_fingerprint":"d8d4eb0dec4698684524c3252240d02c18de4758fab8a65615a9ef12c3c439d6","tbs_noct_fingerprint":"d0ea2caad0acdf672c93d945938f591f8492fb6f5baa89e95be8025c44465a3e","validation_level":"DV","validity":{"end":"2020-09-22T06:08:23Z","length":"7776000","start":"2020-06-24T06:08:23Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://apps.identrust.com/roots/dstrootcax3.p7c"],"ocsp_urls":["http://isrg.trustid.ocsp.identrust.com"]},"authority_key_id":"c4a7b1a47b2c71fadbe14b9075ffc41560858910","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["http://cps.root-x1.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1"}],"crl_distribution_points":["http://crl.identrust.com/DSTROOTCAX3CRL.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"a84a6a63047dddbae6d139b7a64565eff3a8eca1"},"fingerprint_md5":"b15409274f54ad8f023d3b85a5ecec5d","fingerprint_sha1":"e6a3b45b062d509b3382282d196efe97d5956ccb","fingerprint_sha256":"25847d668eb4f04fdd40b12b6b0740c567da7d024308eb6c2c96fe41d9de218d","issuer":{"common_name":["DST Root CA X3"],"organization":["Digital Signature Trust Co."]},"issuer_dn":"O=Digital Signature Trust Co., CN=DST Root CA X3","redacted":false,"serial_number":"13298795840390663119752826058995181320","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJouM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwuX4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlGPfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"78d2913356ad04f8f362019df6cb4f4f8b003be0d2aa0d1cb37d2fd326b09c9e","subject":{"common_name":["Let's Encrypt Authority X3"],"country":["US"],"organization":["Let's Encrypt"]},"subject_dn":"C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3","subject_key_info":{"fingerprint_sha256":"60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"nNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EFq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWAa6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3Dkw=="}},"tbs_fingerprint":"3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838","tbs_noct_fingerprint":"3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838","validation_level":"DV","validity":{"end":"2021-03-17T16:40:46Z","length":"157766400","start":"2016-03-17T16:40:46Z"},"version":"3"}}],"cipher_suite":{"id":"0xC014","name":"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"},"ocsp_stapling":true,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"192","lifetime_hint":"300"},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T03:52:19Z"},"heartbleed":{"heartbeat_enabled":true,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T09:48:47Z"},"get":{"body":"\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nBusiness Services, Shared Services, Management Services, Operating Facilities, Contracting Services, BPO, KPO, Call Center, Domain Registration and Web Hosting, VPS\r\n\r\n\r\n\r\n\r\n

            \r\n

            \r\n

             

            \r\n

            Dedicated Shared Services, Business Services,\r\nManagement Services, Facilities Operating, Contracting Services, BPO, KPO, \r\n Call Center, Domain Registration, Web Hosting and VPS.

            \r\n

            FOR MORE INFORMATION PLEASE WRITE TO\r\n

            \r\n

            info at\r\nlilani dot com

            \r\n

            1-416-000-0000 Fax: +1 416 000 0000        \r\n\"Skype\t\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n \r\n

                  \r\n \r\n\r\n      \r\n               \r\n

            \r\n

            \r\n   \r\n

            \r\n

               You are encourgaed to visit NetBuzzy.com       \r\n\r\n

            \r\n

             

            \r\n

             

            \r\n

            Lilani is a registered Trade Mark of Lilani Enterprises\r\nInc.

            \r\n\r\n\r\n\r\n\r\n\r\n","body_sha256":"a46eda2a3479c5030aee87a476ad328eb215d540ffe682d00188557272957877","headers":{"accept_ranges":"bytes","content_type":"text/html","last_modified":"Tue, 19 Dec 2017 20:52:35 GMT","server":"Apache/2.4.25 (Debian)","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 17:48:32 GMT"},{"key":"etag","value":"\"e41-560b7a580a2e0-gzip\""}],"vary":"Accept-Encoding"},"metadata":{"description":"Apache httpd 2.4.25","manufacturer":"Apache","product":"httpd","version":"2.4.25"},"status_code":"200","status_line":"200 OK","title":"Business Services, Shared Services, Management Services, Operating Facilities, Contracting Services, BPO, KPO, Call Center, Domain Registration and Web Hosting, VPS","timestamp":"2020-07-14T17:48:32Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T11:03:17Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T09:34:38Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"4096","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqqxC2tMxcNBFB6M6hVIavfHLpk7PuFBFjb7wqK6nFXXQYMfbOXD4Wm4eTHq/WujNsJM9cejJTgSiVhnc7j0iYa0u5r8S/6BtmKCGTYdgJzPshqZFIfKxgXeyAMu+EXV3phXWx3CYjAutlG4gjiT6B05asxQ9tb/OD9EI5LgtEgqSEIARpyPBKnh+bXiHGaEL26WyaZwycYavTiPBqUaDS2FQvaJYPpyirUTOjbu8LbBN6O+S6O/BQfvsqmKHxZR05rwF2ZspZPoJDDoiM7oYZRW+ftH2EpcM7i16+4G912IXBIHNAGkSfVsFqpk7TqmI2P3cGG/7fckKbAj030Nck0BjGZ//////////8="}},"support":true,"timestamp":"2020-07-12T12:20:26Z"}}},"p465":{"smtp":{"tls":{"banner":"220 ns1.hubbuzzy.com ESMTP Postfix (Debian/GNU)","ehlo":"250-ns1.hubbuzzy.com\r\n250-PIPELINING\r\n250-SIZE\r\n250-VRFY\r\n250-ETRN\r\n250-AUTH PLAIN LOGIN\r\n250-AUTH=PLAIN LOGIN\r\n250-ENHANCEDSTATUSCODES\r\n250-8BITMIME\r\n250 DSN","tls":{"certificate":{"parsed":{"extensions":{"authority_key_id":"9b5caa29646495d4b0eb3dab2e4a9481d2bb2d28","basic_constraints":{"is_ca":true},"subject_key_id":"9b5caa29646495d4b0eb3dab2e4a9481d2bb2d28"},"fingerprint_md5":"2cee3a80c7dd4b818c4678bcb38dd5f4","fingerprint_sha1":"8f028c6084d19e8527d1ae52f12ffac165a0a721","fingerprint_sha256":"aea987f7c2426d5bf1ab8b9866fb7af8022319869a35c3618406e8b927a0e5e2","issuer":{"common_name":["HubBuzzy"],"country":["CA"],"locality":["Toronto"],"organization":["The Number One Company Inc."],"province":["Ontario"]},"issuer_dn":"C=CA, ST=Ontario, L=Toronto, O=The Number One Company Inc., CN=HubBuzzy","redacted":false,"serial_number":"9879948764769384498","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"UpVQYwZMP4fhtrtBJHXpFkOon0bKhW4y/DB7h6VjUkE0Gv0shSCkOwr+WPZO5jAhsWYT/V29inW4qwIVj0bpxonvdfZPgUz/IF78CVR3PIf/I6tUXL0fKg+ngN3ptfZ0EaBqwliqOr36xb2X3WplJctLQ4Q7wl/uoUG/AZhoTTPxjSo8iNBYx/jLPqiJaL+wiCdssjl0mp1c4yYyD+AnqQIpuDwG90X9VJhWRzvUb+D9UKYGbXdBsjTj6XSMdGVQ/7W8mKWrslM4wqwQf1eT51WHFzD5FpqpU0XeHwqIP3jKDgImlwootmIlqrigZpcdmTz0A989PkEPAAzMvzXEY769meYTwxZHekPGRBsXsl3eYnQgOTgG1uZ1ULsilPmsxlgPnwTIF2IIOg6DbxRbwQQhB1f1Xh6WjsquWzHG4tio+uocdxOXW1VPOqJToiNGVXNnxEM684MuHeOYTpQ2nj/ViijlFr5d0JwI9egb0+7EqtOJjO3YsZtpTj4Qj4sPi//rXk02ABW7Q5qa2qN592qZqdJ3qt00wQX61hAChzcYOpjydmNCDSvAS1wIqHPYvCHExQe1Mgfr5Li0o69Km39JHybSkqCYxxPOh86F0wDrfvAddNqMECKusO9eeJm1DIpkHSRXQwif1Tp3ollIA7Py9iitSQtdl05U+xIuakc="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d27f6661ebc9bd24d18c0b8d5184b6b5efcd6cf7a483a489e5d1bdb71400f652","subject":{"common_name":["HubBuzzy"],"country":["CA"],"locality":["Toronto"],"organization":["The Number One Company Inc."],"province":["Ontario"]},"subject_dn":"C=CA, ST=Ontario, L=Toronto, O=The Number One Company Inc., CN=HubBuzzy","subject_key_info":{"fingerprint_sha256":"12c9afc48ef797889fba8e4ae7a36012c62868667e4a7d84c236d2fab86799a2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"yTL+MDbnUPyQazczVbrtuCdEfZOznFS4Ayq8G5TfYdiXZwvtO3opUXwMs8mhAOdryiyfNmK3y41bweIBhkTEC4zC7+x9KmDyBlXQ5Is+uOFoUcjsP0JoscuVMlwN2gEX9oSJ+S6/J+VmWqOXuuhxa/iyyOh0TsQwPNKo87ZeE5adxzURevyyZIh0+X/3e/QjxM7oBwSWTCdearNM7KtwQVcu1TNQTv57PYgQrRFFJCxf7R5pZk08+X3iAhXUGuMK2EF1ykPRYaT6Nu7OQGeBG57cfz/TDn+jEZbUBxK+nYP7r3CopLUW+NYPFRxTliyPwLreJiLwdaQ8NtLrAs/LH5Dwgtj3Td/J/efgt9YzeXJgil7FPDAgh37blO5w01zQed+sEiJ0UklBn5rNQybiFduGf1RAOSZL2GFFUvAPt1jsSe/XvQkIXDG/InxGFs6IeChkGIBNcs+LqqjD4jqt+R9otheZGSTgaNCUB0eNgmdN5OVDPwtUNCOoNoU8+qNX51fC3rZHnRq3VIFf1E1Hldf+uCgBopM09OsOdR0y/Ksawfe0pycv5gkCjN5tt1KiyVlHTzX4o8j19nhLLOJCiuBrXBtdKskyVwtFnNZNGqUpJDee+jdQqj4lvQS3JPr6yRZ4U9hxyLI2s3s/lOL7CmmUrGiQKZxsInENGX4eomE="}},"tbs_fingerprint":"a6a2b54a1d8b37a7f32acee0bb591b4dec2a5f9b34fe9140da462f1862d92c80","tbs_noct_fingerprint":"a6a2b54a1d8b37a7f32acee0bb591b4dec2a5f9b34fe9140da462f1862d92c80","validation_level":"unknown","validity":{"end":"2025-12-30T02:41:12Z","length":"315360000","start":"2016-01-02T02:41:12Z"},"version":"3"}},"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-14T06:10:25Z"}}},"p993":{"imaps":{"tls":{"banner":"* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.","tls":{"certificate":{"parsed":{"extensions":{"authority_key_id":"9b5caa29646495d4b0eb3dab2e4a9481d2bb2d28","basic_constraints":{"is_ca":true},"subject_key_id":"9b5caa29646495d4b0eb3dab2e4a9481d2bb2d28"},"fingerprint_md5":"2cee3a80c7dd4b818c4678bcb38dd5f4","fingerprint_sha1":"8f028c6084d19e8527d1ae52f12ffac165a0a721","fingerprint_sha256":"aea987f7c2426d5bf1ab8b9866fb7af8022319869a35c3618406e8b927a0e5e2","issuer":{"common_name":["HubBuzzy"],"country":["CA"],"locality":["Toronto"],"organization":["The Number One Company Inc."],"province":["Ontario"]},"issuer_dn":"C=CA, ST=Ontario, L=Toronto, O=The Number One Company Inc., CN=HubBuzzy","redacted":false,"serial_number":"9879948764769384498","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"UpVQYwZMP4fhtrtBJHXpFkOon0bKhW4y/DB7h6VjUkE0Gv0shSCkOwr+WPZO5jAhsWYT/V29inW4qwIVj0bpxonvdfZPgUz/IF78CVR3PIf/I6tUXL0fKg+ngN3ptfZ0EaBqwliqOr36xb2X3WplJctLQ4Q7wl/uoUG/AZhoTTPxjSo8iNBYx/jLPqiJaL+wiCdssjl0mp1c4yYyD+AnqQIpuDwG90X9VJhWRzvUb+D9UKYGbXdBsjTj6XSMdGVQ/7W8mKWrslM4wqwQf1eT51WHFzD5FpqpU0XeHwqIP3jKDgImlwootmIlqrigZpcdmTz0A989PkEPAAzMvzXEY769meYTwxZHekPGRBsXsl3eYnQgOTgG1uZ1ULsilPmsxlgPnwTIF2IIOg6DbxRbwQQhB1f1Xh6WjsquWzHG4tio+uocdxOXW1VPOqJToiNGVXNnxEM684MuHeOYTpQ2nj/ViijlFr5d0JwI9egb0+7EqtOJjO3YsZtpTj4Qj4sPi//rXk02ABW7Q5qa2qN592qZqdJ3qt00wQX61hAChzcYOpjydmNCDSvAS1wIqHPYvCHExQe1Mgfr5Li0o69Km39JHybSkqCYxxPOh86F0wDrfvAddNqMECKusO9eeJm1DIpkHSRXQwif1Tp3ollIA7Py9iitSQtdl05U+xIuakc="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d27f6661ebc9bd24d18c0b8d5184b6b5efcd6cf7a483a489e5d1bdb71400f652","subject":{"common_name":["HubBuzzy"],"country":["CA"],"locality":["Toronto"],"organization":["The Number One Company Inc."],"province":["Ontario"]},"subject_dn":"C=CA, ST=Ontario, L=Toronto, O=The Number One Company Inc., CN=HubBuzzy","subject_key_info":{"fingerprint_sha256":"12c9afc48ef797889fba8e4ae7a36012c62868667e4a7d84c236d2fab86799a2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"yTL+MDbnUPyQazczVbrtuCdEfZOznFS4Ayq8G5TfYdiXZwvtO3opUXwMs8mhAOdryiyfNmK3y41bweIBhkTEC4zC7+x9KmDyBlXQ5Is+uOFoUcjsP0JoscuVMlwN2gEX9oSJ+S6/J+VmWqOXuuhxa/iyyOh0TsQwPNKo87ZeE5adxzURevyyZIh0+X/3e/QjxM7oBwSWTCdearNM7KtwQVcu1TNQTv57PYgQrRFFJCxf7R5pZk08+X3iAhXUGuMK2EF1ykPRYaT6Nu7OQGeBG57cfz/TDn+jEZbUBxK+nYP7r3CopLUW+NYPFRxTliyPwLreJiLwdaQ8NtLrAs/LH5Dwgtj3Td/J/efgt9YzeXJgil7FPDAgh37blO5w01zQed+sEiJ0UklBn5rNQybiFduGf1RAOSZL2GFFUvAPt1jsSe/XvQkIXDG/InxGFs6IeChkGIBNcs+LqqjD4jqt+R9otheZGSTgaNCUB0eNgmdN5OVDPwtUNCOoNoU8+qNX51fC3rZHnRq3VIFf1E1Hldf+uCgBopM09OsOdR0y/Ksawfe0pycv5gkCjN5tt1KiyVlHTzX4o8j19nhLLOJCiuBrXBtdKskyVwtFnNZNGqUpJDee+jdQqj4lvQS3JPr6yRZ4U9hxyLI2s3s/lOL7CmmUrGiQKZxsInENGX4eomE="}},"tbs_fingerprint":"a6a2b54a1d8b37a7f32acee0bb591b4dec2a5f9b34fe9140da462f1862d92c80","tbs_noct_fingerprint":"a6a2b54a1d8b37a7f32acee0bb591b4dec2a5f9b34fe9140da462f1862d92c80","validation_level":"unknown","validity":{"end":"2025-12-30T02:41:12Z","length":"315360000","start":"2016-01-02T02:41:12Z"},"version":"3"}},"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"24","name":"secp384r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-15T07:46:21Z"}}},"p143":{"imap":{"starttls":{"banner":"* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.","metadata":{"description":"Dovecot","product":"Dovecot"},"starttls":"a001 OK Begin TLS negotiation now.","tls":{"certificate":{"parsed":{"extensions":{"authority_key_id":"9b5caa29646495d4b0eb3dab2e4a9481d2bb2d28","basic_constraints":{"is_ca":true},"subject_key_id":"9b5caa29646495d4b0eb3dab2e4a9481d2bb2d28"},"fingerprint_md5":"2cee3a80c7dd4b818c4678bcb38dd5f4","fingerprint_sha1":"8f028c6084d19e8527d1ae52f12ffac165a0a721","fingerprint_sha256":"aea987f7c2426d5bf1ab8b9866fb7af8022319869a35c3618406e8b927a0e5e2","issuer":{"common_name":["HubBuzzy"],"country":["CA"],"locality":["Toronto"],"organization":["The Number One Company Inc."],"province":["Ontario"]},"issuer_dn":"C=CA, ST=Ontario, L=Toronto, O=The Number One Company Inc., CN=HubBuzzy","redacted":false,"serial_number":"9879948764769384498","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"UpVQYwZMP4fhtrtBJHXpFkOon0bKhW4y/DB7h6VjUkE0Gv0shSCkOwr+WPZO5jAhsWYT/V29inW4qwIVj0bpxonvdfZPgUz/IF78CVR3PIf/I6tUXL0fKg+ngN3ptfZ0EaBqwliqOr36xb2X3WplJctLQ4Q7wl/uoUG/AZhoTTPxjSo8iNBYx/jLPqiJaL+wiCdssjl0mp1c4yYyD+AnqQIpuDwG90X9VJhWRzvUb+D9UKYGbXdBsjTj6XSMdGVQ/7W8mKWrslM4wqwQf1eT51WHFzD5FpqpU0XeHwqIP3jKDgImlwootmIlqrigZpcdmTz0A989PkEPAAzMvzXEY769meYTwxZHekPGRBsXsl3eYnQgOTgG1uZ1ULsilPmsxlgPnwTIF2IIOg6DbxRbwQQhB1f1Xh6WjsquWzHG4tio+uocdxOXW1VPOqJToiNGVXNnxEM684MuHeOYTpQ2nj/ViijlFr5d0JwI9egb0+7EqtOJjO3YsZtpTj4Qj4sPi//rXk02ABW7Q5qa2qN592qZqdJ3qt00wQX61hAChzcYOpjydmNCDSvAS1wIqHPYvCHExQe1Mgfr5Li0o69Km39JHybSkqCYxxPOh86F0wDrfvAddNqMECKusO9eeJm1DIpkHSRXQwif1Tp3ollIA7Py9iitSQtdl05U+xIuakc="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d27f6661ebc9bd24d18c0b8d5184b6b5efcd6cf7a483a489e5d1bdb71400f652","subject":{"common_name":["HubBuzzy"],"country":["CA"],"locality":["Toronto"],"organization":["The Number One Company Inc."],"province":["Ontario"]},"subject_dn":"C=CA, ST=Ontario, L=Toronto, O=The Number One Company Inc., CN=HubBuzzy","subject_key_info":{"fingerprint_sha256":"12c9afc48ef797889fba8e4ae7a36012c62868667e4a7d84c236d2fab86799a2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"yTL+MDbnUPyQazczVbrtuCdEfZOznFS4Ayq8G5TfYdiXZwvtO3opUXwMs8mhAOdryiyfNmK3y41bweIBhkTEC4zC7+x9KmDyBlXQ5Is+uOFoUcjsP0JoscuVMlwN2gEX9oSJ+S6/J+VmWqOXuuhxa/iyyOh0TsQwPNKo87ZeE5adxzURevyyZIh0+X/3e/QjxM7oBwSWTCdearNM7KtwQVcu1TNQTv57PYgQrRFFJCxf7R5pZk08+X3iAhXUGuMK2EF1ykPRYaT6Nu7OQGeBG57cfz/TDn+jEZbUBxK+nYP7r3CopLUW+NYPFRxTliyPwLreJiLwdaQ8NtLrAs/LH5Dwgtj3Td/J/efgt9YzeXJgil7FPDAgh37blO5w01zQed+sEiJ0UklBn5rNQybiFduGf1RAOSZL2GFFUvAPt1jsSe/XvQkIXDG/InxGFs6IeChkGIBNcs+LqqjD4jqt+R9otheZGSTgaNCUB0eNgmdN5OVDPwtUNCOoNoU8+qNX51fC3rZHnRq3VIFf1E1Hldf+uCgBopM09OsOdR0y/Ksawfe0pycv5gkCjN5tt1KiyVlHTzX4o8j19nhLLOJCiuBrXBtdKskyVwtFnNZNGqUpJDee+jdQqj4lvQS3JPr6yRZ4U9hxyLI2s3s/lOL7CmmUrGiQKZxsInENGX4eomE="}},"tbs_fingerprint":"a6a2b54a1d8b37a7f32acee0bb591b4dec2a5f9b34fe9140da462f1862d92c80","tbs_noct_fingerprint":"a6a2b54a1d8b37a7f32acee0bb591b4dec2a5f9b34fe9140da462f1862d92c80","validation_level":"unknown","validity":{"end":"2025-12-30T02:41:12Z","length":"315360000","start":"2016-01-02T02:41:12Z"},"version":"3"}},"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"24","name":"secp384r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-12T10:06:36Z"}}},"ipint":"3231103418","p3306":{"mysql":{"banner":{"capability_flags":{"CLIENT_COMPRESS":true,"CLIENT_CONNECT_ATTRS":true,"CLIENT_CONNECT_WITH_DB":true,"CLIENT_FOUND_ROWS":true,"CLIENT_IGNORE_SIGPIPE":true,"CLIENT_IGNORE_SPACE":true,"CLIENT_INTERACTIVE":true,"CLIENT_LOCAL_FILES":true,"CLIENT_LONG_FLAG":true,"CLIENT_LONG_PASSWORD":true,"CLIENT_MULTI_RESULTS":true,"CLIENT_MULTI_STATEMENTS":true,"CLIENT_NO_SCHEMA":true,"CLIENT_ODBC":true,"CLIENT_PLUGIN_AUTH":true,"CLIENT_PLUGIN_AUTH_LEN_ENC_CLIENT_DATA":true,"CLIENT_PROTOCOL_41":true,"CLIENT_PS_MULTI_RESULTS":true,"CLIENT_RESERVED":true,"CLIENT_SECURE_CONNECTION":true,"CLIENT_TRANSACTIONS":true},"protocol_version":"10","server_version":"5.5.5-10.1.41-MariaDB-0+deb9u1","status_flags":{"SERVER_STATUS_AUTOCOMMIT":true},"supported":true,"timestamp":"2020-07-13T10:54:45Z"}}},"updated_at":"2020-07-15T07:46:21Z","p995":{"pop3s":{"tls":{"banner":"+OK Dovecot ready.","tls":{"certificate":{"parsed":{"extensions":{"authority_key_id":"9b5caa29646495d4b0eb3dab2e4a9481d2bb2d28","basic_constraints":{"is_ca":true},"subject_key_id":"9b5caa29646495d4b0eb3dab2e4a9481d2bb2d28"},"fingerprint_md5":"2cee3a80c7dd4b818c4678bcb38dd5f4","fingerprint_sha1":"8f028c6084d19e8527d1ae52f12ffac165a0a721","fingerprint_sha256":"aea987f7c2426d5bf1ab8b9866fb7af8022319869a35c3618406e8b927a0e5e2","issuer":{"common_name":["HubBuzzy"],"country":["CA"],"locality":["Toronto"],"organization":["The Number One Company Inc."],"province":["Ontario"]},"issuer_dn":"C=CA, ST=Ontario, L=Toronto, O=The Number One Company Inc., CN=HubBuzzy","redacted":false,"serial_number":"9879948764769384498","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"UpVQYwZMP4fhtrtBJHXpFkOon0bKhW4y/DB7h6VjUkE0Gv0shSCkOwr+WPZO5jAhsWYT/V29inW4qwIVj0bpxonvdfZPgUz/IF78CVR3PIf/I6tUXL0fKg+ngN3ptfZ0EaBqwliqOr36xb2X3WplJctLQ4Q7wl/uoUG/AZhoTTPxjSo8iNBYx/jLPqiJaL+wiCdssjl0mp1c4yYyD+AnqQIpuDwG90X9VJhWRzvUb+D9UKYGbXdBsjTj6XSMdGVQ/7W8mKWrslM4wqwQf1eT51WHFzD5FpqpU0XeHwqIP3jKDgImlwootmIlqrigZpcdmTz0A989PkEPAAzMvzXEY769meYTwxZHekPGRBsXsl3eYnQgOTgG1uZ1ULsilPmsxlgPnwTIF2IIOg6DbxRbwQQhB1f1Xh6WjsquWzHG4tio+uocdxOXW1VPOqJToiNGVXNnxEM684MuHeOYTpQ2nj/ViijlFr5d0JwI9egb0+7EqtOJjO3YsZtpTj4Qj4sPi//rXk02ABW7Q5qa2qN592qZqdJ3qt00wQX61hAChzcYOpjydmNCDSvAS1wIqHPYvCHExQe1Mgfr5Li0o69Km39JHybSkqCYxxPOh86F0wDrfvAddNqMECKusO9eeJm1DIpkHSRXQwif1Tp3ollIA7Py9iitSQtdl05U+xIuakc="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d27f6661ebc9bd24d18c0b8d5184b6b5efcd6cf7a483a489e5d1bdb71400f652","subject":{"common_name":["HubBuzzy"],"country":["CA"],"locality":["Toronto"],"organization":["The Number One Company Inc."],"province":["Ontario"]},"subject_dn":"C=CA, ST=Ontario, L=Toronto, O=The Number One Company Inc., CN=HubBuzzy","subject_key_info":{"fingerprint_sha256":"12c9afc48ef797889fba8e4ae7a36012c62868667e4a7d84c236d2fab86799a2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"yTL+MDbnUPyQazczVbrtuCdEfZOznFS4Ayq8G5TfYdiXZwvtO3opUXwMs8mhAOdryiyfNmK3y41bweIBhkTEC4zC7+x9KmDyBlXQ5Is+uOFoUcjsP0JoscuVMlwN2gEX9oSJ+S6/J+VmWqOXuuhxa/iyyOh0TsQwPNKo87ZeE5adxzURevyyZIh0+X/3e/QjxM7oBwSWTCdearNM7KtwQVcu1TNQTv57PYgQrRFFJCxf7R5pZk08+X3iAhXUGuMK2EF1ykPRYaT6Nu7OQGeBG57cfz/TDn+jEZbUBxK+nYP7r3CopLUW+NYPFRxTliyPwLreJiLwdaQ8NtLrAs/LH5Dwgtj3Td/J/efgt9YzeXJgil7FPDAgh37blO5w01zQed+sEiJ0UklBn5rNQybiFduGf1RAOSZL2GFFUvAPt1jsSe/XvQkIXDG/InxGFs6IeChkGIBNcs+LqqjD4jqt+R9otheZGSTgaNCUB0eNgmdN5OVDPwtUNCOoNoU8+qNX51fC3rZHnRq3VIFf1E1Hldf+uCgBopM09OsOdR0y/Ksawfe0pycv5gkCjN5tt1KiyVlHTzX4o8j19nhLLOJCiuBrXBtdKskyVwtFnNZNGqUpJDee+jdQqj4lvQS3JPr6yRZ4U9hxyLI2s3s/lOL7CmmUrGiQKZxsInENGX4eomE="}},"tbs_fingerprint":"a6a2b54a1d8b37a7f32acee0bb591b4dec2a5f9b34fe9140da462f1862d92c80","tbs_noct_fingerprint":"a6a2b54a1d8b37a7f32acee0bb591b4dec2a5f9b34fe9140da462f1862d92c80","validation_level":"unknown","validity":{"end":"2025-12-30T02:41:12Z","length":"315360000","start":"2016-01-02T02:41:12Z"},"version":"3"}},"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"24","name":"secp384r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-10T17:22:44Z"}}},"p587":{"smtp":{"starttls":{"banner":"220 ns1.hubbuzzy.com ESMTP Postfix (Debian/GNU)","ehlo":"250-ns1.hubbuzzy.com\r\n250-PIPELINING\r\n250-SIZE\r\n250-VRFY\r\n250-ETRN\r\n250-STARTTLS\r\n250-ENHANCEDSTATUSCODES\r\n250-8BITMIME\r\n250 DSN","metadata":{"description":"Postfix","product":"Postfix"},"starttls":"220 2.0.0 Ready to start TLS","tls":{"certificate":{"parsed":{"extensions":{"authority_key_id":"9b5caa29646495d4b0eb3dab2e4a9481d2bb2d28","basic_constraints":{"is_ca":true},"subject_key_id":"9b5caa29646495d4b0eb3dab2e4a9481d2bb2d28"},"fingerprint_md5":"2cee3a80c7dd4b818c4678bcb38dd5f4","fingerprint_sha1":"8f028c6084d19e8527d1ae52f12ffac165a0a721","fingerprint_sha256":"aea987f7c2426d5bf1ab8b9866fb7af8022319869a35c3618406e8b927a0e5e2","issuer":{"common_name":["HubBuzzy"],"country":["CA"],"locality":["Toronto"],"organization":["The Number One Company Inc."],"province":["Ontario"]},"issuer_dn":"C=CA, ST=Ontario, L=Toronto, O=The Number One Company Inc., CN=HubBuzzy","redacted":false,"serial_number":"9879948764769384498","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"UpVQYwZMP4fhtrtBJHXpFkOon0bKhW4y/DB7h6VjUkE0Gv0shSCkOwr+WPZO5jAhsWYT/V29inW4qwIVj0bpxonvdfZPgUz/IF78CVR3PIf/I6tUXL0fKg+ngN3ptfZ0EaBqwliqOr36xb2X3WplJctLQ4Q7wl/uoUG/AZhoTTPxjSo8iNBYx/jLPqiJaL+wiCdssjl0mp1c4yYyD+AnqQIpuDwG90X9VJhWRzvUb+D9UKYGbXdBsjTj6XSMdGVQ/7W8mKWrslM4wqwQf1eT51WHFzD5FpqpU0XeHwqIP3jKDgImlwootmIlqrigZpcdmTz0A989PkEPAAzMvzXEY769meYTwxZHekPGRBsXsl3eYnQgOTgG1uZ1ULsilPmsxlgPnwTIF2IIOg6DbxRbwQQhB1f1Xh6WjsquWzHG4tio+uocdxOXW1VPOqJToiNGVXNnxEM684MuHeOYTpQ2nj/ViijlFr5d0JwI9egb0+7EqtOJjO3YsZtpTj4Qj4sPi//rXk02ABW7Q5qa2qN592qZqdJ3qt00wQX61hAChzcYOpjydmNCDSvAS1wIqHPYvCHExQe1Mgfr5Li0o69Km39JHybSkqCYxxPOh86F0wDrfvAddNqMECKusO9eeJm1DIpkHSRXQwif1Tp3ollIA7Py9iitSQtdl05U+xIuakc="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d27f6661ebc9bd24d18c0b8d5184b6b5efcd6cf7a483a489e5d1bdb71400f652","subject":{"common_name":["HubBuzzy"],"country":["CA"],"locality":["Toronto"],"organization":["The Number One Company Inc."],"province":["Ontario"]},"subject_dn":"C=CA, ST=Ontario, L=Toronto, O=The Number One Company Inc., CN=HubBuzzy","subject_key_info":{"fingerprint_sha256":"12c9afc48ef797889fba8e4ae7a36012c62868667e4a7d84c236d2fab86799a2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"yTL+MDbnUPyQazczVbrtuCdEfZOznFS4Ayq8G5TfYdiXZwvtO3opUXwMs8mhAOdryiyfNmK3y41bweIBhkTEC4zC7+x9KmDyBlXQ5Is+uOFoUcjsP0JoscuVMlwN2gEX9oSJ+S6/J+VmWqOXuuhxa/iyyOh0TsQwPNKo87ZeE5adxzURevyyZIh0+X/3e/QjxM7oBwSWTCdearNM7KtwQVcu1TNQTv57PYgQrRFFJCxf7R5pZk08+X3iAhXUGuMK2EF1ykPRYaT6Nu7OQGeBG57cfz/TDn+jEZbUBxK+nYP7r3CopLUW+NYPFRxTliyPwLreJiLwdaQ8NtLrAs/LH5Dwgtj3Td/J/efgt9YzeXJgil7FPDAgh37blO5w01zQed+sEiJ0UklBn5rNQybiFduGf1RAOSZL2GFFUvAPt1jsSe/XvQkIXDG/InxGFs6IeChkGIBNcs+LqqjD4jqt+R9otheZGSTgaNCUB0eNgmdN5OVDPwtUNCOoNoU8+qNX51fC3rZHnRq3VIFf1E1Hldf+uCgBopM09OsOdR0y/Ksawfe0pycv5gkCjN5tt1KiyVlHTzX4o8j19nhLLOJCiuBrXBtdKskyVwtFnNZNGqUpJDee+jdQqj4lvQS3JPr6yRZ4U9hxyLI2s3s/lOL7CmmUrGiQKZxsInENGX4eomE="}},"tbs_fingerprint":"a6a2b54a1d8b37a7f32acee0bb591b4dec2a5f9b34fe9140da462f1862d92c80","tbs_noct_fingerprint":"a6a2b54a1d8b37a7f32acee0bb591b4dec2a5f9b34fe9140da462f1862d92c80","validation_level":"unknown","validity":{"end":"2025-12-30T02:41:12Z","length":"315360000","start":"2016-01-02T02:41:12Z"},"version":"3"}},"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-11T03:41:34Z"}}},"location":{"country_code":"CA","continent":"North America","timezone":"America/Toronto","latitude":43.6319,"longitude":-79.3716,"registered_country":"Canada","registered_country_code":"CA","country":"Canada"},"autonomous_system":{"description":"LILENT01","routed_prefix":"192.150.185.0/24","asn":"17188","country_code":"CA","name":"LILENT01","path":["7922","33657","29713","17188"]},"protocols":["143/imap","21/ftp","3306/mysql","443/https","465/smtp","53/dns","587/smtp","80/http","8080/http","993/imaps","995/pop3s"],"ipinteger":"-1162242368"} +{"metadata":{"os":"CentOS,CentOS"},"address":"35.164.59.98","ip":"35.164.59.98","p80":{"http":{"get":{"body":"\n\n\n\n\nRedirect\n
            \nIncorrect access detected, this server may be accessed only through \"https://gptchealth.remote-learner.net\" address, sorry.
            Please notify server administrator.\n
            \n\n\n\n\nRedirect\n
            This page should automatically redirect. If nothing is happening please use the continue link below.
            Continue
            ","body_sha256":"ab82fcb63796c0896d369f724c76a97d3d40dbdb62f175c20f44776afcf31b89","headers":{"cache_control":"max-age=30","content_language":"en-us","content_type":"text/html; charset=UTF-8","expires":"Tue, 07 Jul 2020 10:28:06 GMT","server":"Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 10:27:36 GMT"}],"vary":"Accept-Encoding,User-Agent"},"metadata":{"description":"Apache httpd 2.4.6","manufacturer":"Apache","product":"httpd","version":"2.4.6"},"status_code":"200","status_line":"200 OK","title":"Redirect","timestamp":"2020-07-07T10:27:36Z"}}},"ports":["80","22","443"],"version":"0","tags":["http","https","ssh"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://certificates.godaddy.com/repository/gdig2.crt"],"ocsp_urls":["http://ocsp.godaddy.com/"]},"authority_key_id":"40c2bd278ecc348330a233d7fb6cb3f0b42c80ce","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["http://certificates.godaddy.com/repository/"],"id":"2.16.840.1.114413.1.7.23.1"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.godaddy.com/gdig2s1-2000.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOM=","signature":"BAMARjBEAiAin33DtaAHpcbmmpwJiEQyzUNx++hiaPo5dINsDHhaIQIgCyxC+hvOACxzMTyb94o5wzMoO47akByDnS0c+Jh97Ag=","timestamp":"1591058033","version":"0"},{"log_id":"XNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbHDso=","signature":"BAMARzBFAiEArvbXdO4Wx/pvtxpMdOXTU//co9lzBqyinQIP26R8bUkCIGvTbYvVtqHKFU//m2ijtBcdzwlUpB1saE6lMOx9iTLl","timestamp":"1591058034","version":"0"}],"subject_alt_name":{"dns_names":["*.remote-learner.net","remote-learner.net"]},"subject_key_id":"c3c8a83655abce4023e20f743079efd4c2de0b87"},"fingerprint_md5":"f8172a6dfc3930d3cf85456821307540","fingerprint_sha1":"2f628a7113ece4f07c0c0bb33b6f5636e7b0a477","fingerprint_sha256":"924723187a63535dac1bf98f259bd878a8c224ffa0ed8190bb428ca83bedb278","issuer":{"common_name":["Go Daddy Secure Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["GoDaddy.com, Inc."],"organizational_unit":["http://certs.godaddy.com/repository/"],"province":["Arizona"]},"issuer_dn":"C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certs.godaddy.com/repository/, CN=Go Daddy Secure Certificate Authority - G2","names":["*.remote-learner.net","remote-learner.net"],"redacted":false,"serial_number":"4423336963428918565","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"JnNkLLFYPwIn9hOGyVeJ086lzc4JF+BpEXLLT4AXz+qAw5SyufhLfs0xkwqhpDcLy7RUxRxqU2hMAAJcbxTpFw6ZvdJAwPAfG5L6YWUnVpRqsNJPT8cx+OmjUb2YAWRx/7lAhXSs0SQVVca8dZmeHsM/sfWRJLiTsMzdSVlZqH91OiJbctSgHDam4xPWW33LMGTavXmtc6AV6JGfSj/L7NZQka4Fb45/BboUrli5YhFZG+SG/FO8zkkfhFpPI23HKt3VqpiFfuvkU6m9WJFsIzUAf4dy3RNAEiaBcUsaVJb7tcWC7/9gnAFIDCOaGOmFs87Ew7P5MHVa29hKNymQ5g=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"8069307c4d9ee65859bd0ae854226d1eaf5a2d3c3b1b37bdf30544f9a2bebeef","subject":{"common_name":["*.remote-learner.net"],"organizational_unit":["Domain Control Validated"]},"subject_dn":"OU=Domain Control Validated, CN=*.remote-learner.net","subject_key_info":{"fingerprint_sha256":"cd639b49b35fe1dab115c7dd05d2aac40685585758e39e844e65dc6309f57dd1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1uEJiXUqQpIz1JG2burI/SdPZKKnewec3Xk8A6V4JeCWVm4IzOx+tDnaZsU1IfdYvppfSVQ7wsU1zYtgVacV/vUYCj0Y59Q75qN1ULPUrNpxuqnPD51+24mR82NB30b74IXVSSmUEoLV/qibFB2e+Pm7HdKjDQF05c/J1aGWzDq7cUX6QRNH9FFksy13MuCB+80XJivy8wdYlIkQ01ZLcjQwN33KBj7G14rK26cIUS0g7SNN015ujTZZDQvVl6kVNzsweCgcLT6ddakhl5zMtab5lECs7CqSGKNkp/XTzsok1DPBRr0ksz27eEealKTLCxiF5Oom8uvJo1RKB5g22Q=="}},"tbs_fingerprint":"c23f856e5bf7340672a020cb4f91de2eaf77c15e6e25911b9cc0f43e88615f94","tbs_noct_fingerprint":"435b33ffaafbdb83515ec7b9cc25e790decf4af85fde3c751f4108f00638b809","validation_level":"DV","validity":{"end":"2021-08-06T19:41:10Z","length":"37221019","start":"2020-06-02T00:30:51Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.godaddy.com/"]},"authority_key_id":"3a9a8507106728b6eff6bd05416e20c194da0fde","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["https://certs.godaddy.com/repository/"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.godaddy.com/gdroot-g2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"40c2bd278ecc348330a233d7fb6cb3f0b42c80ce"},"fingerprint_md5":"96c25031bc0dc35cfba723731e1b4140","fingerprint_sha1":"27ac9369faf25207bb2627cefaccbe4ef9c319b8","fingerprint_sha256":"973a41276ffd01e027a2aad49e34c37846d3e976ff6a620b6712e33832041aa6","issuer":{"common_name":["Go Daddy Root Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["GoDaddy.com, Inc."],"province":["Arizona"]},"issuer_dn":"C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2","redacted":false,"serial_number":"7","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"CH5skxDIOLiWqZBL/6FfTwTvbD6ciAbJUI+mc/dXMRu+vOQv2/i601vgtOfmeWIODKLXamNzMbX1qEikOwgtol2Q17R8JU8RVjDEtkSdeyyd5V7m7wxhqr/kKhvuhJ64g33BQ85EpxNwDZEf9MgTrYNg2dhyqHMkHrWsIg7KF4liWEQbq4klAQAPzcQbYttRtNMPUSqb9Lxz/HbONqTN2dgs6q6b9SqykNFNdRiKP4pBkCN9W0v+pANYm0ayw2Bgg/h9UEHOwqGQw7vvAi/SFVTuRBXZCq6nijPtsS12NibcBOuf92EfFdyHb+5GliitoSZ9CgmnLgSjjbz4vAQwAQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"340ffdeae9152c43ef716c6e790f869029dbb48a0f36a5b0756dd74e2b1e242d","subject":{"common_name":["Go Daddy Secure Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["GoDaddy.com, Inc."],"organizational_unit":["http://certs.godaddy.com/repository/"],"province":["Arizona"]},"subject_dn":"C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certs.godaddy.com/repository/, CN=Go Daddy Secure Certificate Authority - G2","subject_key_info":{"fingerprint_sha256":"f11c3dd048f74edb7c45192b83e5980d2f67ec84b4ddb9396e33ff5173ed698f","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"ueDLENSvdr3Uk2LrMGS4gQhswwTZYheOL/8+Zc+PzmLmPFIc2hZFS1WreGtjg2KQzg9pbJnIGhSLTMxFM+qI3J6jryv+gGGdeVfEzy70PzA8XUf8mha8wzeWQVGOEUtU+Ci+0Iy+8DA4HvOwJvhmR2Nt3nEmR484R1PRRh2049wA6kWsvbxx2apvANvbzTA6eU9fTEf4He9bwsSdYDuxskOR2KQzTuqz1idPrSWKpcb01dCmrnQFZFeItURV1C0qOj74uL3pMgoClGTEFjpQ8Uqu53kzrwwgB3/o3wQ5wmkCbGNS+nfBG8h0h8i5kxhQVDVLaU68O9NJLh/cwdJS+w=="}},"tbs_fingerprint":"f9ff37f02e632cb7387025c07e57908a3d371b7c95d8cdd0390de231ed943a12","tbs_noct_fingerprint":"f9ff37f02e632cb7387025c07e57908a3d371b7c95d8cdd0390de231ed943a12","validation_level":"unknown","validity":{"end":"2031-05-03T07:00:00Z","length":"631152000","start":"2011-05-03T07:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.godaddy.com/"]},"authority_key_id":"d2c4b0d291d44c1171b361cb3da1fedda86ad4e3","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["https://certs.godaddy.com/repository/"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.godaddy.com/gdroot.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"3a9a8507106728b6eff6bd05416e20c194da0fde"},"fingerprint_md5":"81528b89e165204a75ad85e8c388cd68","fingerprint_sha1":"340b2880f446fcc04e59ed33f52b3d08d6242964","fingerprint_sha256":"3a2fbe92891e57fe05d57087f48e730f17e5a5f53ef403d618e5b74d7a7e6ecb","issuer":{"country":["US"],"organization":["The Go Daddy Group, Inc."],"organizational_unit":["Go Daddy Class 2 Certification Authority"]},"issuer_dn":"C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority","redacted":false,"serial_number":"1828629","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"WQtTvZKGEacke+1bMc8dH2xwxbhuvk679r6XUOEwf7ooXGKUwuN+M/f7QnaF25UcjCJYdQkMiGVnOQoWCcWgOJekxSOTP7QYpgEGRJHjp2kntFolfzq3Ms3dhP8qOCkzpN1nsoX+oYggHFCJyNwq9kIDN0zmiN/VryTyscPfzLXs4Jlet0lUIDyUGAzHHFIYSaRt4bNYC8nY7NmuHDKOKHAN4v6mF56ED71XcLNa6R+ghlO773z/aQvgSMO3kwvIClTErF0UZzdsyqUvMQg3qm5vjLyb4lddJIGvl5echK1srDdMZvNhkREg5L4wn3qkKQmw4TRfZHcYQFHfjDCmrw=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"9a076dd81d34576c64b65bbdb28db1df943f7949d12c26de362178b1a9d2b6bf","subject":{"common_name":["Go Daddy Root Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["GoDaddy.com, Inc."],"province":["Arizona"]},"subject_dn":"C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2","subject_key_info":{"fingerprint_sha256":"2a8f2d8af0eb123898f74c866ac3fa669054e23c17bc7a95bd0234192dc635d0","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"v3FiCPH6WTT3G8kYo/eASVjpIoMTpsUgQwE7hPHmhUmfJ+r2hBtOoLTbcJjHMgGxBT4HTu70+k8vWTAi56sZVmvigAf88xZ1gDlRe+X5NbZ0TqmNghPktj+pA4P6or6KFWp/3gvDthkUBcrqw6gElDtGfDIN8wBmIsiNaW02jBEYt9OyHGC0OPoCjM7T3UYH3go+6118yHz7sCtTpJJiaVElBWEaRIGMLKlDliPfrDqBmg4pxRyp6V0etp6eMAo5zvGIgPtLXcwy7IViQyU0AlYnAZG0O3AqP26x6JyIAX2f1PnbU21gnb8s51iruF9G/M7EGwM8CetJMVxpRrPgRw=="}},"tbs_fingerprint":"2b28d005cdd66259db111865ea17cbb60b3c8f547068638d902a64be784afdf8","tbs_noct_fingerprint":"2b28d005cdd66259db111865ea17cbb60b3c8f547068638d902a64be784afdf8","validation_level":"unknown","validity":{"end":"2031-05-30T07:00:00Z","length":"549331200","start":"2014-01-01T07:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_key_id":"d2c4b0d291d44c1171b361cb3da1fedda86ad4e3","basic_constraints":{"is_ca":true},"subject_key_id":"d2c4b0d291d44c1171b361cb3da1fedda86ad4e3"},"fingerprint_md5":"91de0625abdafd32170cbb25172a8467","fingerprint_sha1":"2796bae63f1801e277261ba0d77770028f20eee4","fingerprint_sha256":"c3846bf24b9e93ca64274c0ec67c1ecc5e024ffcacd2d74019350e81fe546ae4","issuer":{"country":["US"],"organization":["The Go Daddy Group, Inc."],"organizational_unit":["Go Daddy Class 2 Certification Authority"]},"issuer_dn":"C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority","redacted":false,"serial_number":"0","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"Mkvzsso+kfwSxqEHjI53oDMGFFyQHhj3CKY9Chn5h4ARbmnklhcw/zSRY3I47swcAaMdlCikMfZ6xFTX9uUxWAOizM5i25RFc7W/RckktdWCAq0jeWmNuLZNzs9MyjMj6ByIqp2LQW4WySDliZ7NO9pw936ZJiAUVCWrbnOF5pshnQpsgg6o+MIM+hAebJbvhw3ED2GLre6DK5X4jpKEcjnrIOqD7YPNl24IvOtOJrZzK+TT9kz+JnHiYRF0Sv9XGocPdUguz1FpF6ACEmGV1dFAshBM7sSsEEOmpZ4K1ZVimg3PiILFMgzkK59F5g2fKJyxuSpaV603D68df9u9nw=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"bb212cabca4d2a4dc90abe13d2a20b78ffd62f2f8171faebf51cdfe7d55fba5b","subject":{"country":["US"],"organization":["The Go Daddy Group, Inc."],"organizational_unit":["Go Daddy Class 2 Certification Authority"]},"subject_dn":"C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority","subject_key_info":{"fingerprint_sha256":"5632d97bfa775bf3c99ddea52fc2553410864016729c52dd6524c8a9c3b4489f","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"3","length":"2048","modulus":"3p3X6lcYSaFb69dfSIbqvt3/5O9nHPRlaLNXcaBed7vtm0npcIA9VhhjCG/a8szQP38CVCJUENiygdTAdT1Lf8d3wz54qxoDtSBrL2orscWIfsS7HrDB2EUnb6o3WPeHJtfYLfapF7cfcjZOphc/ZZiS2ypuXaL+iOAL3n/ljRXh68s61eISohMt2I6vXxI9oAgFCLZcpWU4BEWZHqNgYHTFQaVyYhtixR9vXxpCvgJRZaiuIxhq/HgDqU1/gMP6q1r8oUCkyhkW/rLI715zDe53vZr2eZi8sQdnohUN3aBYxkR7Cj5iKF+6QQdTWM8Rfjh0xfj/tWmQj4R06pcbrw=="}},"tbs_fingerprint":"e6924ddbf03e3feefd1894193ee042e06a69d6f248ad9e216da42b288f2c1019","tbs_noct_fingerprint":"e6924ddbf03e3feefd1894193ee042e06a69d6f248ad9e216da42b288f2c1019","validation_level":"unknown","validity":{"end":"2034-06-29T17:06:20Z","length":"946684800","start":"2004-06-29T17:06:20Z"},"version":"3"}}],"cipher_suite":{"id":"0xC014","name":"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"},"ocsp_stapling":true,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"192","lifetime_hint":"7200"},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-10T06:02:35Z"},"heartbleed":{"heartbeat_enabled":true,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T06:05:40Z"},"get":{"body":"\n\n\n\n\nRedirect\n
            \nIncorrect access detected, this server may be accessed only through \"https://gptchealth.remote-learner.net\" address, sorry.
            Please notify server administrator.\n
            \n\n\n\n\nRedirect\n
            This page should automatically redirect. If nothing is happening please use the continue link below.
            Continue
            ","body_sha256":"ab82fcb63796c0896d369f724c76a97d3d40dbdb62f175c20f44776afcf31b89","headers":{"cache_control":"max-age=30","content_language":"en-us","content_type":"text/html; charset=UTF-8","expires":"Tue, 14 Jul 2020 13:01:06 GMT","server":"Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips","strict_transport_security":"max-age=31536000; includeSubdomains;","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 13:00:36 GMT"}],"vary":"Accept-Encoding,User-Agent"},"metadata":{"description":"Apache httpd 2.4.6","manufacturer":"Apache","product":"httpd","version":"2.4.6"},"status_code":"200","status_line":"200 OK","title":"Redirect","timestamp":"2020-07-14T13:00:36Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T11:31:08Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T05:04:54Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqsqmj//////////w=="}},"support":true,"timestamp":"2020-07-12T05:16:43Z"}}},"p22":{"ssh":{"v2":{"banner":{"raw":"SSH-2.0-OpenSSH_7.4","software":"OpenSSH_7.4","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"PhYESXwe/kVs7AcRtm9cMHPn332CcGxlSuRDqwWiXCA="}},"metadata":{"description":"OpenSSH 7.4","product":"OpenSSH","version":"7.4"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"Jgqgosxhd5rx+7B9+ata4LEsxKRBEl/oTvEKBLBW7jc=","y":"J8DW1fdWALgPK2X/qAKpC/kfGLLdRVaWZRAOW+/tXGY="},"fingerprint_sha256":"4504292ba15802a344046e2226c3183dfbfc927846c579fff61edc315fc2c6f8","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["aes128-ctr","aes192-ctr","aes256-ctr","aes128-cbc","3des-cbc","aes192-cbc","aes256-cbc"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ecdsa-sha2-nistp256","ssh-ed25519"],"kex_algorithms":["curve25519-sha256","curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group16-sha512","diffie-hellman-group18-sha512","diffie-hellman-group-exchange-sha1","diffie-hellman-group14-sha256","diffie-hellman-group14-sha1","diffie-hellman-group1-sha1"],"server_to_client":{"ciphers":["aes128-ctr","aes192-ctr","aes256-ctr","aes128-cbc","3des-cbc","aes192-cbc","aes256-cbc"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T20:20:50Z"}}},"ipint":"597965666","updated_at":"2020-07-14T20:20:50Z","location":{"country_code":"US","continent":"North America","city":"Boardman","postal_code":"97818","timezone":"America/Los_Angeles","province":"Oregon","latitude":45.8491,"longitude":-119.7143,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AMAZON-02","routed_prefix":"35.160.0.0/13","asn":"16509","country_code":"US","name":"AMAZON-02","path":["11537","16509"]},"protocols":["22/ssh","443/https","80/http"],"ipinteger":"1648075811"} +{"p443":{"https":{"dhe":{"support":false,"timestamp":"2020-07-12T08:10:26Z"}}},"p22":{"ssh":{"v2":{"banner":{"comment":"Ubuntu-4ubuntu2.10","raw":"SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.10","software":"OpenSSH_7.2p2","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"uJpD3CvZNDeLHCHdKi4IVlULPHO6I43jzQBJYTnWWWg="}},"metadata":{"description":"OpenSSH 7.2p2","product":"OpenSSH","version":"7.2p2"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"Iu7C54DDUyLIl+ToNurpC3ttUiqN5le5nr6WtrKakZs=","y":"/XOg092iCVfC/HxdYd+dKWZus0sXSUPSgg/QgPf3JQ4="},"fingerprint_sha256":"f6ca287bcbb3903eaabad58ec431c1c71d9d5617c48db43da65fb5244ade041a","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ecdsa-sha2-nistp256","ssh-ed25519"],"kex_algorithms":["curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group14-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T18:40:20Z"}}},"metadata":{"os":"Ubuntu"},"address":"217.69.5.214","ipint":"3645179350","updated_at":"2020-07-14T18:40:20Z","ip":"217.69.5.214","ports":["22"],"protocols":["22/ssh"],"ipinteger":"-704297511","version":"0","tags":["ssh"]} +{"address":"66.177.137.180","ipint":"1118931380","updated_at":"2020-07-15T08:28:11Z","p7547":{"cwmp":{"get":{"body":"401 Unauthorized

            Authorization Required

            This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required


            ","body_sha256":"721e96983952a29827a40e04ffddf6807212e81923bd0af4f1d90dcd482f504b","headers":{"connection":"Keep-Alive","content_length":"387","content_type":"text/html;charset=iso-8859-1","server":"Cisco-CcspCwmpTcpCR/1.0","www_authenticate":"Digest realm=\"Cisco_CCSP_CWMP_TCPCR\", nonce=\"d65e26b6cdd3aba6b1b05c6b755827b0\", algorithm=\"MD5\", domain=\"/\", qop=\"auth\", stale=\"true\""},"status_code":"401","status_line":"401 Unauthorized","title":"401 Unauthorized","timestamp":"2020-07-15T08:28:11Z"}}},"ip":"66.177.137.180","location":{"country_code":"US","continent":"North America","city":"Jacksonville","postal_code":"32218","timezone":"America/New_York","province":"Florida","latitude":30.45,"longitude":-81.6624,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"COMCAST-7922","routed_prefix":"66.176.0.0/15","asn":"7922","country_code":"US","name":"COMCAST-7922","path":["7922"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-1266044606","version":"0","tags":["cwmp"]} +{"p22":{"ssh":{"v2":{"banner":{"comment":"Vyatta-8vyatta2","raw":"SSH-2.0-OpenSSH_7.2p2 Vyatta-8vyatta2","software":"OpenSSH_7.2p2","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"GuMl6rkveCN98HfbA0eFVAZdV5U9C3nFGg6kRBf7Z0c="}},"metadata":{"description":"OpenSSH 7.2p2","product":"OpenSSH","version":"7.2p2"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"caJZB0xBx6PWKakDpgTSctheMgHod63RomGRLCNquCk=","y":"2a8u9M/brBXXmbbkddS7dWoGKmG/jJOUzl1Z+Ma/B1E="},"fingerprint_sha256":"b7fffdb0241895ce5782bdce192236b1b83e4b92e4ee88469041d4ce38c58e1f","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ssh-dss","ecdsa-sha2-nistp256"],"kex_algorithms":["curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group14-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T18:20:55Z"}}},"address":"137.44.59.252","ipint":"2301377532","updated_at":"2020-07-14T18:20:55Z","ip":"137.44.59.252","location":{"country_code":"GB","continent":"Europe","timezone":"Europe/London","latitude":51.4964,"longitude":-0.1224,"registered_country":"United Kingdom","registered_country_code":"GB","country":"United Kingdom"},"autonomous_system":{"description":"JANET Jisc Services Limited","routed_prefix":"137.44.0.0/16","asn":"786","country_code":"GB","name":"JANET Jisc Services Limited","path":["11537","20965","786"]},"ports":["22"],"protocols":["22/ssh"],"ipinteger":"-63230839","version":"0","tags":["ssh"]} +{"p22":{"ssh":{"v2":{"banner":{"raw":"SSH-2.0-OpenSSH_7.4","software":"OpenSSH_7.4","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"99m+YfbQzWGRs1wrWRocOMkztV3fzwXo0lGdBrB70QE="}},"metadata":{"description":"OpenSSH 7.4","product":"OpenSSH","version":"7.4"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"18XlH1weJsk+7Ban/jANFLkeTtlcLWJUBqcUbbZjWac=","y":"7tgp52nqgkeNWd/IGiwsVRjxMa0qQxXl4b4mFv1HjRY="},"fingerprint_sha256":"1d81cb78c5f7016a3adb01b6172c35b138f6af2bc6fe9359602793a069f1e0af","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com","aes128-cbc","aes192-cbc","aes256-cbc","blowfish-cbc","cast128-cbc","3des-cbc"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","rsa-sha2-512","rsa-sha2-256","ecdsa-sha2-nistp256","ssh-ed25519"],"kex_algorithms":["curve25519-sha256","curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group16-sha512","diffie-hellman-group18-sha512","diffie-hellman-group-exchange-sha1","diffie-hellman-group14-sha256","diffie-hellman-group14-sha1","diffie-hellman-group1-sha1"],"server_to_client":{"ciphers":["chacha20-poly1305@openssh.com","aes128-ctr","aes192-ctr","aes256-ctr","aes128-gcm@openssh.com","aes256-gcm@openssh.com","aes128-cbc","aes192-cbc","aes256-cbc","blowfish-cbc","cast128-cbc","3des-cbc"],"compressions":["none","zlib@openssh.com"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-sha1"]}},"timestamp":"2020-07-14T17:14:57Z"}}},"address":"103.124.106.70","ipint":"1736206918","updated_at":"2020-07-14T17:14:57Z","ip":"103.124.106.70","location":{"country_code":"IN","continent":"Asia","timezone":"Asia/Kolkata","latitude":20.0063,"longitude":77.006,"registered_country":"India","registered_country_code":"IN","country":"India"},"autonomous_system":{"description":"DEDIPATH-LLC","routed_prefix":"103.124.106.0/24","asn":"35913","country_code":"US","name":"DEDIPATH-LLC","path":["7018","174","35913","35913","35913","35913","35913","35913","35913"]},"ports":["22"],"protocols":["22/ssh"],"ipinteger":"1181383783","version":"0","tags":["ssh"]} +{"metadata":{"os":"Windows"},"address":"173.240.101.186","ip":"173.240.101.186","ports":["443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.comodoca.com/COMODORSAOrganizationValidationSecureServerCA.crt"],"ocsp_urls":["http://ocsp.comodoca.com"]},"authority_key_id":"9af32bdacfad4fb62fbb2a48482a12b71b42c124","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://secure.comodo.com/CPS"],"id":"1.3.6.1.4.1.6449.1.2.1.3.4"},{"id":"2.23.140.1.2.2"}],"crl_distribution_points":["http://crl.comodoca.com/COMODORSAOrganizationValidationSecureServerCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"u9nfvB+KcbWTlCOXqpJ7RzhXlQqrUugakJZkNo4e0YU=","signature":"BAMARzBFAiEA9wAu9i6yJkIAW6uL4tfXEwfKPvGkBDksU0oU5D7Gzv8CIC5Xq9x6TRchJf3x82yYF1dywipmUU0rxuW7kK410ihC","timestamp":"1559584715","version":"0"},{"log_id":"RJRlLrDuzq/EQAfYqP4owNrmgr7YyzG1P9MzlrW2gag=","signature":"BAMARzBFAiAXWQrQHnxwhHb178jzDqhS5TuMLHE268obTDo4pSp4pgIhAOreCWH+K81TR57ffbhBt3S3yr6/ZP5l9D2Dfz1r7Pgz","timestamp":"1559584715","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMARzBFAiA0+2ZrnBP3HpWU3cYTscugSoxstx5aXlFCPtgmWbhHegIhALDgPtzLyp6zkfgJKiTM7tOW7z9/gIDPqmIcnXdYFNCe","timestamp":"1559584715","version":"0"}],"subject_alt_name":{"dns_names":["*.projectorpsa.com","projectorpsa.com"]},"subject_key_id":"d8e926e2236ca0dfaef1d5e7d40d589012819a37"},"fingerprint_md5":"f13984ca903078e1a85874216ebb2f70","fingerprint_sha1":"c926ab388d6ce5e7db02e51e37e58c5dc755896f","fingerprint_sha256":"6f6b42eb222bb345d5f602368c0f4c21295d477e16f7fb224bbf72d5c786d4f7","issuer":{"common_name":["COMODO RSA Organization Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["COMODO CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Organization Validation Secure Server CA","names":["*.projectorpsa.com","projectorpsa.com"],"redacted":false,"serial_number":"201753491056924060064752274885178620196","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"i3aJdVb9bEhrd6lplJ4BkhIPCtIi5/LYNn+0RdS5SRDst2xqkOC4+UgcggXqTSQJ7N5KFDC97S0rCfgy4X2L2yxyUOcrv7KO2uBB9AS3PLDETJEksPP63k9HrepwcohN3uQaVBPF428T2yjYfqovXkFqFdCLyDQZLu9RBig88ReQ6RI09IjIRe2b9/kvFESTpQN+sHHIHVHFFEObqJIbVqjHpxYLE9p3bErutG90IVNw9GVO5otkduaqnHy4KtcKdDsO7Xl/QIh83EjHnDu0jLKvtnrCpQI/bmpIh1nild0bBhA4RgRvcqIeSmDZulHoWJ8/i+6PSflXWgTC6gG8xQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b96d318d2ffc8b06ae8ab7893c47481094a2ea6354958ff4817ffa4b732a9d77","subject":{"common_name":["*.projectorpsa.com"],"country":["US"],"locality":["Boston"],"organization":["Projector PSA, Inc."],"organizational_unit":["PremiumSSL Wildcard"],"postal_code":["02114"],"province":["MA"],"street_address":["85 Merrimac Street"]},"subject_dn":"C=US, postalCode=02114, ST=MA, L=Boston, street=85 Merrimac Street, O=Projector PSA, Inc., OU=PremiumSSL Wildcard, CN=*.projectorpsa.com","subject_key_info":{"fingerprint_sha256":"6847d29a8c5c14701f165cba0cd34d889a4772cef69dc676d0d83040ec37a4fb","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"vn9mwly2xP44HVtbU+hffa9WooOo6E9T27UiIyxW1Q0nf9VjGdOt0PHwutpIRhGEYntic3Z54aCDEMemwlbG1xc6uXNriMG9sU3RM2ghI7ynLhbMzh6pcsdFRCnemW6l3HLldGJ9ukOqH24PKuLrSWQXc9OV4iHK6o8SZF8jJ+jyY05VlWLMTVqwz4OYQ+0IOrwfa+TcLFsg8OsI8IMoY6oAej+ULYEv/nSsKutnPJcCoC2MVI/y7aH8dDNh1aR2TvffgiKG5jXRyAFgydktHYV+kGej5/VTZnTitcKEL4Il3s3Dh+ETRq6i+VLJuqigbDJexSfGd8Xje9Kszued6w=="}},"tbs_fingerprint":"3e02ba9118f469090cb32d1f70b108b5297530d564e349e7eb96fda0531fa048","tbs_noct_fingerprint":"de6e9e4d2756a1b88c6f0423c25d57bd7dfc1d9409a3420f756df84534cea1f1","validation_level":"OV","validity":{"end":"2021-05-10T23:59:59Z","length":"61171199","start":"2019-06-03T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://crt.comodoca.com/COMODORSAAddTrustCA.crt"],"ocsp_urls":["http://ocsp.comodoca.com"]},"authority_key_id":"bbaf7e023dfaa6f13c848eadee3898ecd93232d4","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.5.29.32.0"},{"id":"2.23.140.1.2.2"}],"crl_distribution_points":["http://crl.comodoca.com/COMODORSACertificationAuthority.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"9af32bdacfad4fb62fbb2a48482a12b71b42c124"},"fingerprint_md5":"9129733212d5f5651864d86b7bae0b98","fingerprint_sha1":"104c63d2546b8021dd105e9fba5a8d78169f6b32","fingerprint_sha256":"111006378afbe8e99bb02ba87390ca429fca2773f74d7f7eb5744f5ddf68014b","issuer":{"common_name":["COMODO RSA Certification Authority"],"country":["GB"],"locality":["Salford"],"organization":["COMODO CA Limited"],"province":["Greater Manchester"]},"issuer_dn":"C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Certification Authority","redacted":false,"serial_number":"72455227028690029815281926829722123430","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"valid":true,"value":"aYo2aJoeO2UL4HzPpqtxO69hpD/kZAFJENMdj+LV7WfTnluXvUIeB/nQu233MpVaIili+AycWVYnNqAiEhH6R/RRyVl7KUqlSDV8xZdm4CclOxV6MnVKkfuma57iU/oNjBP7I7gLEiyu7dsdR5DV0JNpdpE4FTTXGOp+vGtY3io5kANEBEpW2Gjl9Xxpfp59VEvQ2IarZ2YTV16JKhetLa69QA5m7Yr/VLTBAcup4Ee6EWGPra4jSCrGJXmJHEEElcAR6lcr1rSX+rHpFWLsSnF3/fOhnNr2awApxTLn+k7qsyqnGJccWKdCNl/sFM/4ew733cyIFZqaXMjxIMfRhnKhF5uuuv5sqDLRAHZJc/c/J4c8tskt+qqQkMkKCZ/JaR8HGam/3rr4C4iCRBYQfwfAgCJff7ww3rrNB3lkVtj/80+cMLtuHlFL5s29F8TFv8g/jrEfika3BkNvYi3PUZ1FyorpE4vAx5G+W7b6N0qJ/vCd2hMmIiwGkD6LE5igGdbd2kpIfz0PiZ0kcksOe0T/1Da2g3YjWIsUbLhd92FtOXbt3RI9a4eIl5G+wEYCHnYc3bavXE/1ANacTangnqKO/LEWeVwh00WBmgw5bG0o1yXStxGQ0Pbeb170+qSLZndyL5uQQCxSEmD5/7VwLomaeQmJgS3sXHhvgYfx/FU="},"signature_algorithm":{"name":"SHA384WithRSA","oid":"1.2.840.113549.1.1.12"},"spki_subject_fingerprint":"fc0c7016e2852b5b4fe6b4ecf4b8ccc2b24dd8953c23af1285c26320f5b5d21f","subject":{"common_name":["COMODO RSA Organization Validation Secure Server CA"],"country":["GB"],"locality":["Salford"],"organization":["COMODO CA Limited"],"province":["Greater Manchester"]},"subject_dn":"C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Organization Validation Secure Server CA","subject_key_info":{"fingerprint_sha256":"12036942494450d5e7f4d97a46820e0b9df68f5839f84170d19a4bc7126af4cb","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"uRTZhfJBRFf/MEQe3DxEoxe4bgH4o1/CqSEdzln07POIqQkyPLGLY6Q+Jzbzj/k4Zi4Hl0GPS6bdw1+eczznyiANT3wyBc/BLkhlSoXQH1YxbY7lxjLUG7yffZb8mNdP+PRYVvjjRb6RGILkir6vzVI3UYdPHpfB6Dqu+f9G5GU/P8NHgy/MuEJeLX73WmiuXUvApjUh9YajyEmLmGNgDckhSMKSMGVGsoY1BEIlfq2nTksSQAB6iGhcb5+jpHgRIa49Cw6+RRQjz+t11/ag8bxFbF68oTLs81h4QigLOgF28MWgnsFpcN6PS6Z53/J2tuMPE3wYO7FRbGogOc6eaQ=="}},"tbs_fingerprint":"31fd6a3c3c2c7c2391a4975a9fa2a7acd26a78c4cae4d56e462329cb2c6836b3","tbs_noct_fingerprint":"31fd6a3c3c2c7c2391a4975a9fa2a7acd26a78c4cae4d56e462329cb2c6836b3","validation_level":"OV","validity":{"end":"2029-02-11T23:59:59Z","length":"473385599","start":"2014-02-12T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":true,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T06:54:21Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T04:53:46Z"},"get":{"body":"\r\nNot Found\r\n\r\n

            Not Found

            \r\n

            HTTP Error 404. The requested resource is not found.

            \r\n\r\n","body_sha256":"ce7127c38e30e92a021ed2bd09287713c6a923db9ffdb43f126e8965d777fbf0","headers":{"content_length":"315","content_type":"text/html; charset=us-ascii","server":"Microsoft-HTTPAPI/2.0","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 17:22:19 GMT"}]},"metadata":{"description":"Microsoft HTTPAPI 2.0","manufacturer":"Microsoft","product":"HTTPAPI","version":"2.0"},"status_code":"404","status_line":"404 Not Found","title":"Not Found","timestamp":"2020-07-13T17:22:19Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T06:36:31Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T08:26:24Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz+8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaDssbzSibBsu/6iGtCOGEoXJf//////////w=="}},"support":true,"timestamp":"2020-07-12T12:16:59Z"}}},"ipint":"2918213050","updated_at":"2020-07-14T04:53:46Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"BLUELOCK","routed_prefix":"173.240.101.0/24","asn":"29892","country_code":"US","name":"BLUELOCK","path":["7018","174","27240","29892"]},"protocols":["443/https"],"ipinteger":"-1167724371"} +{"address":"189.143.47.200","ipint":"3180277704","updated_at":"2020-06-23T11:15:58Z","ip":"189.143.47.200","p80":{"http":{"get":{"body":"\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n\n\n\n\n\n
            \n
            \n
            \n\n\n\n\n
            \n\"Zscaler\"
            \n\n\n\n
            \n
            D03
            \n\n\n\n\n\n\n
            \n\nSorry, we're having trouble loading the page.\n

            \n
            \n\nYour organization has selected Zscaler to protect you from internet threats.\n
            \n\n
            \n
            \n
            \n\n","body_sha256":"40421978fd2f5400e3eeb435d7210de4ac4ae238484339099ab273f814c0e29c","headers":{"cache_control":"no-cache","content_length":"13598","content_type":"text/html","server":"Zscaler/6.0"},"metadata":{"description":"Zscaler 6.0","product":"Zscaler","version":"6.0"},"status_code":"403","status_line":"403 Forbidden","title":"Internet Security by Zscaler","timestamp":"2020-07-07T09:45:59Z"}}},"ports":["80","8080","21","443"],"version":"0","p21":{"ftp":{"banner":{"banner":"421 Proxy is closed (unknown user location)","timestamp":"2020-07-13T19:33:14Z"}}},"tags":["ftp","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt"],"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"5168ff90af0207753cccd9656462a212b859723b","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.1"},{"id":"2.23.140.1.2.2"}],"crl_distribution_points":["http://crl3.digicert.com/sha2-ha-server-g6.crl","http://crl4.digicert.com/sha2-ha-server-g6.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"pLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BA=","signature":"BAMARjBEAiAdXJPavXrewxa61GDFxN8uvUXd6p9+1tnW6FgR4mcdjgIgcJY308r2yQk6P4zZzw8lvMfRq7id4iWVkph8qIWEZhU=","timestamp":"1531246178","version":"0"},{"log_id":"h3W/51l8+IxDmV+9827/Vo1HVjb/SrVgwbTq/16ggw8=","signature":"BAMASDBGAiEAk09AJDVt1vUq04t5NwC0mPYoKWI9zIEpgW4rt3UDCMUCIQDhcPpy2ly7uuPG2FFqivRDedvVdnUQqgleOoEv1v0dfA==","timestamp":"1531246178","version":"0"},{"log_id":"u9nfvB+KcbWTlCOXqpJ7RzhXlQqrUugakJZkNo4e0YU=","signature":"BAMARzBFAiAUddvQm3fhptMpkgTa+8+bDGDz6I0n1f4fXDECvjKvJQIhAODSSN8XY1xg1IuOwn8ec7LqIuH8P+/AjcIU7HQ53M3G","timestamp":"1531246178","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMASDBGAiEAvZMp5/leSggkwUwd+zoUlyiQoUuWAMqPdB6nKPeRQ6gCIQD+0MkN5D1RhXq2cUMFwQyN/Dcs1Ob43deP3thCAM+RbQ==","timestamp":"1531246178","version":"0"}],"subject_alt_name":{"dns_names":["*.zscalertwo.net","zscalertwo.net","gateway.zscalertwo.net","login.zscalertwo.net"]},"subject_key_id":"0424744061679b70a286529df75838f34d863544"},"fingerprint_md5":"dc4558bd27eba5dc90f786feb1259051","fingerprint_sha1":"542e5b9529b66fbfadc9ac4bef52c6f7e57080b5","fingerprint_sha256":"53a4e81c7cf452b94260c3e9e39bc441e7f74c5e3fa23dc11e58c300183e22a6","issuer":{"common_name":["DigiCert SHA2 High Assurance Server CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA","names":["*.zscalertwo.net","zscalertwo.net","gateway.zscalertwo.net","login.zscalertwo.net"],"redacted":false,"serial_number":"10081996541392766429117010546003080381","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"YZaxrxVgGVPgoajur9if3ofLVJxomn6Q3iOW6LKArl7srYvhQ6nUjZF27FaMDFJx3S7SPwEPpFIoJgPK3M4Xut1yIXbt3dRhw0LHAFd3bSfTg7V5aOfjtvOl3cxQtCu04P8EflcZmm/xgavcGl5tC/v/5pdgTn8OhAcEbMaxQ8dwz4XZAEp4MdqUoKX3Cy/41NLhfDNyHT75pAkpEsCryCZheE6/SetmNYg7VzFru4n28hKw0sVUZixUroNFws8nnN5ez3t//Iy0+4hFxRRs5rt5Sp4b5q5qQWvOMaDnlwErXFfQlBzubWASo0gBl+DGcGCCjznAjYiCs+7AueAqmQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"2b952718fed7b0319bf067f28413c6015e30eefdb094412419cee459f52f8170","subject":{"common_name":["*.zscalertwo.net"],"country":["US"],"locality":["San Jose"],"organization":["Zscaler, Inc."],"organizational_unit":["Zscaler"],"province":["California"]},"subject_dn":"C=US, ST=California, L=San Jose, O=Zscaler, Inc., OU=Zscaler, CN=*.zscalertwo.net","subject_key_info":{"fingerprint_sha256":"32103dc3c9f569f1985da330e19620acacbcffd70450cbcd9b8d859320b568e6","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"whtCpO1pwBYkLHNDMdHibSFhSH+ZbslVmGFn6ooQQ8kPCMUmPxdAbIhzc6RZpRwBwL76li6P2vNtAFL5csVD+hV3mkHEmZCqjepT8961o/rG5RDPTAptCBWhRUbC3w9HhYKZIPQ4TOErmEL2MPrZ9MrkacrEUGBwYhn0Z640yilXjiOdyyVLsWzonM9hF0Mivc4CkLyQ2j1MJ1VDRydP0FLZGgBEuDKuBFwJMgD6FfX/6ankTfhkIC9LRn5axh4Hp2qEuEaSC0NOA8xmsOx3sv3YCRjEuRYkhilQSz5L8Nz9347lE7K8GEQwMwrZWTM4ZuYPg6GqXvTpNxCPetwNEw=="}},"tbs_fingerprint":"87facd4fb4bae13ffc9f2c71ac2fc2bbe207904f1952860d38a84e8592a0c36f","tbs_noct_fingerprint":"adf90f50ee3eacda41b27af212b59148ae91cbac069c8bd3ae15f92c662ddaf7","validation_level":"OV","validity":{"end":"2020-10-12T00:00:00Z","length":"71280000","start":"2018-07-10T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"b13ec36903f8bf4701d498261a0802ef63642bc3","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl4.digicert.com/DigiCertHighAssuranceEVRootCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"5168ff90af0207753cccd9656462a212b859723b"},"fingerprint_md5":"aaee5cf8b0d8596d2e0cbe67421cf7db","fingerprint_sha1":"a031c46782e6e6c662c2c87c76da9aa62ccabd8e","fingerprint_sha256":"19400be5b7a31fb733917700789d2f0a2471c0c9d506c0e504c06c16d7cb17c0","issuer":{"common_name":["DigiCert High Assurance EV Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA","redacted":false,"serial_number":"6489877074546166222510380951761917343","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"GIqViQPmbd9c/B1o6kqPg9ZRL41rRBaerGP10m5shJmLqoFxhFvtNE6wt3mSKcwtgGrwjiDheaT+A0cT6vWGyllxffQElmvTWVg9/tMxJVwYOISj5p+C/YxbmDFOzXieGv2Fy0mq8ieLmXL8PqrVQQva1TahvxxuR0l/XtlIfAPZ/YtJoJgmQkDr1pIRpGQKV1TE9R3WAl5rrO7EgJoScvpWk9f/vzCFBjC/C39O/1cFnSTthcMr+6Z1qKwtFu99eSey68KdCwfqqoXTAaMgKEFZQyjSgeOq9ux7O3e2QGKABUFFAe8XBj7ewDObZ9NhLnKH5Gn8EgBXQB5w9R7JtA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"4d8f65901ef8a23b1210242a5dfc786708a0d4008e7cecd03d4145a1c0834095","subject":{"common_name":["DigiCert SHA2 High Assurance Server CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"subject_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA","subject_key_info":{"fingerprint_sha256":"936bfae7bc41b0e55ed4f411c0eb07b30ddbb064f657322acf92bee7db0d430b","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"tuAvwiQGyG0EX9fvCmQGsn0iJmUWrkJAm87cn592Bz7DMFWHGblPlA5alB9VVrTCAiqv0JjuC0DXxNA7csgUnu+QsRGprtLIuEM62QsL1dWV9UCvyB3tTZxfV7eGUGiZ9Yra0scFH6iXydyksYKELcatpZzHGYKmhQ9eRFgqN4/9NfELCCcyWvW7i56kvVHQJ+LdO0IzowUoxLsozJqsKyMNeMZ75l5xt0o+CPuBtxYWoZ0jEk3l15IIrHWknLrNF7IeRDVlf1MlOdEcCppjGxmSdGgKN8LCUkjLOVqituFdwd2gILghopMmbxRKIUHH7W2b8kgv8wP1omiSUy9e4w=="}},"tbs_fingerprint":"ac5d79b4a1e84b9ea1f7f72b022158540f37c8557fc99f0c08b37f670632a177","tbs_noct_fingerprint":"ac5d79b4a1e84b9ea1f7f72b022158540f37c8557fc99f0c08b37f670632a177","validation_level":"unknown","validity":{"end":"2028-10-22T12:00:00Z","length":"473385600","start":"2013-10-22T12:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T07:57:32Z"},"heartbleed":{"heartbeat_enabled":true,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T10:38:19Z"},"get":{"body":"\n\n\n\n\n\n\nInternet Security by Zscaler\n\n\n\n\n\n\n
            \n
            \n
            \n\n\n\n\n
            \n\"Zscaler\"
            \n\n\n\n
            \n
            D09
            \n\n\n\n\n\n\n\n\n
            \n\nSorry, we couldn't load the page.\n

            \n\n
            \nError Code: 231000\n
            \n
            \n\nYour organization has selected Zscaler to protect you from internet threats.\n
            \n\n
            \n
            \n
            \n\n","body_sha256":"a6883732b6a2c7c8bd2e65c9804224dd5e4c147246a9806e2d6668b612d7033e","headers":{"cache_control":"no-cache","content_length":"13684","content_type":"text/html","server":"Zscaler/6.0"},"metadata":{"description":"Zscaler 6.0","product":"Zscaler","version":"6.0"},"status_code":"403","status_line":"403 Forbidden","title":"Internet Security by Zscaler","timestamp":"2020-07-13T05:34:49Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T08:11:46Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T03:58:12Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"xLEo9Q1J/Co6+wnPQLJ2dUxOeNJguwiiLJTf1FfTt8VMYbQy+lqPFkzvimslxIzSIVfmRhRMIq0NF1ZT+tcSl5Ij19ZH3+2I13wQEgY38zQOQJAxJoLJY3X97KH2DjLpsjm4V0VymDQmjhvWhP5Pqov5p9qmUOfScUr5iyV7oXa5huN1dT+XT7P+y60u3T8EkTjms0vwn9XX1G2d2qULHuPhJeACFCm5CwnsXStwIeP3gdAn9xv505NB+31MGPJgwtmwjeieOOcAybMJyAUrU5+TWubUTCaZcuy8LB53+9kJCyBaT29ZtL06R9ImF34J/8880O0ECZRGgQGRPVapYw=="}},"support":true,"timestamp":"2020-07-12T11:34:39Z"}}},"ipint":"2783004884","updated_at":"2020-07-14T10:38:19Z","location":{"country_code":"DE","continent":"Europe","timezone":"Europe/Berlin","latitude":51.2993,"longitude":9.491,"registered_country":"United States","registered_country_code":"US","country":"Germany"},"autonomous_system":{"description":"ZSCALER-EMEA","routed_prefix":"165.225.72.0/23","asn":"62044","country_code":"CH","name":"ZSCALER-EMEA","path":["11164","6461","62044"]},"protocols":["21/ftp","443/https","80/http","8080/http"],"ipinteger":"-733421147"} +{"address":"99.244.53.159","ipint":"1676948895","updated_at":"2020-07-15T12:29:59Z","p7547":{"cwmp":{"get":{"body":"401 Unauthorized

            Authorization Required

            This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required


            ","body_sha256":"721e96983952a29827a40e04ffddf6807212e81923bd0af4f1d90dcd482f504b","headers":{"connection":"Keep-Alive","content_length":"387","content_type":"text/html;charset=iso-8859-1","server":"Cisco-CcspCwmpTcpCR/1.0","www_authenticate":"Digest realm=\"Cisco_CCSP_CWMP_TCPCR\", nonce=\"cddb07c035ac6b270e489848defa4c1c\", algorithm=\"MD5\", domain=\"/\", qop=\"auth\", stale=\"true\""},"status_code":"401","status_line":"401 Unauthorized","title":"401 Unauthorized","timestamp":"2020-07-15T12:29:59Z"}}},"ip":"99.244.53.159","location":{"country_code":"CA","continent":"North America","city":"Whitchurch–Stouffville","postal_code":"L4A","timezone":"America/Toronto","province":"Ontario","latitude":43.9671,"longitude":-79.2423,"registered_country":"Canada","registered_country_code":"CA","country":"Canada"},"autonomous_system":{"description":"ROGERS-COMMUNICATIONS","routed_prefix":"99.244.32.0/19","asn":"812","country_code":"CA","name":"ROGERS-COMMUNICATIONS","path":["11164","812"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-1623853981","version":"0","tags":["cwmp"]} +{"address":"77.221.57.146","ip":"77.221.57.146","p80":{"http":{"get":{"body":"\r\n404 Not Found\r\n\r\n

            404 Not Found

            \r\n
            nginx
            \r\n\r\n\r\n","body_sha256":"55f7d9e99b8e2d4e0e193b2f0275501e6d9c1ebd29cadbea6a0da48a8587e3e0","headers":{"connection":"keep-alive","content_type":"text/html","server":"nginx","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 08:23:05 GMT"}]},"metadata":{"description":"nginx","product":"nginx"},"status_code":"404","status_line":"404 Not Found","title":"404 Not Found","timestamp":"2020-07-07T08:23:05Z"}}},"ports":["80","53","25"],"version":"0","p53":{"dns":{"lookup":{"errors":false,"open_resolver":false,"questions":[{"name":"c.afekv.com","type":"A"}],"resolves_correctly":false,"support":true,"timestamp":"2020-07-12T06:38:08Z"}}},"tags":["dns","http","smtp"],"p25":{"smtp":{"starttls":{"banner":"220 localhost.localdomain ESMTP service ready","ehlo":"250-localhost.localdomain says hello\r\n250-ENHANCEDSTATUSCODES\r\n250-PIPELINING\r\n250-CHUNKING\r\n250-8BITMIME\r\n250-XACK\r\n250-SIZE 1048576\r\n250-VERP\r\n250-SMTPUTF8\r\n250 DSN","starttls":"502 5.5.1 command not supported in \"STARTTLS\"","timestamp":"2020-07-11T20:06:11Z"}}},"ipint":"1306343826","updated_at":"2020-07-12T06:38:08Z","location":{"country_code":"HU","continent":"Europe","timezone":"Europe/Budapest","latitude":47.4919,"longitude":19.05,"registered_country":"Hungary","registered_country_code":"HU","country":"Hungary"},"autonomous_system":{"description":"MICROSYSTEM","routed_prefix":"77.221.56.0/23","asn":"197889","country_code":"HU","name":"MICROSYSTEM","path":["7018","3356","41206","197889"]},"protocols":["25/smtp","53/dns","80/http"],"ipinteger":"-1841701555"} +{"metadata":{"os":"Windows"},"address":"104.143.159.251","ip":"104.143.159.251","p80":{"http":{"get":{"body":"授权过期或错误,请重新授权!BY:d58.net 本程序系列号为:a0d53f28a9abd2a5f99e89f912b6c77c","body_sha256":"e86332cdab861be55cd762fe16a5fbb74f2ca1a8e743dd01c8cf037589f4b6f1","headers":{"content_type":"text/html","server":"Microsoft-IIS/7.5","unknown":[{"key":"date","value":"Tue, 30 Jun 2020 15:20:45 GMT"}],"vary":"Accept-Encoding","x_powered_by":"ASP.NET"},"metadata":{"description":"Microsoft IIS 7.5","manufacturer":"Microsoft","product":"IIS","version":"7.5"},"status_code":"200","status_line":"200 OK","timestamp":"2020-06-30T15:20:41Z"}}},"ports":["80"],"version":"0","tags":["http"],"ipint":"1754243067","updated_at":"2020-06-30T15:20:41Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AS40676","routed_prefix":"104.143.128.0/19","asn":"40676","country_code":"US","name":"AS40676","path":["7018","3257","40676"]},"protocols":["80/http"],"ipinteger":"-73429144"} +{"metadata":{"product":"GPON Home Gateway","description":"T&W GPON Home Gateway","device_type":"DSL/cable modem","manufacturer":"T&W"},"address":"2.132.192.120","ip":"2.132.192.120","p80":{"http":{"get":{"body":"\n\n\nGPON Home Gateway\n\n\n\n\n\n","body_sha256":"0c49d416f2ad91fb43698c099055b0bf4f4373b6f1457bf1c84aa1644187a33e","headers":{"cache_control":"no-cache","content_type":"text/html; charset=utf-8","pragma":"no-cache"},"status_code":"200","status_line":"200 OK","title":"GPON Home Gateway","timestamp":"2020-07-07T17:27:49Z"}}},"ports":["80","443"],"version":"0","tags":["DSL/cable modem","embedded","http","https","rsa-export"],"p443":{"https":{"tls":{"certificate":{"parsed":{"fingerprint_md5":"608c5d9e3dc8d785257f7fdf627f72e8","fingerprint_sha1":"6be9068844b12c2bdf0af2d4d6244449e3991e6a","fingerprint_sha256":"ef512d0ab19e9b91a5c519c634a4f2fcbbf65c45ef87e01aabd25939fe903594","issuer":{"country":["CN"],"locality":["Shanghai"],"organization":["CIG"],"province":["Shanghai"]},"issuer_dn":"C=CN, ST=Shanghai, L=Shanghai, O=CIG","redacted":false,"serial_number":"18331739103563289849","signature":{"self_signed":true,"signature_algorithm":{"name":"MD5WithRSA","oid":"1.2.840.113549.1.1.4"},"valid":true,"value":"j3K+dqJtI4FrDJ8WVM3wqV9+KKGKojeSBtcKwupNhh9aktfakPi/B8fh6h9WzC74rDNW0qKyL7qGBfgyMXA2/flXsgpEJNDx+YrGd3kmhQQxIE1KQDfRhq3jNwrMfGU+OdAUcsVsz+0eth/2pwIxMVtSz1Sl7ovtwtOCZzbMjS4="},"signature_algorithm":{"name":"MD5WithRSA","oid":"1.2.840.113549.1.1.4"},"spki_subject_fingerprint":"82b7578004926030739ecc7f1ffb396c7982357e2bed8d34dc3ef54c6e0a06d1","subject":{"country":["CN"],"locality":["Shanghai"],"organization":["CIG"],"province":["Shanghai"]},"subject_dn":"C=CN, ST=Shanghai, L=Shanghai, O=CIG","subject_key_info":{"fingerprint_sha256":"6e166151427732cfdfb9c699e1c9edd81e2c3d1b9d154f5984ad7539b1a1ed68","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"1re3g9GbU/icD1Z8MhheUoBZtv3Q12CkXVN4+F42pVA3xI7mMv7kMTZ7DuQXE11x6kNEq3ZUipFlH+NnRVasRihEQ7yibFmTxBxLSQJ0w04pErQEN5ftZoeo38CqnrTjfQTUF5K4xACHbA/BfMwM30geX5dgtXq/dmJ5cOsPKyM="}},"tbs_fingerprint":"f2d25584efefd6b0a2eb1156242c31a0541c060fababa3ca9085fc83aa9eac39","tbs_noct_fingerprint":"89cab4d270417876b6931f0b0724d6d822c60bd74cc2daaf7618d7c279651201","validation_level":"unknown","validity":{"end":"2032-05-04T07:55:14Z","length":"630720000","start":"2012-05-09T07:55:14Z"},"version":"2"}},"cipher_suite":{"id":"0x0035","name":"TLS_RSA_WITH_AES_256_CBC_SHA"},"ocsp_stapling":false,"session_ticket":{"length":"160"},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.0","timestamp":"2020-07-10T01:31:29Z"},"rsa_export":{"rsa_params":{"exponent":"65537","length":"512","modulus":"qJ58DNJgijrZBpBxcrYCCfFqMVHDo1n3xhOe8hZA5YX/fhYM/FxllKwhHa/lRkBWy6CbQ32LkDAUVyxIzkxyyQ=="},"support":true,"timestamp":"2020-07-09T04:56:31Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T08:18:27Z"}}},"ipint":"42254456","updated_at":"2020-07-10T01:31:29Z","location":{"country_code":"KZ","continent":"Asia","timezone":"Asia/Almaty","province":"Karaganda","latitude":49.7945,"longitude":73.0922,"registered_country":"Kazakhstan","registered_country_code":"KZ","country":"Kazakhstan"},"autonomous_system":{"description":"KAZTELECOM-AS","routed_prefix":"2.132.0.0/14","asn":"9198","country_code":"KZ","name":"KAZTELECOM-AS","path":["6939","43727","9198"]},"protocols":["443/https","80/http"],"ipinteger":"2025882626"} +{"address":"23.36.193.228","ip":"23.36.193.228","p80":{"http":{"get":{"body":"\nInvalid URL\n\n

            Invalid URL

            \nThe requested URL \"[no URL]\", is invalid.

            \nReference #9.2cf5f33f.1593532499.15b4b2b8\n\n","body_sha256":"62aecc77f985ffed6cd0303a383e1470d560c611db03edf7580b1be67850aba0","headers":{"connection":"close","content_length":"209","content_type":"text/html","expires":"Tue, 30 Jun 2020 15:54:59 GMT","server":"AkamaiGHost","unknown":[{"key":"mime_version","value":"1.0"},{"key":"date","value":"Tue, 30 Jun 2020 15:54:59 GMT"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-06-30T15:54:59Z"}}},"ports":["80","443"],"version":"0","tags":["akamai","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cacerts.geotrust.com/GeoTrustRSACA2018.crt"],"ocsp_urls":["http://status.geotrust.com"]},"authority_key_id":"9058ffb09c75a8515477b1edf2a34316389e6cc5","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.1"},{"id":"2.23.140.1.2.2"}],"crl_distribution_points":["http://cdp.geotrust.com/GeoTrustRSACA2018.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOM=","signature":"BAMARzBFAiEA9v9BeTiovWjWHyXo/aJdWaPxueeT/i9a7EGS8547jPACICgtrmqbEXwYAiXIDfmwR3ZI6EAH+2QDJQqlrY3r0G/J","timestamp":"1591285637","version":"0"},{"log_id":"XNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbHDso=","signature":"BAMARjBEAiBpg2gsTED5LbzBg5okbZwrl28j3ZVGOQJMvC8z/lYA6AIgK4X+2P9OYQFdAZNznUHZkcA1CBAnRaJEZnB9Pr2xhFA=","timestamp":"1591285637","version":"0"}],"subject_alt_name":{"dns_names":["akcdn-test.cvs.com","services-uat1.cvs.com","m-qa2.cvs.com","icet-pt.cvs.com","sit1depservices.cvs.com","icet-pt2.cvs.com","es-uat1.cvs.com","www-uat3.cvs.com","m-reg2.cvs.com","services-it1.cvs.com","m-it3.cvs.com","optical-reg1.cvs.com","uatdepservices.cvs.com","www-uat2.cvs.com","m-qa4.cvs.com","services-sit1.cvs.com","m-uat1.cvs.com","services-reg1.cvs.com","m-it1.cvs.com","messagesit2.cvs.com","services-qa4.cvs.com","es-qa4.cvs.com","www-reg2.minuteclinic.com","m-akatest.cvs.com","m-qa3.cvs.com","es-reg1.cvs.com","services-qa2.cvs.com","es-uat2.cvs.com","t-uat.cvs.com","m-it4.cvs.com","www-qa2.cvs.com","www-akatest.cvs.com","messagedev1.cvs.com","dt.cvs.com","messagesit1.cvs.com","m-pt2.cvs.com","m-reg1.cvs.com","icet-sit3w.cvs.com","services-uat3.cvs.com","m-uat2.cvs.com","cdcpt.cvs.com","circular-test.cvs.com","t-akatest.cvs.com","www-qa3.cvs.com","cdcpt-m.cvs.com","services-uat2.cvs.com","m-qa1.cvs.com","www-reg1.minuteclinic.com","optical-test.cvs.com","www-reg2.cvs.com","s-uat.cvs.com","www-it4.cvs.com","m-it2.cvs.com","www-qa4.cvs.com","www-reg1.cvs.com","es-qa1.cvs.com","www-it2.cvs.com","www-pt2.cvs.com","dt2.cvs.com","services-qa3.cvs.com","s-edit3.cvs.com","icet-sit4w.cvs.com","optical-reg2.cvs.com","ptservices.cvs.com","icet-cte.cvs.com","www-it1.cvs.com","dt1.cvs.com","services-it3.cvs.com","www-qa1.cvs.com","www-it3.cvs.com","cdcuat1.cvs.com","m-uat4.cvs.com","services-sit3.cvs.com","www-uat4.cvs.com","messagereg.cvs.com","ptdepservices.cvs.com","uat-vaccines.cvs.com","s-pt.cvs.com","services-sit2.cvs.com","services-pt2.cvs.com","es-qa3.cvs.com","i-uat.cvs.com","cdcpt-static.cvs.com","services-it4.cvs.com","services-uat4.cvs.com","mcctest.minuteclinic.com","messagesit3.cvs.com","services-reg2.cvs.com","icet-sit1.cvs.com","s-pt2.cvs.com","m-uat3.cvs.com","www-uat1.cvs.com","services-qa1.cvs.com","icet-sit3.cvs.com","es-qa2.cvs.com","es-reg2.cvs.com","services-it2.cvs.com","dt3.cvs.com","icet-sit2.cvs.com"]},"subject_key_id":"8734786d13ac1138b7320bb5fd70115f968cebe2"},"fingerprint_md5":"d522f26870b2c2318722ce54efacbc7d","fingerprint_sha1":"94986221cd2f93c3ed5857d2f974dc81a1e0cc34","fingerprint_sha256":"22a6dd1b7500c8a95d13911b5c6f514385e300d835ac141651150eaadbcac70a","issuer":{"common_name":["GeoTrust RSA CA 2018"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=GeoTrust RSA CA 2018","names":["www-pt2.cvs.com","optical-reg2.cvs.com","es-uat1.cvs.com","messagesit1.cvs.com","m-uat2.cvs.com","dt.cvs.com","www-reg1.cvs.com","www-qa1.cvs.com","www-uat4.cvs.com","uat-vaccines.cvs.com","sit1depservices.cvs.com","m-it3.cvs.com","www-qa2.cvs.com","services-qa1.cvs.com","www-uat1.cvs.com","www-uat2.cvs.com","m-it1.cvs.com","m-it4.cvs.com","s-pt2.cvs.com","t-akatest.cvs.com","es-qa1.cvs.com","cdcuat1.cvs.com","es-qa3.cvs.com","services-uat4.cvs.com","es-reg2.cvs.com","dt3.cvs.com","es-uat2.cvs.com","icet-sit3w.cvs.com","services-sit2.cvs.com","messagereg.cvs.com","akcdn-test.cvs.com","services-uat1.cvs.com","www-reg2.minuteclinic.com","icet-cte.cvs.com","mcctest.minuteclinic.com","icet-sit3.cvs.com","services-it2.cvs.com","messagesit2.cvs.com","m-qa1.cvs.com","services-qa3.cvs.com","m-uat1.cvs.com","www-it4.cvs.com","www-qa4.cvs.com","m-reg1.cvs.com","circular-test.cvs.com","es-qa2.cvs.com","m-reg2.cvs.com","es-reg1.cvs.com","services-qa2.cvs.com","cdcpt.cvs.com","m-it2.cvs.com","www-it3.cvs.com","services-sit3.cvs.com","services-it4.cvs.com","services-qa4.cvs.com","m-akatest.cvs.com","services-uat3.cvs.com","icet-sit1.cvs.com","m-uat3.cvs.com","s-edit3.cvs.com","m-uat4.cvs.com","ptdepservices.cvs.com","cdcpt-static.cvs.com","www-qa3.cvs.com","www-reg2.cvs.com","dt2.cvs.com","www-it1.cvs.com","services-it3.cvs.com","services-reg1.cvs.com","www-akatest.cvs.com","services-uat2.cvs.com","s-pt.cvs.com","messagesit3.cvs.com","services-reg2.cvs.com","uatdepservices.cvs.com","t-uat.cvs.com","www-it2.cvs.com","m-qa4.cvs.com","services-sit1.cvs.com","es-qa4.cvs.com","m-qa3.cvs.com","cdcpt-m.cvs.com","m-qa2.cvs.com","icet-pt2.cvs.com","www-uat3.cvs.com","icet-sit2.cvs.com","www-reg1.minuteclinic.com","dt1.cvs.com","services-pt2.cvs.com","m-pt2.cvs.com","optical-test.cvs.com","icet-sit4w.cvs.com","i-uat.cvs.com","icet-pt.cvs.com","services-it1.cvs.com","optical-reg1.cvs.com","messagedev1.cvs.com","s-uat.cvs.com","ptservices.cvs.com"],"redacted":false,"serial_number":"5431126043339345959415062755820021743","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"Gup6PKh17J0TqjAsms36WmXYhWVxkqzzSAwUvy6vKN4mI42i3gZPbKJrwPErpNOe7O7tJKHJWUaCRTaet27+ty4vi9HhWHHKJYH1GJ8Fne40mxxLaZov8RLMDgIlbW4VTz8ly8GIeylg0mC586Re6afqS0xO+D/O3SpqKdKp9OTIE/tht0aqDqIQI9pCUej0NH5kb7L+4eCkJV9n9CpWkDeFJL0WnIn9NabP716rFXvFyzNDi1Xw+EToZMlIGbHz6HtVSCEhkJbrJ3uHBuRkBnHuxSuk6p7WHdwmfqyj2fRwTLW+K6KkkAT8vCHw7reCmu+BU48D0vPVjxdkXlhH/g=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"619a3c26b46f099b8f725826cdfc2e8756f09280a56e973af00c88cb8ac12a0b","subject":{"common_name":["akcdn-test.cvs.com"],"country":["US"],"locality":["Woonsocket"],"organization":["CVS Pharmacy Inc"],"organizational_unit":["IT"],"province":["Rhode Island"]},"subject_dn":"C=US, ST=Rhode Island, L=Woonsocket, O=CVS Pharmacy Inc, OU=IT, CN=akcdn-test.cvs.com","subject_key_info":{"fingerprint_sha256":"4ff43f87727f7c53bd56debc5c707fff75c7549dd6bd9fb006917e5299ae15d2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"1rdZ2vNuTkTuNHb4QrFjRMQlEO5XZloGXV+L8XfxVUIiZzrADxNjTcA1ismMmHRETxvZefAQFlhHUu6ZEfXA/ZBGd9Xql6oYfr03MhtiE3Vspe3eOfwmpAHmTeNZzh+MNHl3FevQY/6VF3NwF3Y9kEbOQS91CpHNMOvCmlD7jTA80GKVdDmfXNoo14bLJ2sdTPY+DkLDGD2bpVCbxFpcMhJOmHLwR2FSnfii3yM6GY7MbMqK4NBcAlxaT4D3ZevqFtSYFxk/wCWaZgQ/ggtMLIwmrEV1SudyL2qtYK6wr1FLcCKPjoF+gnB8+OkiUWU9DajFhLnEqleQJm6l9SCDLQ=="}},"tbs_fingerprint":"a9f25263baccc11991ef5b1058443a12df7b6349c0e0ccdd680273c6263c11ad","tbs_noct_fingerprint":"81309e6e1b71c98b87f3edc7d0f3f2d486971a4d739d33bbbddeefe6d7141a1c","validation_level":"OV","validity":{"end":"2021-09-03T12:00:00Z","length":"39441600","start":"2020-06-04T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"03de503556d14cbb66f0a3e21b1bc397b23dd155","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl3.digicert.com/DigiCertGlobalRootCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"9058ffb09c75a8515477b1edf2a34316389e6cc5"},"fingerprint_md5":"a95d7f13a64a5ebe00364d8be67deced","fingerprint_sha1":"7ccc2a87e3949f20572b18482980505fa90cac3b","fingerprint_sha256":"8cc34e11c167045824ade61c4907a6440edb2c4398e99c112a859d661f8e2bc7","issuer":{"common_name":["DigiCert Global Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","redacted":false,"serial_number":"7014754403668890451052340637799309683","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"MPGHVT2ECPwuXmq6fNLN1SzjvgLaXYl37fTpVsCS8CpVLUX3HCo/EFvz6eG+4ekAJbn3o8EDG+OeTo6SGwmVUvmsGP0fKQGLFwpzNPRnElXuIrzLMMqAmT/7zxJ/yz0YR4XYFD5PDJQ/e/URqFFs+6hgMKiQoYtvLkXbN7Ycfr0WWSGxMmetjaNLST87Ehks/J0P/4z/ASMK8wQFB+VnAQG5r4Fn6ynLr/j8hj6kXHOE+eU5c6wZ8wM2d6ApaPX07zvT7ohzCqwulepoItLNrGv4G15Twg/WduF1DMSRJcCFUw7igdEOGDDJZ6Tf0AoSeAdABbEPg1NDQjvn+/F3+w=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"54807f609be5726db4b8d1ffc1dbe273221b74fbf0afa083683d3741ed929ac5","subject":{"common_name":["GeoTrust RSA CA 2018"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"subject_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=GeoTrust RSA CA 2018","subject_key_info":{"fingerprint_sha256":"cd422b691368fb826801803b44e7968c046d228378ac811b0a97c24504fa37a0","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"v4rRY03hGOqHXegWPI9/tr6HFzekDPgxP59FVEAh150Hm8oDI0q9m+2FAmM/n4W57Cjv8oYi2/hNVEHFtEJ/zzMXAQ6CkFLTxzSkwaEB2jKgQK0fWeQz/KDDlqxobNPomXOMJhB3y7c/OTLo0lko7geG4gk7hfiqafapa59YrXLIW4dmrgjgdPstU0Nigz2PhUwRl9we/FAwuIMIMl5cXMThdSBK66XWdS3cLX184ND+fHWhTkAChJrZDVouoKzzNYoq6tZaWmyOLKv23v14RyZ5eqoi6qnmcRID0/i6U9J5nL1krPYbY7tNjzgC+PBXXcWqJVoMXcUw/iBTGWzpww=="}},"tbs_fingerprint":"4601ecf1c603e85159bdfa0e816cacf11925c8f02e2aa58c9a49195be0be8dc4","tbs_noct_fingerprint":"4601ecf1c603e85159bdfa0e816cacf11925c8f02e2aa58c9a49195be0be8dc4","validation_level":"unknown","validity":{"end":"2027-11-06T12:23:45Z","length":"315532800","start":"2017-11-06T12:23:45Z"},"version":"3"}},{"parsed":{"extensions":{"authority_key_id":"03de503556d14cbb66f0a3e21b1bc397b23dd155","basic_constraints":{"is_ca":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"03de503556d14cbb66f0a3e21b1bc397b23dd155"},"fingerprint_md5":"79e4a9840d7d3a96d7c04fe2434c892e","fingerprint_sha1":"a8985d3a65e5e5c4b2d7d66d40c6dd2fb19c5436","fingerprint_sha256":"4348a0e9444c78cb265e058d5e8944b4d84f9662bd26db257f8934a443c70161","issuer":{"common_name":["DigiCert Global Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","redacted":false,"serial_number":"10944719598952040374951832963794454346","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"y5w3qkgTEgr63UScT1Kw9N+uBPV5eQijJBj8SyuEwC251cf+9MEfWMu4bZx6dOeYKasRteNwoKHNTIiZk4yRcOKrDxy+k6n/Y9XkB2DTo7+dWwnx1Y7jU/SOY/o/p9u0Zt9iZtbRbkGN8i216ndKn51Y4itZwEAj7S0ogkU+eVSSJpjggEioN+/w1nlgFt6s6A7NbqxEFzgvSdrhRT4quTZTzzpQBvcu6MRXSWxhIRjVBK14PCw6gGun668VFOnYicG5OGzikWyK/2S5dyVXMMAbJKPh3OnfR3y1tCQIBTDsLb0Lv0W/ULmp8+uYARKtyIjGmDRfjQo8xunVlZVt3g=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"10a522b4fcdbfa03c3553a371f272338e7b7aecb7c57548d931eeb4d370d2ad7","subject":{"common_name":["DigiCert Global Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"subject_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","subject_key_info":{"fingerprint_sha256":"aff988906dde12955d9bebbf928fdcc31cce328d5b9384f21c8941ca26e20391","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJw=="}},"tbs_fingerprint":"68538fc7818e81d2422a9060636fa5282a43f60dce1bba60c2d7f3abab660097","tbs_noct_fingerprint":"68538fc7818e81d2422a9060636fa5282a43f60dce1bba60c2d7f3abab660097","validation_level":"unknown","validity":{"end":"2031-11-10T00:00:00Z","length":"788918400","start":"2006-11-10T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xCCA8","name":"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"},"ocsp_stapling":true,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"160","lifetime_hint":"7300"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T16:42:07Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T07:04:45Z"},"get":{"body":"\nInvalid URL\n\n

            Invalid URL

            \nThe requested URL \"[no URL]\", is invalid.

            \nReference #9.15f5f33f.1594786891.12b9ae0d\n\n","body_sha256":"0e75fc9b478884987af71590f76c6fc8cab61ea6ce01c276cf6efa576c074755","headers":{"connection":"close","content_length":"209","content_type":"text/html","expires":"Wed, 15 Jul 2020 04:21:31 GMT","server":"AkamaiGHost","unknown":[{"key":"date","value":"Wed, 15 Jul 2020 04:21:31 GMT"},{"key":"mime_version","value":"1.0"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-15T04:21:31Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T06:39:55Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T11:05:06Z"},"dhe":{"support":false,"timestamp":"2020-07-12T09:40:41Z"}}},"ipint":"388284900","updated_at":"2020-07-15T04:21:31Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AS6453","routed_prefix":"23.36.192.0/22","asn":"6453","country_code":"US","name":"AS6453","path":["7018","6453"]},"protocols":["443/https","80/http"],"ipinteger":"-457104361"} +{"address":"216.106.51.115","ipint":"3630838643","updated_at":"2020-06-23T16:15:17Z","ip":"216.106.51.115","p80":{"http":{"get":{"body":"401 Unauthorized\n

            401 Unauthorized

            \nAuthorization required.\n
            \n
            micro_httpd
            \n\n","body_sha256":"19f02740a6a603ff5f8c2bf6901d94546cd065c74e8da850bd39d19e1e6408d9","headers":{"cache_control":"no-cache","content_type":"text/html","server":"micro_httpd","unknown":[{"key":"date","value":"Wed, 07 Jan 1970 13:27:04 GMT"}],"www_authenticate":"Basic realm=\"Broadband Router\""},"metadata":{"description":"micro_httpd","product":"micro_httpd"},"status_code":"401","status_line":"401 Unauthorized","title":"401 Unauthorized","timestamp":"2020-06-23T16:15:17Z"}}},"location":{"country_code":"US","continent":"North America","city":"Columbia","postal_code":"65201","timezone":"America/Chicago","province":"Missouri","latitude":38.9361,"longitude":-92.3056,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"SOCKET","routed_prefix":"216.106.0.0/18","asn":"4581","country_code":"US","name":"SOCKET","path":["6939","4581"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"1932749528","version":"0","tags":["http"]} +{"metadata":{"os":"Windows"},"address":"74.118.244.147","ip":"74.118.244.147","p80":{"http":{"get":{"body":"\r\nNot Found\r\n\r\n

            Not Found

            \r\n

            HTTP Error 404. The requested resource is not found.

            \r\n\r\n","body_sha256":"ce7127c38e30e92a021ed2bd09287713c6a923db9ffdb43f126e8965d777fbf0","headers":{"content_length":"315","content_type":"text/html; charset=us-ascii","server":"Microsoft-HTTPAPI/2.0","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 12:00:40 GMT"}]},"metadata":{"description":"Microsoft HTTPAPI 2.0","manufacturer":"Microsoft","product":"HTTPAPI","version":"2.0"},"status_code":"404","status_line":"404 Not Found","title":"Not Found","timestamp":"2020-07-07T12:00:24Z"}}},"ports":["80"],"version":"0","tags":["http"],"p443":{"https":{"rsa_export":{"support":false,"timestamp":"2020-07-09T03:18:37Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T03:48:38Z"},"dhe":{"support":false,"timestamp":"2020-07-12T03:36:02Z"}}},"ipint":"1249309843","updated_at":"2020-07-12T03:36:02Z","location":{"country_code":"US","continent":"North America","city":"Lumberton","postal_code":"08048","timezone":"America/New_York","province":"New Jersey","latitude":39.9663,"longitude":-74.8103,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"MILESTECHINC","routed_prefix":"74.118.244.0/22","asn":"21690","country_code":"US","name":"MILESTECHINC","path":["7018","174","26076","21690"]},"protocols":["80/http"],"ipinteger":"-1812695478"} +{"address":"156.251.247.88","ipint":"2633758552","updated_at":"2020-07-07T17:10:04Z","ip":"156.251.247.88","p80":{"http":{"get":{"body":"\n\n\n\n没有找到站点\n\n\n\n\n\t
            \n\t\t
            没有找到站点
            \n\t\t
            \n\t\t\t

            您的请求在Web服务器中没有找到对应的站点!

            \n\t\t\t

            可能原因:

            \n\t\t\t
              \n\t\t\t\t
            1. 您没有将此域名或IP绑定到对应站点!
            2. \n\t\t\t\t
            3. 配置文件未生效!
            4. \n\t\t\t
            \n\t\t\t

            如何解决:

            \n\t\t\t
              \n\t\t\t\t
            1. 检查是否已经绑定到对应站点,若确认已绑定,请尝试重载Web服务;
            2. \n\t\t\t\t
            3. 检查端口是否正确;
            4. \n\t\t\t\t
            5. 若您使用了CDN产品,请尝试清除CDN缓存;
            6. \n\t\t\t\t
            7. 普通网站访客,请联系网站管理员;
            8. \n\t\t\t
            \n\t\t
            \n\t
            \n\n\n","body_sha256":"cdf9d8eee8c4fe967fac3aa9218a7227647ae7aaaa4221c688e1aab7a9180f69","headers":{"connection":"keep-alive","content_type":"text/html","last_modified":"Wed, 26 Apr 2017 08:03:47 GMT","server":"Tengine","unknown":[{"key":"etag","value":"W/\"59005463-52e\""},{"key":"date","value":"Tue, 07 Jul 2020 17:10:05 GMT"}],"vary":"Accept-Encoding"},"metadata":{"description":"Tengine","product":"Tengine"},"status_code":"200","status_line":"200 OK","title":"没有找到站点","timestamp":"2020-07-07T17:10:04Z"}}},"location":{"country_code":"ZA","continent":"Africa","city":"Johannesburg","postal_code":"2000","timezone":"Africa/Johannesburg","province":"Gauteng","latitude":-26.2309,"longitude":28.0583,"registered_country":"South Africa","registered_country_code":"ZA","country":"South Africa"},"autonomous_system":{"description":"CNSERVERS","routed_prefix":"156.251.128.0/17","asn":"40065","country_code":"US","name":"CNSERVERS","path":["6939","40065","40065"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"1492646812","version":"0","tags":["http"]} +{"address":"204.255.44.182","ipint":"3439275190","updated_at":"2020-07-13T22:28:30Z","ip":"204.255.44.182","p16992":{"http":{"get":{"body":"\n\n\n\nERROR: The requested URL could not be retrieved\n\n\n
            \n

            ERROR

            \n

            The requested URL could not be retrieved

            \n
            \n
            \n\n
            \n

            The following error was encountered while trying to retrieve the URL: /

            \n\n
            \n

            Invalid URL

            \n
            \n\n

            Some aspect of the requested URL is incorrect.

            \n\n

            Some possible problems are:

            \n
              \n
            • Missing or incorrect access protocol (should be http:// or similar)

            • \n
            • Missing hostname

            • \n
            • Illegal double-escape in the URL-Path

            • \n
            • Illegal character in hostname; underscores are not allowed.

            • \n
            \n\n

            Your cache administrator is webmaster.

            \n
            \n
            \n\n
            \n
            \n

            Generated Mon, 13 Jul 2020 22:28:30 GMT by server2reinstall (squid/3.5.12)

            \n\n
            \n\n","body_sha256":"b714f75cfc62eb9c57c152e8e440414c86aad16e1b88c713016cbc4e1c9cacf0","headers":{"content_language":"en","content_length":"3540","content_type":"text/html;charset=utf-8","server":"squid/3.5.12","unknown":[{"key":"x_squid_error","value":"ERR_INVALID_URL 0"},{"key":"x_cache_lookup","value":"NONE from server2reinstall:3128"},{"key":"mime_version","value":"1.0"},{"key":"x_cache","value":"MISS from server2reinstall"},{"key":"date","value":"Mon, 13 Jul 2020 22:28:30 GMT"}],"vary":"Accept-Language","via":"1.1 server2reinstall (squid/3.5.12)"},"metadata":{"description":"squid 3.5.12","product":"squid","version":"3.5.12"},"status_code":"400","status_line":"400 Bad Request","title":"ERROR: The requested URL could not be retrieved","timestamp":"2020-07-13T22:28:30Z"}}},"location":{"country_code":"US","continent":"North America","city":"Spring Valley","postal_code":"10977","timezone":"America/New_York","province":"New York","latitude":41.1144,"longitude":-74.0429,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"MULTEXSYS","routed_prefix":"204.255.44.0/24","asn":"6917","country_code":"US","name":"MULTEXSYS","path":["7018","3257","40676","6917"]},"ports":["16992"],"protocols":["16992/http"],"ipinteger":"-1238564916","version":"0","tags":["http"]} +{"metadata":{"os":"Unix,Unix"},"address":"216.179.142.90","p8080":{"http":{"get":{"body":"403 Forbidden","body_sha256":"58404bdf6dc25c24fedd979469e69bfb8dc9ebca64a469929a858a12b12b9c30","headers":{"connection":"close","content_length":"13","content_type":"text/html; charset=utf-8","server":"Apache/2.2.25 (Unix) mod_ssl/2.2.25 OpenSSL/0.9.8e-fips-rhel5","unknown":[{"key":"date","value":"Fri, 10 Jul 2020 05:29:57 GMT"}]},"metadata":{"description":"Apache httpd 2.2.25","manufacturer":"Apache","product":"httpd","version":"2.2.25"},"status_code":"403","status_line":"403 Forbidden","timestamp":"2020-07-10T05:29:57Z"}}},"ip":"216.179.142.90","p80":{"http":{"get":{"body":"Hello WorldHello World","body_sha256":"8d54726beef6f4a86953956c67bab4e86ac828697940197ca50c0614038beccd","headers":{"content_length":"147","content_type":"text/html; charset=utf-8","server":"Apache/2.2.25 (Unix) mod_ssl/2.2.25 OpenSSL/0.9.8e-fips-rhel5","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 18:40:57 GMT"}]},"metadata":{"description":"Apache httpd 2.2.25","manufacturer":"Apache","product":"httpd","version":"2.2.25"},"status_code":"200","status_line":"200 OK","title":"Hello World","timestamp":"2020-07-07T18:40:57Z"}}},"ports":["80","8080"],"version":"0","tags":["http"],"ipint":"3635646042","updated_at":"2020-07-10T05:29:57Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"ASN-EQUINIX-AP Equinix Asia Pacific","routed_prefix":"216.179.142.0/23","asn":"17819","country_code":"SG","name":"ASN-EQUINIX-AP Equinix Asia Pacific","path":["11164","2497","17819"]},"protocols":["80/http","8080/http"],"ipinteger":"1519301592"} +{"metadata":{"os":"Windows,Windows"},"address":"103.226.125.19","ip":"103.226.125.19","p80":{"http":{"get":{"body":"\r\nNot Found\r\n\r\n

            Not Found

            \r\n

            HTTP Error 404. The requested resource is not found.

            \r\n\r\n","body_sha256":"ce7127c38e30e92a021ed2bd09287713c6a923db9ffdb43f126e8965d777fbf0","headers":{"content_length":"315","content_type":"text/html; charset=us-ascii","server":"Microsoft-HTTPAPI/2.0","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 11:38:31 GMT"}]},"metadata":{"description":"Microsoft HTTPAPI 2.0","manufacturer":"Microsoft","product":"HTTPAPI","version":"2.0"},"status_code":"404","status_line":"404 Not Found","title":"Not Found","timestamp":"2020-07-07T11:42:26Z"}}},"ports":["80","21"],"version":"0","p21":{"ftp":{"banner":{"banner":"220 Microsoft FTP Service","metadata":{"description":"IIS","product":"IIS"},"timestamp":"2020-07-13T18:29:53Z"}}},"tags":["ftp","http"],"p443":{"https":{"rsa_export":{"support":false,"timestamp":"2020-07-09T08:17:13Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T06:54:34Z"},"dhe":{"support":false,"timestamp":"2020-07-12T04:27:30Z"}}},"ipint":"1742896403","updated_at":"2020-07-13T18:29:53Z","location":{"country_code":"HK","continent":"Asia","timezone":"Asia/Hong_Kong","latitude":22.25,"longitude":114.1667,"registered_country":"Hong Kong","registered_country_code":"HK","country":"Hong Kong"},"autonomous_system":{"description":"CLOUDIE-AS-AP Cloudie Limited","routed_prefix":"103.226.124.0/22","asn":"55933","country_code":"HK","name":"CLOUDIE-AS-AP Cloudie Limited","path":["11164","4637","55933","55933","55933"]},"protocols":["21/ftp","80/http"],"ipinteger":"327017063"} +{"address":"122.23.177.9","ip":"122.23.177.9","p80":{"http":{"get":{"body":"\n\n\nPassword Error\n\n\n\n\n\n\n\n

            �p�X���[�h���Ⴂ�܂�

            \n\n

            ������

            \n\n�p�X���[�h���ݒ肵���ꍇ�́A�ݒ肵���p�X���[�h�𐳂������͂��Ȃ����΁u���񂽂��ݒ��y�[�W�v���g�p���邱�Ƃ��ł��܂����B\n�ݒ肵���p�X���[�h�͖Y���Ȃ��悤�ɂ��Ă��������B\n

            \n�p�X���[�h�͕K�����p�̉p�����œ��͂��Ă��������B�S�p�����͎g�p�ł��܂����B�܂��啶��/�������̈Ⴂ�����肵�܂��B\n\n

            \n�H���o�׏��Ԃł̓p�X���[�h�͐ݒ肳���Ă��܂����B�p�X���[�h���ݒ肵���o�����Ȃ��ꍇ�́A���[�U�[���E�p�X���[�h���ɉ������͂����AOK�{�^���������Ă��������B
            \n�p�X���[�h�����ɐݒ肵�Ă��Ă��̉��ʂ��\\���������Ƃ��́A�S�p���������͂��Ă��Ȃ����A�܂��A�啶��/�������𐳊m�ɓ��͂��Ă��邩�m�F���Ă��������B\n\n

            \n�Ȃ��A�u���E�U�F�؏���(���[�U�[���A�p�X���[�h)���c���Ă����ƁA�����������I�ɑ��M���邽�߃G���[�ɂȂ��܂��B���[�U�[�����폜���ăp�X���[�h�����͂��������A�u���E�U�����U�I�����Ă����u���񂽂��ݒ��y�[�W�v���J�������Ă��������B\n\n

            \n�ݒ肵���p�X���[�h���Y���Ă��܂����Ƃ��͈ȉ��Ɏ������@���s���ĉ������B\n\n\n

            ���p�X���[�h���Y���Ă��܂����Ƃ�

            \n\n�ȉ��̕��@�Ńp�X���[�h���Đݒ肷�邱�Ƃ��ł��܂��B\n\n
              \n

              \n

            \n\n

          • �H���o�׏��Ԃɖ߂��Ă��ׂĂ��蒼�����@
          • \n\n�y���Ӂz\n�H���o�׏��Ԃɖ߂��ƁA�����܂łɐݒ肵�����e�͂��ׂď����������A�ʐM�����⃍�O�������Ă��܂��܂��B\n\n

            \n

              \n
            1. DOWNLOAD�{�^����microSD�{�^���AUSB�{�^����3�‚𓯎��ɉ����Ȃ����d���������܂��B\n
            2. �{�̑O�ʂ�LED�����x���_�ł����̂��m�F�������A3�‚̃{�^���𗣂��܂��B
              \n
            3. �{���i�̋N�������������ƍH���o�׏��Ԃɖ߂��Ă��܂��B�u���񂽂��ݒ��y�[�W�v�ɃA�N�Z�X�����ƃp�X���[�h�̐ݒ肪�”\\�ɂȂ��Ă��܂��B\n
            \n\n

            \n\n


            \n[END]\n\n\n\n","body_sha256":"4e51aafa71aae19ecaf480aa7fe46204018e19cd67b71f8a0c70676cfec65c42","headers":{"allow":"HEAD, GET, POST","content_type":"text/html","expires":"Tue, 30 Jun 2020 04:29:03 GMT","server":"YAMAHA-RT","unknown":[{"key":"date","value":"Tue, 30 Jun 2020 04:29:03 GMT"}],"www_authenticate":"Basic realm=\"YAMAHA-RT [administrator] \"","x_frame_options":"SAMEORIGIN"},"metadata":{"description":"YAMAHA RT","manufacturer":"YAMAHA","product":"RT"},"status_code":"401","status_line":"401 Unauthorized","title":"Password Error","timestamp":"2020-06-30T04:39:25Z"}}},"ports":["80","23"],"version":"0","tags":["http","telnet"],"p23":{"telnet":{"banner":{"banner":"Error: Other user logged in by telnet.","do":[{"name":"Echo","value":"1"},{"name":"Negotiate About Window Size","value":"31"},{"name":"Remote Flow Control","value":"33"}],"support":true,"will":[{"name":"Suppress Go Ahead","value":"3"},{"name":"Status","value":"5"},{"name":"Echo","value":"1"}],"timestamp":"2020-07-14T08:18:15Z"}}},"ipint":"2048373001","updated_at":"2020-07-14T08:18:15Z","location":{"country_code":"JP","continent":"Asia","city":"Takahama","postal_code":"444-1301","timezone":"Asia/Tokyo","province":"Aichi","latitude":34.9759,"longitude":137.0379,"registered_country":"Japan","registered_country_code":"JP","country":"Japan"},"autonomous_system":{"description":"OCN NTT Communications Corporation","routed_prefix":"122.16.0.0/12","asn":"4713","country_code":"JP","name":"OCN NTT Communications Corporation","path":["7018","2914","4713"]},"protocols":["23/telnet","80/http"],"ipinteger":"162600826"} +{"address":"47.35.183.106","ipint":"790869866","updated_at":"2020-07-15T06:25:46Z","p7547":{"cwmp":{"get":{"headers":{"content_length":"0","server":"gSOAP/2.7","www_authenticate":"Digest realm=\"Sagemcom TR-069\", qop=\"auth,auth-int\", nonce=\"5f0ea16ad7fa661d2ca3\", opaque=\"8ccc2864\""},"status_code":"401","status_line":"401 Unauthorized","timestamp":"2020-07-15T06:25:46Z"}}},"ip":"47.35.183.106","location":{"country_code":"US","continent":"North America","city":"Two Rivers","postal_code":"54241","timezone":"America/Chicago","province":"Wisconsin","latitude":44.166,"longitude":-87.5832,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"CHARTER-20115","routed_prefix":"47.35.128.0/18","asn":"20115","country_code":"US","name":"CHARTER-20115","path":["6939","20115"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"1790386991","version":"0","tags":["cwmp"]} +{"address":"138.94.217.25","ipint":"2321471769","updated_at":"2020-06-30T02:43:51Z","ip":"138.94.217.25","p80":{"http":{"get":{"body":"407 Proxy Authentication Required\r\n

            407 Proxy Authentication Required

            Access to requested resource disallowed by administrator or you need valid username/password to use this resource

            \r\n","body_sha256":"b94f66d4b3d5b38f8db430d510d06e4bf3926171758cadd9b5bdae615bab083d","headers":{"connection":"close","content_type":"text/html; charset=utf-8","proxy_authenticate":"Basic realm=\"login\""},"status_code":"407","status_line":"407 Proxy Authentication Required","title":"407 Proxy Authentication Required","timestamp":"2020-06-30T02:43:51Z"}}},"location":{"country_code":"US","continent":"North America","city":"New York","postal_code":"10011","timezone":"America/New_York","province":"New York","latitude":40.7308,"longitude":-73.9975,"registered_country":"Honduras","registered_country_code":"HN","country":"United States"},"autonomous_system":{"description":"Udasha S.A.","routed_prefix":"138.94.216.0/22","asn":"263744","country_code":"HN","name":"Udasha S.A.","path":["7018","1299","263744"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"433675914","version":"0","tags":["http"]} +{"address":"96.6.77.11","ip":"96.6.77.11","p80":{"http":{"get":{"body":"\nInvalid URL\n\n

            Invalid URL

            \nThe requested URL \"[no URL]\", is invalid.

            \nReference #9.805532b8.1594715867.214718c7\n\n","body_sha256":"492dea1d231a184786f70c940fbd82b670b2b9bcd150c57c6d3e17e2f9bfa4f8","headers":{"connection":"close","content_length":"209","content_type":"text/html","expires":"Tue, 14 Jul 2020 08:37:47 GMT","server":"AkamaiGHost","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 08:37:47 GMT"},{"key":"mime_version","value":"1.0"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-14T08:37:47Z"}}},"ports":["80"],"version":"0","tags":["akamai","http"],"p443":{"https":{"rsa_export":{"support":false,"timestamp":"2020-07-09T08:27:08Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T09:19:48Z"},"dhe":{"support":false,"timestamp":"2020-07-12T07:11:02Z"}}},"ipint":"1611025675","updated_at":"2020-07-14T08:37:47Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AKAMAI-AS","routed_prefix":"96.6.64.0/20","asn":"16625","country_code":"US","name":"AKAMAI-AS","path":["7018","6453","20940","20940","16625"]},"protocols":["80/http"],"ipinteger":"189597280"} +{"address":"44.229.140.157","ipint":"753241245","updated_at":"2020-07-07T11:43:11Z","ip":"44.229.140.157","p80":{"http":{"get":{"headers":{"connection":"keep-alive","content_length":"0"},"status_code":"503","status_line":"503 Service Unavailable: Back-end server is at capacity","timestamp":"2020-07-07T11:43:11Z"}}},"location":{"country_code":"US","continent":"North America","city":"Boardman","postal_code":"97818","timezone":"America/Los_Angeles","province":"Oregon","latitude":45.8491,"longitude":-119.7143,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AMAZON-02","routed_prefix":"44.224.0.0/11","asn":"16509","country_code":"US","name":"AMAZON-02","path":["11537","16509"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"-1651710676","version":"0","tags":["http"]} +{"address":"134.35.160.183","ipint":"2250481847","updated_at":"2020-07-05T18:56:43Z","ip":"134.35.160.183","location":{"country_code":"YE","continent":"Asia","city":"Sanaa","timezone":"Asia/Aden","province":"Sanaa","latitude":15.3522,"longitude":44.2095,"registered_country":"Yemen","registered_country_code":"YE","country":"Yemen"},"autonomous_system":{"description":"PTC-YEMENNET","routed_prefix":"134.35.160.0/21","asn":"30873","country_code":"YE","name":"PTC-YEMENNET","path":["11164","15412","30873","30873","30873"]},"ports":["53"],"protocols":["53/dns"],"ipinteger":"-1214241914","version":"0","p53":{"dns":{"lookup":{"answers":[{"name":"c.afekv.com","response":"141.101.68.88","type":"A"},{"name":"c.afekv.com","response":"192.150.186.1","type":"A"}],"errors":false,"open_resolver":true,"questions":[{"name":"c.afekv.com","type":"A"}],"resolves_correctly":true,"support":true,"timestamp":"2020-07-05T18:56:43Z"}}},"tags":["dns"]} +{"address":"173.39.238.107","ip":"173.39.238.107","p80":{"http":{"get":{"status_code":"406","status_line":"406 Not Acceptable","timestamp":"2020-07-07T08:22:43Z"}}},"ports":["80","443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://trust.quovadisglobal.com/hydsslg2.crt"],"ocsp_urls":["http://ocsp.quovadisglobal.com"]},"authority_key_id":"986ab62d2ebfa7aa9ff6f7d609afd58b57f98ab7","basic_constraints":{"is_ca":false},"certificate_policies":[{"id":"2.23.140.1.2.2"},{"cps":["http://www.hydrantid.com/support/repository"],"id":"1.3.6.1.4.1.8024.0.3.900.0"}],"crl_distribution_points":["http://crl.quovadisglobal.com/hydsslg2.crl"],"extended_key_usage":{"client_auth":true,"ipsec_end_system":true,"ipsec_tunnel":true,"ipsec_user":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"VhQGmi/XwuzT9eG9RLI+x0Z2ubyZEVzA75SYVdaJ0N0=","signature":"BAMARzBFAiBxgsjWA2iN1E8Mtu3ya/im8OXuru27goy77pJ0zNx/2gIhAO+PSX7N2vvMuK0dZOrjvd48qrxRAQwdulsS+AxmD/Sl","timestamp":"1579106218","version":"0"},{"log_id":"u9nfvB+KcbWTlCOXqpJ7RzhXlQqrUugakJZkNo4e0YU=","signature":"BAMASDBGAiEA674ucj5Xbm7iSluZP6nTgYv0EbOyUqw5Fd/6djRH+JsCIQDGo2UgeP3iKene22X1wgp9p3stmpz7eHtvdMZuKYHfQg==","timestamp":"1579106218","version":"0"}],"subject_alt_name":{"dns_names":["*.webex.com","webex.com","www.webex.com"]},"subject_key_id":"2a2297ffd1e4c6a3f790b22c359d8e6eb0f91afb"},"fingerprint_md5":"257eeaabba2041e8e0cf53bd0c79fe47","fingerprint_sha1":"b065166a7698892d20d5921554e52ffe6205da73","fingerprint_sha256":"70d9a53d2abeb525cedd23d06d43b9a86b6fe406ca238acaec799ea66a9e9f47","issuer":{"common_name":["HydrantID SSL ICA G2"],"country":["US"],"organization":["HydrantID (Avalanche Cloud Corporation)"]},"issuer_dn":"C=US, O=HydrantID (Avalanche Cloud Corporation), CN=HydrantID SSL ICA G2","names":["*.webex.com","webex.com","www.webex.com"],"redacted":false,"serial_number":"328543752185403611195041459910992921714928906957","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"zktdF96CMJDMusu8mYxZc1VWsxH/nknslNC2JPWF0UXIjRJj3dtSpI/gxfkCmYMkmOiq3QtbsJAaxQucypydaPD+CyZmZE7wIGaP6cTWr41YN/3ItN93RFkafxUnuiHuNDzXrvXMbWO6FYo/JGlYELroj5NG6T5bURNZ2vfOhuyEWjkROVkYXJ8bsr6+7QDRbURFZnHNiRgO9rDtnTaD7nqAlDR7Saj7LqQVMZUUzFI/PKanBsVYuPd1Ll4L97X9XSxmgpz1gLOqTi9PEme6qNnAP0mUX6NssMltlgB4cyV6k0lPntySXG1MCSMSGg9rXMDTupdCdW+91/5mWTEmf4/NYvpapbwYmYMLCsDz9zGaC00n2RABjNlQzJfrsXKK6LE2nT6vogC1GXDvVypSWBQvQb+v1T+C/Md3pTIhT10qh+vSTr7cNDDrPZRiC30I2h1+z5FJcML0fsPX/tylBokkR+uUJXFZmAbR1YwNLSecRSC2ZYWrD/zL5vA1zge5x8vpaxu1ypLWnNVGE6iSRFySDfZlc4qQrrnooFDdIhPwd8PAp1XUry48D2xkOVwDVqIpclyEM05JIZnFKfuM3iUNzGri9M8uKFGfmiMrB6iUlIxGdjlIzMxG6dFk6bNuUf+ezaK8caixwpTMrzBLsAsivcPX2SHViYcIQslGKu8="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"a9794f020a1f8031adb93adc9c5dd396c52cd6a18001f803b8c54bab72a219f2","subject":{"common_name":["*.webex.com"],"country":["US"],"locality":["San Jose"],"organization":["Cisco Systems, Inc."],"organizational_unit":["Webex Communications, Inc."],"province":["California"]},"subject_dn":"C=US, ST=California, L=San Jose, O=Cisco Systems, Inc., OU=Webex Communications, Inc., CN=*.webex.com","subject_key_info":{"fingerprint_sha256":"d3bad3f73e15cfd0d171aca64c2ece91f6794d4faa8545cae55cb168d4c424f1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"n/hjixPaJtjNwJDhqkrlPg18Z6lQzNOX/+FCZfb9oPksmPqvHOp4ws0PDOiSH3eqqNk1pW9am+WkJkmIsqQ882IJjcMV9mQ5jT6z7WzPdzLQw+S9CPAZ6BT4VjlQgw+Molrj6uafF8UoUgUUF9U9dTbBKUMNkGNgXhnLQifBJZ6KhwVTaFkI6yNbWSYqMV6Arllb+IhN5INyb+/MQ/7VOgUHelWsIDmiSacBMPgwD3IY3F7CvSOwmgILOLi/XR27lX3DKrbWYYR4+z/Au6lzpEMORMNKoOs64rKlsMHRCpyUGSMkecQgNAbvZcvyPMlkiXrcezLSQVQWt1H7scqq4Q=="}},"tbs_fingerprint":"9b4e93151d5fb4ab93d382097b893d818cee5751401f1518a1452595228360b9","tbs_noct_fingerprint":"4aa242522c6654ddd5ef667c7257ab0f1ba581f57c9844226ad13443172e15a1","validation_level":"OV","validity":{"end":"2021-01-15T16:36:00Z","length":"31622943","start":"2020-01-15T16:26:57Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://trust.quovadisglobal.com/qvrca2.crt"],"ocsp_urls":["http://ocsp.quovadisglobal.com"]},"authority_key_id":"1a8462bc484c332504d4eed0f603c41946d1946b","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"id":"2.23.140.1.2.2"},{"id":"1.3.6.1.4.1.8024.0.2.100.1.2"},{"cps":["http://www.hydrantid.com/support/repository"],"id":"1.3.6.1.4.1.8024.0.3.900.0"}],"crl_distribution_points":["http://crl.quovadisglobal.com/qvrca2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"986ab62d2ebfa7aa9ff6f7d609afd58b57f98ab7"},"fingerprint_md5":"1135e32656e5aadf53a4dd32c8d5590f","fingerprint_sha1":"ac4a728b4dfc35601fa34b922422a42c253f756c","fingerprint_sha256":"9c6d08933201407fbf2b12540b67cc0e4c9666f132e1504762a717cbae8f3fd6","issuer":{"common_name":["QuoVadis Root CA 2"],"country":["BM"],"organization":["QuoVadis Limited"]},"issuer_dn":"C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 2","redacted":false,"serial_number":"668466794465057825139349354921536757627739689900","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"lraik8EDDUkpAnIOajO9/r4dpj/Zry766SH1oYPo7eTGzpDanPMeGMuSmwdjUkFUPALuWwkaDERfz9xdyFL3N8CRg9mQhdtT3aWQUv/iyXULXT87EgL3b8zzf8fhTS7r654m9WM2W7pFqfimx9qAlFe9XcVlZrUu9hph+/MfWMrUju+VPL5U7hZvUpg66mS3BaN15rsXv2+Vw6kQsQC/82iJLHvtYVL/LwbNio18CsinDeyRE0J9wlYDqzcg5rhD0rtX4JEmBzq8yBRvHIB/023o/vIO5oxh83Hic/2Xgwksf1DKS3/z5nTzhsUIpCpwkN6nHp6gmA8JBXoUlKQz4eYHJCq/ZyC+BuY2vHpNx6101J5dmy7ps7J7d6mZXzguP3DQN84hjtfwJPqdf+/9RgLriXeFTqwesnxbk2FsPhwxhiNOH98GSZVvG02v10uHLVaf9B+puYpoUiEqgm1WG5mWW1PxHstuEw9jBMcJ6wjQc8He9rSUmrhBr0HyhckdC99RgEvpcZpV2XL4nPPrTI2ki/c9xQb9kmhVGonSXy5aP+hDC+Ht+bxmc4wN5x+vB02hak8Hh8jIUStRxOsRfJozU0R9ysyPEZAHFZ3Zivg2BaD4tOISO8/T2FDjG7PNUv0tgPAOKw2t94B+1evrSUhqJDU0Wf9c9vkaKoPvX4w="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"1e42da10e252c5a7f83aa34fe6f46e0f9fce602d2069cb38d0d1bfff50891bbe","subject":{"common_name":["HydrantID SSL ICA G2"],"country":["US"],"organization":["HydrantID (Avalanche Cloud Corporation)"]},"subject_dn":"C=US, O=HydrantID (Avalanche Cloud Corporation), CN=HydrantID SSL ICA G2","subject_key_info":{"fingerprint_sha256":"e34d058a6f4841ee23f868fe0a2e11e38337800e89d7f4d187c2e53d22c5dc8f","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"9p1ZOA9+H+tgdln+STF7bdOxvnOERYyjo8ZbKumzigNePSwbQYVWuso76GI843yjaX2rhn0+Jt0NVJM41jVctf9qwacVduR7CEi0qJgpAUJyZUuB9IpFWF1Kz14O3Leh6URuRZ43RzHaRmNtzkxttGBuOtAg+ilOuwiGAo9VQLgdONlqQFcrbp97/fO8ZIqiPrbhLxCZfXkYi3mktZVRFKXG62FHAuH1sLDXCKba3avDcUR7ykG4ZXcmp6kl14UKa8JHOHPENYyr0R6oHELOGZMox1nQcFwuYMX9sJdAUU/9SQVXyA6u6YtxlpZiC8qhXM1IE00TQ9+q5ppffSUDMC4V/5If5A6snKVP78M8qd/RMVswcjMUMEnov+wykwCbDLD+IReMA57XX+HojN+8XFTL9Jwge3z3ZlMwL7E54W3cI7f6cxO5DVwoKxkdk2jRIg37oqSlSU3z/bA9UXjHcTl/6BoLho2p9rWm6oljANPeQuLHyGJ3hc19N8nDo2IATp70klGPkd1qhIgrdkki7gBpanMOK98hKMpdQgs+NY4DkaMJqfrHzWR/CYkdyUCivFaepaFSK78+jVu1oCMOFOnucPXL2fQa3VQn+69+7mA324frjwZj9NzrHjd0a5UP7waPpd9W2jZoj4b+g+l+XU1SQ+9DWiuZtvfDW++k0BM="}},"tbs_fingerprint":"540eb5e9f76af49a5f40abd72ede65dfdb0fee82673ad70ef86659713b147e57","tbs_noct_fingerprint":"540eb5e9f76af49a5f40abd72ede65dfdb0fee82673ad70ef86659713b147e57","validation_level":"EV","validity":{"end":"2023-12-17T14:25:10Z","length":"315532800","start":"2013-12-17T14:25:10Z"},"version":"3"}},{"parsed":{"extensions":{"authority_key_id":"1a8462bc484c332504d4eed0f603c41946d1946b","basic_constraints":{"is_ca":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"1a8462bc484c332504d4eed0f603c41946d1946b"},"fingerprint_md5":"5e397bddf8baec82e9ac62ba0c54002b","fingerprint_sha1":"ca3afbcf1240364b44b216208880483919937cf7","fingerprint_sha256":"85a0dd7dd720adb7ff05f83d542b209dc7ff4528f7d677b18389fea5e5c49e86","issuer":{"common_name":["QuoVadis Root CA 2"],"country":["BM"],"organization":["QuoVadis Limited"]},"issuer_dn":"C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 2","redacted":false,"serial_number":"1289","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"PgoWTZ8GW6iucV0vBS9n5hNFg8Q29vPAJgwNtUdkXfi0cslGpQMYJ1WJeH126pY0gBcg3OeD+I38B7jaX00uZ7KE/dlE/HdQgeZ8tMkNC3JT+HYHB0FHlgz74IImk1WM/iIfYGV8X+cms/cykJhQ1DdxVfaSIXj3lXn6+C0mh2ZWMHemN3gzUhBYrj9hjvJqse8YfkpZY8qNolbVpy+8Vh/POcHi+wqoFSx9TXpjxmyXRDzSb8NKFwr4kNJXohlRpS2XQdoHT6lQ2pCNlEbhPvCU/RAAOPU76EDhtG5WGiDMb1iN7S5Fj9bpkz/nsSzfOtYijNyEuyJv0PjkxjnpBIg8w7rrVXptgJkk9WwB+/iXsJRb6/3Sb/F3aA01ZCOsuFWhA9FNQhnc+HVZVqP5qEl5+K8OuRGgfLdq7TTQtiZiOBqHDPjo/S7TkH8HkSod1n5chYOZsDgIP+le+TUH5Mlibld/p1CV97rIm+aOogHF1ma/eWHzPBzhuYJcXaDD6dhIvRmiERQZbrKGG2g+SDcaiLddll6cx+8nYgjikRlc0vEh3boXQoKXcYFTMamf9n1iv3Lho5MdzIomWgk40M7XDYAWtHilOodMjYql1UaX8iwQubxUIsABUGlDnvSy72347Nrx47Hv35GPVCoLJcEmGcRSEAVl1YIQ6sIxzS4="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"8cfe74285f76223a37446f3218e2a2602e4f860594fb433af5bba0643ff75d33","subject":{"common_name":["QuoVadis Root CA 2"],"country":["BM"],"organization":["QuoVadis Limited"]},"subject_dn":"C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 2","subject_key_info":{"fingerprint_sha256":"8fd112c3c8370f147d5ccd3a7d865eb8dd540783bac69fc60088e3743ff33378","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"4096","modulus":"mhjKS5QNAC2vAymK8A+ByK5MGYUdCJ+rKUSF8y+BrTIekEa/o4YmGh7+fhwYOlycYBcqOnSDMzB9YVQRy+2r4ObSon71a28YtwoLLf3pPu8KxrMQ6dzCRhf4Xf2k2v+eSVqc5jPmJJb3P7pbKxx6NcLWZ/6rZlCLbShgK+/XYMPHk7yNNpHzf/jbERPEnHd2wa63AmqBeqlFg+IF5rlWwZQ3j0hxYyLsF2UHlYpL34/GWgrlsONfXmsRqwz5hetE6fgEc/Lp/lyYjPVzr2u0fs3UXAIrTDnhspWVLUKH19WzkEO3bBPx3t32xPiJP9F19ZLDkdWKiNCQ7Nxt3onCZXGWiw0D/Zy/Wxasktvq/nl8reuv9xbL280lK+Uf+5qf4lHMOlMMSOYOvcm0dgZS5hEThXJjAwTgBDYrIBkC6HSnH7bJVmbwdSXcZ8EOYWCIsz7RqPyj2h2w0bEjVN9Edm3tQdjBsiK2UxzfNR3coXcqMeQt9eXl28jg/+WA1wtjoP8zoQ+6LBUV6pez0qK1vvKMlh4ajx1spGE3uYZzM9eXlp4jfYKkTIHiodG6Z1+VB6MnEe4WEHu8RUpMsgTSq+/V/QxRzlBqCDH5kdoMj2RcA8M6iyA/bo1nPTrW/n1biMle+8xh3Iszd9NEMjUJYgSSFhDYnidH+zsh4/jrHVs="}},"tbs_fingerprint":"ea9adfeae91356ca539b1823baceefe758a85a765619d3c3be363212c6978edf","tbs_noct_fingerprint":"ea9adfeae91356ca539b1823baceefe758a85a765619d3c3be363212c6978edf","validation_level":"unknown","validity":{"end":"2031-11-24T18:23:33Z","length":"788918193","start":"2006-11-24T18:27:00Z"},"version":"3"}}],"cipher_suite":{"id":"0x009C","name":"TLS_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":true,"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-10T06:21:10Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T07:32:38Z"},"get":{"status_code":"406","status_line":"406 Not Acceptable","timestamp":"2020-07-15T03:43:00Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T07:11:43Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T11:07:11Z"},"dhe":{"support":false,"timestamp":"2020-07-12T09:33:45Z"}}},"ipint":"2905075307","updated_at":"2020-07-15T03:43:00Z","location":{"country_code":"US","continent":"North America","city":"San Jose","postal_code":"95134","timezone":"America/Los_Angeles","province":"California","latitude":37.4073,"longitude":-121.939,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"13445","routed_prefix":"173.39.224.0/19","asn":"13445","country_code":"US","name":"13445","path":["11164","13445"]},"protocols":["443/https","80/http"],"ipinteger":"1810769837"} +{"address":"139.216.216.136","ipint":"2346244232","updated_at":"2020-07-15T10:21:55Z","p7547":{"cwmp":{"get":{"body":"File not found\n","body_sha256":"19b7f2bb710b1e3a6e8e146b1e56e3fedefef4abb88eba19a52ea75197a59259","headers":{"content_length":"15","content_type":"text/plain; charset=ISO-8859-1","server":"tr069 http server","unknown":[{"key":"date","value":"Wed Jul 15 20:21:55 2020"}]},"status_code":"404","status_line":"404 Not Found","timestamp":"2020-07-15T10:21:55Z"}}},"ip":"139.216.216.136","location":{"country_code":"AU","continent":"Oceania","city":"Brisbane","postal_code":"4000","timezone":"Australia/Brisbane","province":"Queensland","latitude":-27.4732,"longitude":153.0215,"registered_country":"Australia","registered_country_code":"AU","country":"Australia"},"autonomous_system":{"description":"VOCUS-RETAIL-AU Vocus Retail","routed_prefix":"139.216.208.0/20","asn":"9443","country_code":"AU","name":"VOCUS-RETAIL-AU Vocus Retail","path":["6939","4826","9443"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-1999054709","version":"0","tags":["cwmp"]} +{"address":"104.102.178.114","ip":"104.102.178.114","p80":{"http":{"get":{"body":"\nInvalid URL\n\n

            Invalid URL

            \nThe requested URL \"[no URL]\", is invalid.

            \nReference #9.2c8d4017.1593485593.21f79777\n\n","body_sha256":"4108e7484736297c303886f31d93ea3aab3569fdbdbfcb1b2d7c2e60e5aa3567","headers":{"connection":"close","content_length":"209","content_type":"text/html","expires":"Tue, 30 Jun 2020 02:53:13 GMT","server":"AkamaiGHost","unknown":[{"key":"date","value":"Tue, 30 Jun 2020 02:53:13 GMT"},{"key":"mime_version","value":"1.0"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-06-30T02:53:13Z"}}},"ports":["80","443"],"version":"0","tags":["akamai","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://secure.globalsign.com/cacert/gsextendvalsha2g3r3.crt"],"ocsp_urls":["http://ocsp2.globalsign.com/gsextendvalsha2g3r3"]},"authority_key_id":"ddb3e76da82ee8c54e6ecf74e6753c9415cee81d","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.globalsign.com/repository/"],"id":"1.3.6.1.4.1.4146.1.1"},{"id":"2.23.140.1.1"}],"crl_distribution_points":["http://crl.globalsign.com/gs/gsextendvalsha2g3r3.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"XNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbHDso=","signature":"BAMARzBFAiAzOSh+RRy+R58mYi7DQgsgSxEtIh1QvQXpE2QoAjbx7AIhAOCi4SqVrex3eXmNcQpOmm91y4vonNqACHaVvOc/4gOX","timestamp":"1592205666","version":"0"},{"log_id":"9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOM=","signature":"BAMARzBFAiEAorg3UFPAUAmY6IHXpv6mdUqhaRtG2tY6CkZJHfxhtG8CIEsv5XkCjR2HHq/uX2+Mmue0e6+e4CRU3tEJVA3wpYUF","timestamp":"1592205666","version":"0"}],"subject_alt_name":{"dns_names":["maintenance.bitcoin.dmm.com"]},"subject_key_id":"d680efb3b7d553a4e96f431ddc3b87695474ef8b"},"fingerprint_md5":"7b41f524704f6ac1dcda6d9353a32e60","fingerprint_sha1":"a70e90020fbac49de78d6b2147c95532fb6fe5f6","fingerprint_sha256":"b804538bb2cb6c9080aedc711a6c1fac9e835a0e8eb14f98e2618b9f203ea8fc","issuer":{"common_name":["GlobalSign Extended Validation CA - SHA256 - G3"],"country":["BE"],"organization":["GlobalSign nv-sa"]},"issuer_dn":"C=BE, O=GlobalSign nv-sa, CN=GlobalSign Extended Validation CA - SHA256 - G3","names":["maintenance.bitcoin.dmm.com"],"redacted":false,"serial_number":"30072501187450098388339409064","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"BLHDeB2yeIaFs++/dEJxg7pW5FUHxI5NxFMBiUnd91AzdavTYP6tH5x+YNAuI3spfyQA2T0t2EsBRHqS3AM2ti3ZN4HSpBpjV27ArEZZk9Z+gqaJElHHzH+PdS6F3I8eIwaTMavvLQBVfYmMuICwOPlvQOjv9SZr20E/1Q+RxXjbVmHTbAsWIQFvYzf33leiYMaDx6+wTIetavEKZb6782ugI0s12+vOzHRVXoNLtRjdV5HdxJiXnDIqBqhxyzOzioAGIQi9gsVpxXqKgu5JjBj0iqSTB9ZU11yyueCK2eP5rJ/MpKxKxirYsSQ991OohnVikOBlSPXt/VD55GFz6g=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"a3b19b44abdecaf9f762d4085e081ede67088748bb9d624ec623951fd73971d0","subject":{"common_name":["maintenance.bitcoin.dmm.com"],"country":["JP"],"jurisdiction_country":["JP"],"locality":["Chuo-ku"],"organization":["DMM Bitcoin Co.,Ltd."],"organizational_unit":["Information system"],"province":["Tokyo"],"serial_number":["010401128129"]},"subject_dn":"businessCategory=Private Organization, serialNumber=010401128129, jurisdictionCountry=JP, C=JP, ST=Tokyo, L=Chuo-ku, OU=Information system, O=DMM Bitcoin Co.,Ltd., CN=maintenance.bitcoin.dmm.com","subject_key_info":{"fingerprint_sha256":"1aeed84df364644478caaa345da67f600b48b0403aa0cfb9fd7b11ee99c0c5dd","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"4lM0A2LVUspxTyYBF4ngci8QhXtvE8n3UeunQ+fUuajZSXYkH9UZDCKLXesvdGKOlgzrLavaCCJjdUPNkfLolXQHDjCX6xDJlS8HEd151RT0sNe90Om5rHWNRoMh5fKy7zvfku7eBZhHtqMbbe+Q4unCXHEgw4JqumjDD3CMvOrElyPwgTVUEc1+eJoF/pANvDM5aEPdqxWsk16/SaLlZspGpxeY4gJVtxtWXCvJ5kSqmqB536GYFrqN1a5DdjvHhmttLHhDaqIPqVEtg4raGMfdi0J8RbThL+an1tbG3uMoD6N0I+OIRPFt0x79oD4RCMM6/yhzIZU1jj53hncycQ=="}},"tbs_fingerprint":"de6db6de005c05cb3d93e6f13e7c810db804f86d0be40791c6f11e8cfc5277d2","tbs_noct_fingerprint":"79b432f7e764c3a7b34a5a52d759ada4eabec623d03e23db171ccfb8d7546e92","validation_level":"EV","validity":{"end":"2021-07-07T02:16:08Z","length":"33418505","start":"2020-06-15T07:21:03Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp2.globalsign.com/rootr3"]},"authority_key_id":"8ff04b7fa82e4524ae4d50fa639a8bdee2dd1bbc","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"cps":["https://www.globalsign.com/repository/"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.globalsign.com/root-r3.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"ddb3e76da82ee8c54e6ecf74e6753c9415cee81d"},"fingerprint_md5":"6fb1d79a175557e57c4369476a516a2c","fingerprint_sha1":"6023192fe7b59d2789130a9fe4094f9b5570d4a2","fingerprint_sha256":"aed5dd9a5339685dfb029f6d89a14335a96512c3cacc52b2994af8b6b37fa4d2","issuer":{"common_name":["GlobalSign"],"organization":["GlobalSign"],"organizational_unit":["GlobalSign Root CA - R3"]},"issuer_dn":"OU=GlobalSign Root CA - R3, O=GlobalSign, CN=GlobalSign","redacted":false,"serial_number":"1473327796444751899236096917215611","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"VWic5dCf4tM1Fd/IjFyEPkP8obfiWWeQ1taLRi+TmFdC2emROsYflrr1iSeIaw24X6OpIVBGhbUVJ7q6s7rb1cloFvJrJ6D9ILTGTtdXMD1DFLlFfIhsiDriAdH5aOhvl21e+Embkeb+UQIKoBl7nGFD2Vr7/QH8zDEIUUJK/zDv1kdl0nYga1x6Ay9sZOA5owOCuojyPtfqjIcq5FDP9mRHQPJXasJfJ0A5Cku76urFGeSz1XX6cSWWbuSQY+MuxTRU1VtTjJQlL8LeR/GhYATCxYpPcaiuiRR6WMWJn+LdrCy8TdC5QrYSRGm76ddGZTrX7vIS+YAl3MZ8Bsc0mw=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"3ded4b5d4c31626cf97f80f59c0846efb6a64ab5113a2c747feb8539b2061ec1","subject":{"common_name":["GlobalSign Extended Validation CA - SHA256 - G3"],"country":["BE"],"organization":["GlobalSign nv-sa"]},"subject_dn":"C=BE, O=GlobalSign nv-sa, CN=GlobalSign Extended Validation CA - SHA256 - G3","subject_key_info":{"fingerprint_sha256":"f3a7cb21eb68a502c3371159d2e308eba5e9975a4580b9471e7f6fea44f48b82","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"q2sDZ1TV3BH7xaITwYwZJ9wQdOJhgz36jtuPpQ/kqb5GPwK+RKQJHCYzn0dIgRWIVjfNB86V2MtrSAO5m16SrtiaZmHVNcXKEKUCtLoxP8HvrxA8o8o5rX++iy6mzn7qt8WW0qlKgGPjDrwOu556XWsL5B4CQRVT58bouOVx+AcE8G7Q7nMfjKOxCuJktE4vj9TcwEcRTQlBTPFsXN9sMVyn3+llOE26lMf1CZuPObbZBartDseME1FG59Lrsyu8ld2PfOhLRs4Sga2jB9+jHpEmJROO9xqh3rUYvamzRuaTPvkmvlo0fRNXtGMLNeghqrJlSsAKoOLnON3gUxVIVQ=="}},"tbs_fingerprint":"074496a78c9098adbc39c70758ecd194f3d0211d3e7de551d9a7a41ef4723016","tbs_noct_fingerprint":"074496a78c9098adbc39c70758ecd194f3d0211d3e7de551d9a7a41ef4723016","validation_level":"unknown","validity":{"end":"2026-09-21T00:00:00Z","length":"315532800","start":"2016-09-21T00:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":true,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"160","lifetime_hint":"7300"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T22:02:00Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T04:19:20Z"},"get":{"body":"\nInvalid URL\n\n

            Invalid URL

            \nThe requested URL \"[no URL]\", is invalid.

            \nReference #9.c8d4017.1594630347.3e0ae805\n\n","body_sha256":"6be2e11a40c296b145dc179b76579c52a087f429ac17f0d7d0f853de2fd2ad93","headers":{"connection":"close","content_length":"208","content_type":"text/html","expires":"Mon, 13 Jul 2020 08:52:27 GMT","server":"AkamaiGHost","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 08:52:27 GMT"},{"key":"mime_version","value":"1.0"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-13T08:52:26Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T10:26:21Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T05:29:36Z"},"dhe":{"support":false,"timestamp":"2020-07-12T04:03:24Z"}}},"ipint":"1751560818","updated_at":"2020-07-14T04:19:20Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AKAMAI-AS","routed_prefix":"104.102.176.0/20","asn":"16625","country_code":"US","name":"AKAMAI-AS","path":["7018","20940","16625"]},"protocols":["443/https","80/http"],"ipinteger":"1924294248"} +{"address":"63.224.69.78","ip":"63.224.69.78","ports":["1911","443"],"version":"0","tags":["building control","fox","http","https","scada"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_key_id":"2414aee9fd8857306867e9e898cd9599e50ddac4","basic_constraints":{"is_ca":false},"extended_key_usage":{"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"subject_key_id":"2414aee9fd8857306867e9e898cd9599e50ddac4"},"fingerprint_md5":"d15af624c56d8084d50b07440c6a0c6c","fingerprint_sha1":"e4cad61a98dd5fb5178f332513cf9025b16626be","fingerprint_sha256":"64278d104c008a64e80db6956516911213682b9f1a8db4db88d41725efa743c4","issuer":{"country":["BE"],"locality":["Edegem"],"organization":["Technicolor"],"province":["Antwerp"]},"issuer_dn":"C=BE, ST=Antwerp, L=Edegem, O=Technicolor","redacted":false,"serial_number":"11606639352320510041","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"xIgF+WGuAFfH9wYxwC5kBSKnVv8l4LOJMLSn+BhuPKhpenSvb5UVLfGQ3iuMHdKbCxjmXweHWrESzLThNM4oLS9cPSRjIOsXfXTA05RMpdrGyUxY08eRGwsrCsSZIDCgbzbKvK+Vx2MCrYqj9RpPSepBjc0eks0bVN7BOwvH/4EqJhBaf4PMALacMq/XAZwWV9R/E18WXXPmdVyCFQMDGJ4P1PsOG7MDL8UZKfIovW6zDOP8lMB2vdmhIDJSHXQ5bjFPFZNaarpfAVOf41QmweJV/8ygwUKkcJSb/NmMGDbFXLtoCvQsanRJtNk+jg4YYCXbFZCRtM8L3E/fjppa2A=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"059d386fada0cada55d0cb19afb9b1d987565429d9279a540030e585e6ca26b2","subject":{"country":["BE"],"locality":["Edegem"],"organization":["Technicolor"],"province":["Antwerp"]},"subject_dn":"C=BE, ST=Antwerp, L=Edegem, O=Technicolor","subject_key_info":{"fingerprint_sha256":"8ee660f1adb100282cbe3a1029c185d2f28c98a3f2c001f4e625849c4b0f2dd3","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"4mgDzOlKKXfd5XQDJWwO6vLZNBPPThkD8dccfWeHgIXEaOnukRCElrgARtLuB9HEfwGO1rs5fIXUjBvPqbR76eSJ6gEpI7xRiaMDToBlTOZ/bBB5GvtBnKarz7awRZMpK4iBJNQcEa71PFvBQvMMEtoHvNHsbTvD5NodZYARmEwkPEGcG9qeh4rtaBFEiLpZjuCd1fzX3gMF50meWJ1gXOS60NL3BmRonAzP33bxu85HF95nklh+yVPp7eNthfYpsIT6jEM0i5IuWJDjf592KwYwc8J14OHMWGOfQa2Z/kjHLkHLwvGcWuGStz9cS0zvIghDm8aBxYJCr9NvkLQxiQ=="}},"tbs_fingerprint":"7145f2cf142dcfd6e6cae9632453f332c56e990bbe5c1cd933e92ba390e8990d","tbs_noct_fingerprint":"7145f2cf142dcfd6e6cae9632453f332c56e990bbe5c1cd933e92ba390e8990d","validation_level":"unknown","validity":{"end":"2029-12-07T02:17:28Z","length":"315360000","start":"2019-12-10T02:17:28Z"},"version":"3"}},"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2","timestamp":"2020-07-09T08:20:50Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T05:54:00Z"},"get":{"body":"\r\n403 Forbidden\r\n\r\n

            403 Forbidden

            \r\n
            nginx
            \r\n\r\n\r\n","body_sha256":"1d08335e65da7cf40d1c4a7ba0088e0f39b9c5a4b2e42de95fc9ffa69fb96c7a","headers":{"content_length":"162","content_type":"text/html","server":"nginx","unknown":[{"key":"date","value":"Wed, 15 Jul 2020 02:35:21 GMT"}]},"metadata":{"description":"nginx","product":"nginx"},"status_code":"403","status_line":"403 Forbidden","title":"403 Forbidden","timestamp":"2020-07-15T02:35:21Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T08:30:19Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T04:48:27Z"},"dhe":{"support":false,"timestamp":"2020-07-12T03:16:05Z"}}},"ipint":"1071662414","updated_at":"2020-07-15T02:35:21Z","p1911":{"fox":{"device_id":{"support":true,"version":"Niagara 4","timestamp":"2020-07-13T05:51:03Z"}}},"location":{"country_code":"US","continent":"North America","city":"Denver","postal_code":"80207","timezone":"America/Denver","province":"Colorado","latitude":39.7586,"longitude":-104.9179,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"CENTURYLINK-US-LEGACY-QWEST","routed_prefix":"63.224.68.0/23","asn":"209","country_code":"US","name":"CENTURYLINK-US-LEGACY-QWEST","path":["7018","3356","209"]},"protocols":["1911/fox","443/https"],"ipinteger":"1313202239"} +{"address":"72.185.135.98","ipint":"1220118370","updated_at":"2020-07-15T12:10:56Z","p7547":{"cwmp":{"get":{"headers":{"content_length":"0","server":"gSOAP/2.7","www_authenticate":"Digest realm=\"Sagemcom TR-069\", qop=\"auth,auth-int\", nonce=\"5f0ef251ca8f1edd80e3\", opaque=\"18ebd3d3\""},"status_code":"401","status_line":"401 Unauthorized","timestamp":"2020-07-15T12:10:56Z"}}},"ip":"72.185.135.98","location":{"country_code":"US","continent":"North America","city":"New Port Richey","postal_code":"34655","timezone":"America/New_York","province":"Florida","latitude":28.2137,"longitude":-82.6809,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"BHN-33363","routed_prefix":"72.184.0.0/14","asn":"33363","country_code":"US","name":"BHN-33363","path":["11164","7843","33363"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"1653061960","version":"0","tags":["cwmp"]} +{"metadata":{"os":"Windows,Windows"},"address":"49.50.66.157","ip":"49.50.66.157","p80":{"http":{"get":{"body":"\r\n\r\n\r\n\r\nIIS Windows Server\r\n\r\n\r\n\r\n
            \r\n\"IIS\"\r\n
            \r\n\r\n","body_sha256":"2c3adc6b6fb69d3a4e7b75b64e913dc96d21dbaf436bf69e773589b6a6952c47","headers":{"accept_ranges":"bytes","content_type":"text/html","last_modified":"Sat, 09 Feb 2019 14:42:50 GMT","server":"Microsoft-IIS/8.5","unknown":[{"key":"etag","value":"\"a2e9f5ba85c0d41:0\""},{"key":"date","value":"Tue, 07 Jul 2020 16:41:38 GMT"}],"vary":"Accept-Encoding","x_powered_by":"ASP.NET"},"metadata":{"description":"Microsoft IIS 8.5","manufacturer":"Microsoft","product":"IIS","version":"8.5"},"status_code":"200","status_line":"200 OK","title":"IIS Windows Server","timestamp":"2020-07-07T16:43:35Z"}}},"ports":["80","21","1433","443"],"version":"0","p21":{"ftp":{"banner":{"banner":"220 Microsoft FTP Service","metadata":{"description":"IIS","product":"IIS"},"timestamp":"2020-07-13T09:21:36Z"}}},"tags":["database","ftp","http","https","mssql"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://certificates.godaddy.com/repository/gdig2.crt"],"ocsp_urls":["http://ocsp.godaddy.com/"]},"authority_key_id":"40c2bd278ecc348330a233d7fb6cb3f0b42c80ce","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["http://certificates.godaddy.com/repository/"],"id":"2.16.840.1.114413.1.7.23.1"},{"id":"2.23.140.1.2.1"}],"crl_distribution_points":["http://crl.godaddy.com/gdig2s1-1577.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"pLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BA=","signature":"BAMARjBEAiA/Mmizp8kjWSocPg8YGvbhv0uTjEf+Hcpz8+iUhN3BCAIgK5JosGlF4XX6ZkVWUwoDtRWWIirhlrP1FC+bGMjsECg=","timestamp":"1576242740","version":"0"},{"log_id":"Xqdz+d9WwOe1Nkh90EngMnqRmgyEoRIShBh1loFxRVg=","signature":"BAMARzBFAiAFiWzBmqpocIMMjX64lv/4RF+jB0aGyamJxiAIU7x3wQIhAJicmiJB6pLamdZfep5Gs4TlcvVVqu6T8xH//VEh57Rc","timestamp":"1576242740","version":"0"}],"subject_alt_name":{"dns_names":["vdavns.com","www.vdavns.com"]},"subject_key_id":"71ac95d90741587d46eeaa291185d11fa6a4fcd7"},"fingerprint_md5":"cac344243e730a0488c202289e206279","fingerprint_sha1":"bec03044227cba46c269c6fbcbe7ca7be75392c8","fingerprint_sha256":"d69a58687292eeb87af9513c78c327547c0afe992477e632ef318dafee639950","issuer":{"common_name":["Go Daddy Secure Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["GoDaddy.com, Inc."],"organizational_unit":["http://certs.godaddy.com/repository/"],"province":["Arizona"]},"issuer_dn":"C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certs.godaddy.com/repository/, CN=Go Daddy Secure Certificate Authority - G2","names":["vdavns.com","www.vdavns.com"],"redacted":false,"serial_number":"12870235375601784564","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"PenGQzWXytfYOWxe0+yFuPohM9c0HbSvs7jOuIxqs4QZPnfBB9JipmZ4zphZs0yxLqdzEo5kdk5w3p1y0IURHeHSBIVoZ4a27QhsiDO5DtLsqF0h/ruDH9JclibBnLAKYNnSzZA86AwJwM5mVfLJ5wJQBDOUCtS/755o7E00BCjJ1wLANrLFg9U07hLpA8TeX/3lQWaYb8TJqJ9wErQ+g60p59d6+PrUuxRdrXU04ymHg1x4UiXoPIlgTy35nUcQPcicDsD9pl9Wz6XMleayPcdVknKJ/vmSKTkYl5VCnBayp8uAMYqm0NzSTVOsRuEiCZxzMPBFfDSA1VrYzK9+pA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b1c20f4eeaeae97541f71d7c60f475cecd2340752ccdddd0ca23a8994ce70576","subject":{"common_name":["vdavns.com"],"organizational_unit":["Domain Control Validated"]},"subject_dn":"OU=Domain Control Validated, CN=vdavns.com","subject_key_info":{"fingerprint_sha256":"fb9a3b2aef768b5024663a1b86eb1e25b7dc0e67857ea2da669725092a0764f2","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"muYIkvHFNT9IO76VvKB+oVCp0/gAojM6PfbSHcwngDHFetmem6GN1pNYJ/qP6DNIq3LwJaA0Q0lklKVUTHcBLRuN4OPP18Wsdzh2jxf9oPV1s2PXt/loTc3oABxfmd+6pqalIhpoKWQHq8zuGGOifvh3zcyGpTM+9WKDqRGk0wbFlz38OMcBZoRkimf1J5qRfXx8UoVCegOu2AFC1dOZXtL/sUDBtUNEiSjFnhDEhaSApb0sOA0nnHcJtcJrQSw8uzHdISzrv3Z+R649z33luWnBYphL6bPqd4L/dRJ3AsoURvePxP/lMWWszlg1RMDnsDcd9spq07O6geuLk6pnGw=="}},"tbs_fingerprint":"6c91005247b3c77384d0f51fe8b5cb98dfb433b32379441f085bf093e866257e","tbs_noct_fingerprint":"08e879bd4c4d90817c43a55931b3223a9856206e2f5da44a84791422787bc15f","validation_level":"DV","validity":{"end":"2020-12-13T11:54:16Z","length":"31617719","start":"2019-12-13T13:12:17Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.godaddy.com/"]},"authority_key_id":"3a9a8507106728b6eff6bd05416e20c194da0fde","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["https://certs.godaddy.com/repository/"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.godaddy.com/gdroot-g2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"40c2bd278ecc348330a233d7fb6cb3f0b42c80ce"},"fingerprint_md5":"96c25031bc0dc35cfba723731e1b4140","fingerprint_sha1":"27ac9369faf25207bb2627cefaccbe4ef9c319b8","fingerprint_sha256":"973a41276ffd01e027a2aad49e34c37846d3e976ff6a620b6712e33832041aa6","issuer":{"common_name":["Go Daddy Root Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["GoDaddy.com, Inc."],"province":["Arizona"]},"issuer_dn":"C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2","redacted":false,"serial_number":"7","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"CH5skxDIOLiWqZBL/6FfTwTvbD6ciAbJUI+mc/dXMRu+vOQv2/i601vgtOfmeWIODKLXamNzMbX1qEikOwgtol2Q17R8JU8RVjDEtkSdeyyd5V7m7wxhqr/kKhvuhJ64g33BQ85EpxNwDZEf9MgTrYNg2dhyqHMkHrWsIg7KF4liWEQbq4klAQAPzcQbYttRtNMPUSqb9Lxz/HbONqTN2dgs6q6b9SqykNFNdRiKP4pBkCN9W0v+pANYm0ayw2Bgg/h9UEHOwqGQw7vvAi/SFVTuRBXZCq6nijPtsS12NibcBOuf92EfFdyHb+5GliitoSZ9CgmnLgSjjbz4vAQwAQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"340ffdeae9152c43ef716c6e790f869029dbb48a0f36a5b0756dd74e2b1e242d","subject":{"common_name":["Go Daddy Secure Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["GoDaddy.com, Inc."],"organizational_unit":["http://certs.godaddy.com/repository/"],"province":["Arizona"]},"subject_dn":"C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certs.godaddy.com/repository/, CN=Go Daddy Secure Certificate Authority - G2","subject_key_info":{"fingerprint_sha256":"f11c3dd048f74edb7c45192b83e5980d2f67ec84b4ddb9396e33ff5173ed698f","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"ueDLENSvdr3Uk2LrMGS4gQhswwTZYheOL/8+Zc+PzmLmPFIc2hZFS1WreGtjg2KQzg9pbJnIGhSLTMxFM+qI3J6jryv+gGGdeVfEzy70PzA8XUf8mha8wzeWQVGOEUtU+Ci+0Iy+8DA4HvOwJvhmR2Nt3nEmR484R1PRRh2049wA6kWsvbxx2apvANvbzTA6eU9fTEf4He9bwsSdYDuxskOR2KQzTuqz1idPrSWKpcb01dCmrnQFZFeItURV1C0qOj74uL3pMgoClGTEFjpQ8Uqu53kzrwwgB3/o3wQ5wmkCbGNS+nfBG8h0h8i5kxhQVDVLaU68O9NJLh/cwdJS+w=="}},"tbs_fingerprint":"f9ff37f02e632cb7387025c07e57908a3d371b7c95d8cdd0390de231ed943a12","tbs_noct_fingerprint":"f9ff37f02e632cb7387025c07e57908a3d371b7c95d8cdd0390de231ed943a12","validation_level":"unknown","validity":{"end":"2031-05-03T07:00:00Z","length":"631152000","start":"2011-05-03T07:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.godaddy.com/"]},"authority_key_id":"d2c4b0d291d44c1171b361cb3da1fedda86ad4e3","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["https://certs.godaddy.com/repository/"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.godaddy.com/gdroot.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"3a9a8507106728b6eff6bd05416e20c194da0fde"},"fingerprint_md5":"81528b89e165204a75ad85e8c388cd68","fingerprint_sha1":"340b2880f446fcc04e59ed33f52b3d08d6242964","fingerprint_sha256":"3a2fbe92891e57fe05d57087f48e730f17e5a5f53ef403d618e5b74d7a7e6ecb","issuer":{"country":["US"],"organization":["The Go Daddy Group, Inc."],"organizational_unit":["Go Daddy Class 2 Certification Authority"]},"issuer_dn":"C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority","redacted":false,"serial_number":"1828629","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"WQtTvZKGEacke+1bMc8dH2xwxbhuvk679r6XUOEwf7ooXGKUwuN+M/f7QnaF25UcjCJYdQkMiGVnOQoWCcWgOJekxSOTP7QYpgEGRJHjp2kntFolfzq3Ms3dhP8qOCkzpN1nsoX+oYggHFCJyNwq9kIDN0zmiN/VryTyscPfzLXs4Jlet0lUIDyUGAzHHFIYSaRt4bNYC8nY7NmuHDKOKHAN4v6mF56ED71XcLNa6R+ghlO773z/aQvgSMO3kwvIClTErF0UZzdsyqUvMQg3qm5vjLyb4lddJIGvl5echK1srDdMZvNhkREg5L4wn3qkKQmw4TRfZHcYQFHfjDCmrw=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"9a076dd81d34576c64b65bbdb28db1df943f7949d12c26de362178b1a9d2b6bf","subject":{"common_name":["Go Daddy Root Certificate Authority - G2"],"country":["US"],"locality":["Scottsdale"],"organization":["GoDaddy.com, Inc."],"province":["Arizona"]},"subject_dn":"C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2","subject_key_info":{"fingerprint_sha256":"2a8f2d8af0eb123898f74c866ac3fa669054e23c17bc7a95bd0234192dc635d0","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"v3FiCPH6WTT3G8kYo/eASVjpIoMTpsUgQwE7hPHmhUmfJ+r2hBtOoLTbcJjHMgGxBT4HTu70+k8vWTAi56sZVmvigAf88xZ1gDlRe+X5NbZ0TqmNghPktj+pA4P6or6KFWp/3gvDthkUBcrqw6gElDtGfDIN8wBmIsiNaW02jBEYt9OyHGC0OPoCjM7T3UYH3go+6118yHz7sCtTpJJiaVElBWEaRIGMLKlDliPfrDqBmg4pxRyp6V0etp6eMAo5zvGIgPtLXcwy7IViQyU0AlYnAZG0O3AqP26x6JyIAX2f1PnbU21gnb8s51iruF9G/M7EGwM8CetJMVxpRrPgRw=="}},"tbs_fingerprint":"2b28d005cdd66259db111865ea17cbb60b3c8f547068638d902a64be784afdf8","tbs_noct_fingerprint":"2b28d005cdd66259db111865ea17cbb60b3c8f547068638d902a64be784afdf8","validation_level":"unknown","validity":{"end":"2031-05-30T07:00:00Z","length":"549331200","start":"2014-01-01T07:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC014","name":"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"},"ocsp_stapling":true,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha1","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-10T05:03:18Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T02:32:26Z"},"ssl_3":{"support":true,"timestamp":"2020-07-15T10:11:19Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T02:31:25Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T06:58:13Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"1024","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5lOB//////////8="}},"support":true,"timestamp":"2020-07-12T03:08:12Z"}}},"p1433":{"mssql":{"banner":{"encrypt_mode":"ENCRYPT_ON","supported":true,"tls":{"certificate":{"parsed":{"fingerprint_md5":"6694c2a87eb46f1568c9016134ca6614","fingerprint_sha1":"448505231e8d29bb90dffa569bad357718975dda","fingerprint_sha256":"ce8f12b629616fc992e7211b8a91c9a4343e8e4b5a88909864b9befbc1983cce","redacted":false,"serial_number":"169757176770836990002093181599574119154","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1-RSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"FHZ/5k7L7tyIea5Ay978aOZqy71wAhuGRigq+9hU2wRJEu1a7PKHoGR6nZ0Szt8N96uE4pKZ4vib7JIiPBdWLORSkkn0zOhvYhW7EXnlr52lXKiPSoeBgS+KQrJZLI3eIu4cHy0bwU4iONZrDM46WwpNuGzucbF5J+1bnQL8Sus="},"signature_algorithm":{"name":"SHA1-RSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"20d3421d0d90463a6be9e13fd0843f1c08bd888507af83b2946c197b94a9ddcf","subject_key_info":{"fingerprint_sha256":"6de443f5307303895c8455d9ac478c23897f98f35ff53e4207096cad48cb8b9e","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"y8iUBuQw/qt8Tx7jVaQJYmv63E9s/T92Uhi8nk3XV5HeQfOlyOjNmwsYHtBG6feyEiymIHNMt3g66lnrXWLOj5PdFWolmzB7+SvwROh1CHRs5nqRUPa1c7GyEbAfYFQqpm1NFz2FSFuoa+SOKE9m2IhNuiJrmmP/a+zz8Tix5Pc="}},"tbs_fingerprint":"1ca5332b50051ac3d4e8b1cd525b322149318fc56ba3f752ea93c20467273ccb","tbs_noct_fingerprint":"1257afcea8c7c0fe4fc65c514a624c2f7c1079ca4a666deb3ece734a39f028ad","validation_level":"unknown","validity":{"end":"2050-07-04T11:37:28Z","length":"946684800","start":"2020-07-04T11:37:28Z"},"version":"3"}},"cipher_suite":{"id":"0xC014","name":"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"valid":true},"validation":{"browser_error":"x509: failed to load system roots and no roots provided","browser_trusted":false},"version":"TLSv1.0"},"version":"11.0.2100","timestamp":"2020-07-12T10:41:53Z"}}},"ipint":"825377437","updated_at":"2020-07-15T10:11:19Z","location":{"country_code":"IN","continent":"Asia","city":"Noida","postal_code":"110091","timezone":"Asia/Kolkata","province":"Uttar Pradesh","latitude":28.5788,"longitude":77.3321,"registered_country":"India","registered_country_code":"IN","country":"India"},"autonomous_system":{"description":"CYFUTURE-AS-IN Cyfuture India Pvt. Ltd.","routed_prefix":"49.50.66.0/24","asn":"55470","country_code":"IN","name":"CYFUTURE-AS-IN Cyfuture India Pvt. Ltd.","path":["7018","6453","4755","45117","55470","55470","55470"]},"protocols":["1433/mssql","21/ftp","443/https","80/http"],"ipinteger":"-1656606159"} +{"address":"74.133.193.11","ipint":"1250279691","updated_at":"2020-07-14T02:43:23Z","ip":"74.133.193.11","p80":{"http":{"get":{"body":"\r\n \r\n\r\nWEB SERVICE\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
            \r\n

            \r\n
            \r\n\r\n\r\n
            \r\n
            \r\n
            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n \r\n
            \r\n
            \r\n \r\n \r\n
            \r\n
            \r\n \r\n \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n \r\n
            \r\n
            \r\n \r\n \r\n
            \r\n
            \r\n
            \r\n
            \r\n
            \r\n\t\r\n\t
            \r\n\t\t
            \r\n\t\t\t
            \r\n\t\t\t\t\r\n\t\t\t
            \r\n\t\t\t
            \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
            \r\n\t\t
            \r\n\t
            \t\r\n
            \r\n\r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n\t\r\n\t
            \r\n\t\t\r\n\t
            \r\n\t\r\n\t
            \r\n \r\n\t
            \r\n\t
            \r\n\t\t\r\n\t
            \r\n\t
            \r\n \r\n\t
            \t\r\n\t
            \r\n \r\n\t
            \r\n\t
            \r\n\t\t\r\n
            \r\n\t
            \r\n\t\r\n
            \r\n
            \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","body_sha256":"cd04e3d4a7ea53523b9e174a5aaaf7732c98ab6cf95864200ab5edd5aa24101b","headers":{"content_length":"10009","content_type":"text/html","last_modified":"Fri, 05 Jul 2019 02:06:29 GMT","p3p":"CP=CAO PSA OUR","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 22:43:22 GMT"},{"key":"etag","value":"\"1562292389:2719\""}]},"status_code":"200","status_line":"200 OK","title":"WEB SERVICE","timestamp":"2020-07-14T02:43:23Z"}}},"location":{"country_code":"US","continent":"North America","city":"Brandenburg","postal_code":"40108","timezone":"America/New_York","province":"Kentucky","latitude":37.9694,"longitude":-86.1113,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"TWC-10796-MIDWEST","routed_prefix":"74.128.0.0/12","asn":"10796","country_code":"US","name":"TWC-10796-MIDWEST","path":["11164","7843","10796"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"197231946","version":"0","tags":["http"]} +{"address":"144.168.129.51","ipint":"2426962227","updated_at":"2020-07-07T16:08:56Z","ip":"144.168.129.51","p80":{"http":{"get":{"body":"\n\n\nWelcome to nginx!\n\n\n\n

            Welcome to nginx!

            \n

            If you see this page, the nginx web server is successfully installed and\nworking. Further configuration is required.

            \n\n

            For online documentation and support please refer to\nnginx.org.
            \nCommercial support is available at\nnginx.com.

            \n\n

            Thank you for using nginx.

            \n\n\n","body_sha256":"38ffd4972ae513a0c79a8be4573403edcd709f0f572105362b08ff50cf6de521","headers":{"accept_ranges":"bytes","connection":"keep-alive","content_length":"612","content_type":"text/html","last_modified":"Sun, 30 Apr 2017 08:49:32 GMT","server":"nginx/1.11.10","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 20:03:13 GMT"},{"key":"etag","value":"\"5905a51c-264\""}]},"metadata":{"description":"nginx 1.11.10","product":"nginx","version":"1.11.10"},"status_code":"200","status_line":"200 OK","title":"Welcome to nginx!","timestamp":"2020-07-07T16:08:56Z"}}},"location":{"country_code":"US","continent":"North America","city":"Buffalo","postal_code":"14202","timezone":"America/New_York","province":"New York","latitude":42.8864,"longitude":-78.8781,"registered_country":"Canada","registered_country_code":"CA","country":"United States"},"autonomous_system":{"description":"SERVER-MANIA","routed_prefix":"144.168.128.0/22","asn":"55286","country_code":"CA","name":"SERVER-MANIA","path":["7018","1299","36352","55286"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"864135312","version":"0","tags":["http"]} +{"address":"23.76.16.51","ip":"23.76.16.51","p80":{"http":{"get":{"body":"\nInvalid URL\n\n

            Invalid URL

            \nThe requested URL \"[no URL]\", is invalid.

            \nReference #9.9f3c95c9.1594114525.385555e\n\n","body_sha256":"2ec6e35305ee8065ce413521a996037c3fe67ec3d19631f6e3829dc7a5799560","headers":{"connection":"close","content_length":"208","content_type":"text/html","expires":"Tue, 07 Jul 2020 09:35:25 GMT","server":"AkamaiGHost","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 09:35:25 GMT"},{"key":"mime_version","value":"1.0"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-07T09:35:25Z"}}},"ports":["80","443"],"version":"0","tags":["akamai","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt"],"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"0f80611c823161d52f28e78d4638b42ce1c6d9e2","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.1"},{"id":"2.23.140.1.2.2"}],"crl_distribution_points":["http://crl3.digicert.com/ssca-sha2-g6.crl","http://crl4.digicert.com/ssca-sha2-g6.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"pLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BA=","signature":"BAMARjBEAiAOBfN32Wg+L0wIBXtHBwsJL2eAR5+FN9IPhYaJGx3W0QIgTrN1zI6eDJ1VxmFWVqnhYviOmGlBJtUigQOjC08seDc=","timestamp":"1570600378","version":"0"},{"log_id":"RJRlLrDuzq/EQAfYqP4owNrmgr7YyzG1P9MzlrW2gag=","signature":"BAMARzBFAiBnRPnwAYDCxdKEGepfplTj5wxSoBt2+J+2cPgu6V2ndAIhAMqAgLevLOOfN1A6I5WaMe2x4xX7sop9wk3vbQtl/eiL","timestamp":"1570600378","version":"0"}],"subject_alt_name":{"dns_names":["om.qq.com","ui.video.qq.com","za.app.joox.com","acc.yoo.qq.com","open.om.qq.com","file2.ind.ngame.proximabeta.com","api.om.qq.com","fo.cms.qq.com","matchweb.sports.qq.com","qzs.qq.com","yoo.qpic.cn","wepoker.hk","auth.om.qq.com","wxapp.om.qq.com","smusic.app.wechat.com","yoo.qq.com","rose.cms.qq.com","fan.cy.qq.com","c.v.qq.com","upload.om.qq.com","mm.app.joox.com","app.sports.qq.com","iwan.qq.com","m.om.qq.com","book.om.qq.com","media.om.qq.com","ipad.sports.qq.com","id.app.joox.com","uu.video.qq.com","dns.joox.com","dw.qq.com","activity.video.qq.com","cy.qq.com","th.app.joox.com","wx.om.qq.com","page.vote.qq.com","openugc.video.qq.com","wetv.acc.qq.com","pubgmobile.pubgameshowtime.com","file2.ngame.proximabeta.com","input.vote.qq.com","file2.jp.ngame.proximabeta.com","www.wepoker.hk","yoo.gtimg.com","wetvaccess.video.qq.com","data.v.qq.com"]},"subject_key_id":"df708dba56be1af853a7369874515b3ceaf6f5f9"},"fingerprint_md5":"61ec54b5ae13d204684559b7deeaede5","fingerprint_sha1":"a3705b8afc0b2b0b7936ca185e3346d62cf824f8","fingerprint_sha256":"4d687218c0ca4623aeb7ebeabbad8aec060fae3a607bfae4157aa28d781f1b07","issuer":{"common_name":["DigiCert SHA2 Secure Server CA"],"country":["US"],"organization":["DigiCert Inc"]},"issuer_dn":"C=US, O=DigiCert Inc, CN=DigiCert SHA2 Secure Server CA","names":["yoo.gtimg.com","acc.yoo.qq.com","yoo.qq.com","fan.cy.qq.com","uu.video.qq.com","page.vote.qq.com","auth.om.qq.com","app.sports.qq.com","id.app.joox.com","www.wepoker.hk","data.v.qq.com","book.om.qq.com","ipad.sports.qq.com","dns.joox.com","om.qq.com","api.om.qq.com","fo.cms.qq.com","wxapp.om.qq.com","mm.app.joox.com","input.vote.qq.com","yoo.qpic.cn","upload.om.qq.com","iwan.qq.com","cy.qq.com","th.app.joox.com","openugc.video.qq.com","wetv.acc.qq.com","activity.video.qq.com","file2.ngame.proximabeta.com","wetvaccess.video.qq.com","za.app.joox.com","file2.ind.ngame.proximabeta.com","matchweb.sports.qq.com","media.om.qq.com","dw.qq.com","file2.jp.ngame.proximabeta.com","open.om.qq.com","qzs.qq.com","wepoker.hk","m.om.qq.com","wx.om.qq.com","ui.video.qq.com","smusic.app.wechat.com","rose.cms.qq.com","c.v.qq.com","pubgmobile.pubgameshowtime.com"],"redacted":false,"serial_number":"21077675474370688548849666933329792266","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"niFoIzYo65xgJs/3fA2hUUugA3r3KMP4CcZKPXGp78ALC0JRXk7dVmggZy9Cak24n1tdoPSEePTQ46bZ7ZM8p1yPLKzhrculgBiF4loTZVBipkbVfN9LFU3V3cpdk9IAOZzI8F7Ey+t3YQC2qFwz60sELznMohe8xF9KxjWhnVYVh1xuSDYOfKDO3uvlIeihiZDasmXH/51/GSQZ+CUCsB7y6TChVWLxwNwfMPQTe1fgKWgBk4Aza2sY6Su6Bfk2bYoT9VZ12DoHiKi/ZEzB3bFbada8Rna7hzhfB0NcFETU6CLH6rdV/ys5BUXj83HE3hcqzM7niBuub1vgrzQpXg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"199c1b82bf72320abc46b9bc1b8c78956fd61e810a8bb17df226ab87b38ee5f5","subject":{"common_name":["om.qq.com"],"country":["CN"],"locality":["SHENZHEN"],"organization":["Shenzhen Tencent Computer Systems Company Limited"],"organizational_unit":["R&D"],"province":["GUANGDONG"]},"subject_dn":"C=CN, ST=GUANGDONG, L=SHENZHEN, O=Shenzhen Tencent Computer Systems Company Limited, OU=R&D, CN=om.qq.com","subject_key_info":{"fingerprint_sha256":"fcb34252380cacc8a026489e3cf65bf5617c41de4bd316118cbdfe8ffad969f6","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"nwCzBTVt2wKnre9rKUHhiHkyEbdQADHrteOzRz/5XhC4WIJsLeeMbAY8JKCCDL8VsEy/UH2zbs+B+1edoJF0mVilDxDFJU0PjIkN3WwHhmAR0h7g2LguJyNmZ29Prk2vhrS+RNpl50Rc3Ayh6ODJnmOH6Nk4wnFgcKanx8B3CXDAqH8wDtjdGoOQdqMlDNmKVo/asMSZgnfHkK/icRTzZ5IPh2OvseRAbn6iGlfK/j2QVWxBcu9toNNhhwznC2WhHHrj6t3/D/zgQ4D1ScT7AEaIs4MqkBlNlVCtbEimoJSMwOzwLJHd1eG4iP1CxF/Lu5uz8xHI0aO8ZnkPjIYK7w=="}},"tbs_fingerprint":"a6aafd144eca71822e1dbe74d6b453174caa12299c68f0c7f9571e31f12c595b","tbs_noct_fingerprint":"533983dfd95edbb1d9e94c68183ea25de64c562570e41aefe1dbfe1ee95b413d","validation_level":"OV","validity":{"end":"2021-01-07T12:00:00Z","length":"39441600","start":"2019-10-09T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"03de503556d14cbb66f0a3e21b1bc397b23dd155","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl3.digicert.com/DigiCertGlobalRootCA.crl","http://crl4.digicert.com/DigiCertGlobalRootCA.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"0f80611c823161d52f28e78d4638b42ce1c6d9e2"},"fingerprint_md5":"345eff15b7a49add451b65a7f4bdc6ae","fingerprint_sha1":"1fb86b1168ec743154062e8c9cc5b171a4b7ccb4","fingerprint_sha256":"154c433c491929c5ef686e838e323664a00e6a0d822ccc958fb4dab03e49a08f","issuer":{"common_name":["DigiCert Global Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","redacted":false,"serial_number":"2646203786665923649276728595390119057","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"Iz7fS9IxQqW2fkJcGkTMadFotF1L4AQhbEvibcyx4JePplMJzaoqZeU5Tx6DpW5cmKIkJub7oe2Txy4Cxk1Kv7BC33jas6j5bf8hhVM2YEx2zuw43NZRgPDF1uXUTSdkq5vHPnH7SJe4M23JEwfulqIbGBX2XExA7bPC7P9xweNH/9S5ALQ3Qtogyepuiu4UBq59olmYiKgbby308skUXybPLI1+7TfAqdU5uYK/GQzqNK8AIWj4rXPiyTLaOCULVdOaHfBohu0uQTTvfKVQHb86+dPBCAzm7R6KWCXkuHetLW71Ut20dI+rSS6dO5M0KB94zpTqx73TyW0c3lwy8w=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"7f090b9dd89b5429b9c6ec065af9506f605bbe56894a79f5631bcd54f9da2163","subject":{"common_name":["DigiCert SHA2 Secure Server CA"],"country":["US"],"organization":["DigiCert Inc"]},"subject_dn":"C=US, O=DigiCert Inc, CN=DigiCert SHA2 Secure Server CA","subject_key_info":{"fingerprint_sha256":"e6426f344330d0a8eb080bbb7976391d976fc824b5dc16c0d15246d5148ff75c","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"3K5YkE3BxDAVkDVbbjyCFfUsXL3j2/9xQ/pkJYDU7hiiTfBm0ApzbhGYNhdkrzed/fpBhK/Hr4z+GnNNzzOXkKKWh1ODK7mmdUgtHVY3e9oxMhrXrKsG9KpdS7dHRt0qk8OQLnmAgO8TBGoUO7Wbkr7CB2VO/Nr8/3qu3Fx+VTEM6DkHpNe+L9MLatKx31/+V3RTOzWA3a6ORJiznw7T2uDX9Gspq0SnS1iEbZJLgcPac4sSl0iQBEV1Gt03MZeS6M1UDTvkwT85Xi6481x+EI6GQQCNRWZHsKFlzqCqKQlO85fr6C6rD3KnMA76x/T9FHfDpFsoV8Kz+YL9t0VYmw=="}},"tbs_fingerprint":"10d93c9864a521f3065cc3a522509c2afabb01581cad9c6d8e89fdd75f9ea747","tbs_noct_fingerprint":"10d93c9864a521f3065cc3a522509c2afabb01581cad9c6d8e89fdd75f9ea747","validation_level":"unknown","validity":{"end":"2023-03-08T12:00:00Z","length":"315532800","start":"2013-03-08T12:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":true,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"160","lifetime_hint":"7300"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T11:19:13Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T06:17:39Z"},"get":{"body":"\nInvalid URL\n\n

            Invalid URL

            \nThe requested URL \"[no URL]\", is invalid.

            \nReference #9.9c3c95c9.1594647306.651d22c\n\n","body_sha256":"ba22762d265f2eb026e0cd5f4acaafcbfc3199f2466455800030ab4d0be7d861","headers":{"connection":"close","content_length":"208","content_type":"text/html","expires":"Mon, 13 Jul 2020 13:35:06 GMT","server":"AkamaiGHost","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 13:35:06 GMT"},{"key":"mime_version","value":"1.0"}]},"metadata":{"description":"Akamai Global Host","manufacturer":"Akamai","product":"Global Host"},"status_code":"400","status_line":"400 Bad Request","title":"Invalid URL","timestamp":"2020-07-13T13:35:06Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T03:02:21Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T07:55:23Z"},"dhe":{"support":false,"timestamp":"2020-07-12T02:49:47Z"}}},"ipint":"390860851","updated_at":"2020-07-14T06:17:39Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"Megacable Comunicaciones de Mexico, S.A. de C.V.","routed_prefix":"23.76.16.0/20","asn":"14178","country_code":"MX","name":"Megacable Comunicaciones de Mexico, S.A. de C.V.","path":["7018","1239","14178"]},"protocols":["443/https","80/http"],"ipinteger":"856706071"} +{"address":"49.150.118.75","ipint":"831944267","updated_at":"2020-07-15T03:15:57Z","p7547":{"cwmp":{"get":{"headers":{"connection":"Keep-Alive","content_length":"0","www_authenticate":"Digest realm=\"HuaweiHomeGateway\",nonce=\"d8f405a1d21877550afb4ce87a4ff0f0\", qop=\"auth\", algorithm=\"MD5\""},"status_code":"401","status_line":"401 Unauthorized","timestamp":"2020-07-15T03:15:57Z"}}},"ip":"49.150.118.75","ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"1266062897","version":"0","tags":["cwmp"]} +{"address":"150.66.51.246","p3389":{"rdp":{"banner":{"connect_response":{"connect_id":"0","domain_parameters":{"domain_protocol_ver":"2","max_channel_ids":"34","max_mcspdu_size":"65528","max_provider_height":"1","max_token_ids":"0","max_user_id_channels":"3","min_octets_per_second":"0","tcs_per_mcs":"1"}},"metadata":{"description":"Remote Desktop 5.0","product":"Remote Desktop","version":"5.0"},"protocol_supported_flags":{"dynvc_graphics_pipeline":true,"extended_client_data_supported":true,"neg_resp_reserved":true,"restricted_admin_mode":true},"selected_security_protocol":{"raw_value":"1","tls":true},"supported":true,"tls":{"certificate":{"parsed":{"extensions":{"extended_key_usage":{"server_auth":true},"key_usage":{"data_encipherment":true,"key_encipherment":true,"value":"12"}},"fingerprint_md5":"c6d3edce104e97e5e30b6de001866130","fingerprint_sha1":"a7e6ca776ed5db6ec67f4bd991f33bed73e4b939","fingerprint_sha256":"0b9bb66c85dcb5ce0bb3680d949e1baf8d5362a9bb7ec457d960b04d57985f4a","issuer":{"common_name":["WIN-SPTKC4EGA9R"]},"issuer_dn":"CN=WIN-SPTKC4EGA9R","redacted":false,"serial_number":"100926640095158447137307669821694829184","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"gxvsUj2FWtO2NQKPH/SyV68VIJEtwSpchhl+6gpXOVH4/j5L50yYfyaohGjM7TAnKQ2Gnw5HKlNOeJiSQVfeHaQGOzrAjk4aYVVYthvGTUJ1QO1CReOJEzjI4BASiWGSqy6VjAV8ne8VKFyBYNJ/gcIItq7wunaRzCwEsPEX7t2ZZvpVDN+FqUendWqyqSWPZ+jFUICTm9Y6eJIJ2KvXQ8A4M2kVXu7nW386eDm2tdMWtEexcPF6RgEgmlGAM+qlvUMzRbMoKSb/QbWzneASr/pqZAHSSRgEZEdht7PCa+X85RDqpEdO+Ud+T8nmsqfIvXvdChAVu8nwL5Dr6CHZSQ=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"30c4690bab529978640a3c87f95655640119b17d2919bd81e97539d9e6768b54","subject":{"common_name":["WIN-SPTKC4EGA9R"]},"subject_dn":"CN=WIN-SPTKC4EGA9R","subject_key_info":{"fingerprint_sha256":"45beff8565dd7fa8959cb15283c3f2b3d89f10c47508b9382e8a17b451abf57f","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"q1Cs9fnyIwArvwWicfr26cse3CM9pVG9CW/EBJ5GeUF5Vbvn19PhALpHeA+sW8ofMBpVuO2V6+A7v2zVj15ZrLezIEdpZZi2jVdQnR38XdYXyXSNfg4rULbmb8xP1SzOmCxaP6cmOPKd3zQSw10uxuPkgdK39AqrDZwwaslFW3+EQq4yuvJ5dOVTZinJ1FfD3NHLEbPT2OhXsk1i+rL/RQ0z7ILeKVm4Dzd4B/vFlGZWs7x6Sr1+Z+oQusJH0eR83hlmm7ee/UAqAUnBCCHF1UOIMXGoHfgyfQrX5aU2FqYnBHtmKU2dppsuXvM5WJXszewafzcDIS0disYaMDeVSw=="}},"tbs_fingerprint":"ad0b5a6bc186875e16f155df1316e8010f5d59a151db2cfc19b66acbfb76b328","tbs_noct_fingerprint":"ad0b5a6bc186875e16f155df1316e8010f5d59a151db2cfc19b66acbfb76b328","validation_level":"unknown","validity":{"end":"2020-09-06T20:38:58Z","length":"15811200","start":"2020-03-07T20:38:58Z"},"version":"3"}},"cipher_suite":{"id":"0xC014","name":"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha1","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: failed to load system roots and no roots provided","browser_trusted":false},"version":"TLSv1.2"},"version":{"major":"5","minor":"0","raw_value":"524292"},"timestamp":"2020-07-10T03:59:03Z"}}},"ipint":"2520921078","updated_at":"2020-07-10T03:59:03Z","ip":"150.66.51.246","location":{"country_code":"JP","continent":"Asia","timezone":"Asia/Tokyo","latitude":35.69,"longitude":139.69,"registered_country":"Japan","registered_country_code":"JP","country":"Japan"},"autonomous_system":{"description":"OPTAGE OPTAGE Inc.","routed_prefix":"150.66.0.0/16","asn":"17511","country_code":"JP","name":"OPTAGE OPTAGE Inc.","path":["11164","2497","17511","17511"]},"ports":["3389"],"protocols":["3389/rdp"],"ipinteger":"-164412778","version":"0","tags":["rdp","remote_display"]} +{"address":"77.57.86.205","ipint":"1295603405","updated_at":"2020-07-15T09:26:53Z","p7547":{"cwmp":{"get":{"headers":{"content_length":"0","server":"gSoap 2.8.30 / Dimark client v.4.8.2 [9472]"},"status_code":"404","status_line":"404 Not Found","timestamp":"2020-07-15T09:26:53Z"}}},"ip":"77.57.86.205","location":{"country_code":"CH","continent":"Europe","city":"Lucerne","postal_code":"6005","timezone":"Europe/Zurich","province":"Lucerne","latitude":47.0511,"longitude":8.3056,"registered_country":"Switzerland","registered_country_code":"CH","country":"Switzerland"},"autonomous_system":{"description":"LIBERTYGLOBAL Liberty Global (formerly UPC Broadband Holding, aka AORTA)","routed_prefix":"77.56.0.0/15","asn":"6830","country_code":"AT","name":"LIBERTYGLOBAL Liberty Global (formerly UPC Broadband Holding, aka AORTA)","path":["11164","2603","6830"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-849987251","version":"0","tags":["cwmp"]} +{"metadata":{"os":"Ubuntu,Ubuntu"},"address":"54.159.12.29","ip":"54.159.12.29","p80":{"http":{"get":{"body":"welcome to 'Ganja Farmer'","body_sha256":"4109449a9294421b59389146dc3f1d0cb4bc8fa16a6a2bb37df2da05b8b0b63e","headers":{"connection":"keep-alive","content_type":"text/html; charset=utf-8","server":"nginx/1.4.6 (Ubuntu)","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 05:20:09 GMT"}],"x_frame_options":"SAMEORIGIN"},"metadata":{"description":"nginx 1.4.6","product":"nginx","version":"1.4.6"},"status_code":"200","status_line":"200 OK","timestamp":"2020-07-07T05:20:09Z"}}},"ports":["80","22"],"version":"0","tags":["http","ssh"],"p22":{"ssh":{"v2":{"banner":{"comment":"Ubuntu-2ubuntu2","raw":"SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2","software":"OpenSSH_6.6.1p1","version":"2.0"},"key_exchange":{"curve25519_sha256_params":{"server_public":"PhZMA3BOtlW2aXMbvPoeuQlJgGH27D57hqYqplEJYjs="}},"metadata":{"description":"OpenSSH 6.6.1p1","product":"OpenSSH","version":"6.6.1p1"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"curve25519-sha256@libssh.org","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"bEHuN88uIH+tdoZNOfyKCmLb+yJUoDoCticEkfrn3mg=","y":"26U55S/YOFOfrWpFIEZ7apLnwCubYaQ/uy4fHdmiipU="},"fingerprint_sha256":"1f5f6337770b720d3c131b01b75d431ec9f2da018b51552f1b963add4bc4ec6b","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["aes128-ctr","aes192-ctr","aes256-ctr","arcfour256","arcfour128","aes128-gcm@openssh.com","aes256-gcm@openssh.com","chacha20-poly1305@openssh.com","aes128-cbc","3des-cbc","blowfish-cbc","cast128-cbc","aes192-cbc","aes256-cbc","arcfour","rijndael-cbc@lysator.liu.se"],"compressions":["none","zlib@openssh.com"],"macs":["hmac-md5-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-ripemd160-etm@openssh.com","hmac-sha1-96-etm@openssh.com","hmac-md5-96-etm@openssh.com","hmac-md5","hmac-sha1","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-ripemd160","hmac-ripemd160@openssh.com","hmac-sha1-96","hmac-md5-96"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","ssh-dss","ecdsa-sha2-nistp256"],"kex_algorithms":["curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group-exchange-sha1","diffie-hellman-group14-sha1","diffie-hellman-group1-sha1"],"server_to_client":{"ciphers":["aes128-ctr","aes192-ctr","aes256-ctr","arcfour256","arcfour128","aes128-gcm@openssh.com","aes256-gcm@openssh.com","chacha20-poly1305@openssh.com","aes128-cbc","3des-cbc","blowfish-cbc","cast128-cbc","aes192-cbc","aes256-cbc","arcfour","rijndael-cbc@lysator.liu.se"],"compressions":["none","zlib@openssh.com"],"macs":["hmac-md5-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-ripemd160-etm@openssh.com","hmac-sha1-96-etm@openssh.com","hmac-md5-96-etm@openssh.com","hmac-md5","hmac-sha1","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-ripemd160","hmac-ripemd160@openssh.com","hmac-sha1-96","hmac-md5-96"]}},"timestamp":"2020-07-14T16:10:17Z"}}},"ipint":"916392989","updated_at":"2020-07-14T16:10:17Z","location":{"country_code":"US","continent":"North America","city":"Ashburn","postal_code":"20149","timezone":"America/New_York","province":"Virginia","latitude":39.0481,"longitude":-77.4728,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AMAZON-AES","routed_prefix":"54.156.0.0/14","asn":"14618","country_code":"US","name":"AMAZON-AES","path":["16509","14618"]},"protocols":["22/ssh","80/http"],"ipinteger":"487366454"} +{"address":"46.41.163.123","ip":"46.41.163.123","p80":{"http":{"get":{"body":"\n\n\n\nhome.pl: Nr 1 w Polsce. Domeny, Hosting, Serwery WWW, Strony, eSklep, Office 365\n\n\n\n\n\n\n\n\n

            REKLAMA

            \n\n\n

            Obsługę techniczną domeny 46.41.163.123 zapewnia home.pl - największy w Polsce dostawca usług internetowych.

            \n

            Copyright © 1997-2020 home.pl. All Rights Reserved.
            \nKontakt: https://home.pl/kontakt, 504 502 500
            \n

            \n\n","body_sha256":"5faf1851691ed95b732b344f7a2e486d5512154d74270ccc60af88d1a1959b4d","headers":{"connection":"keep-alive","content_type":"text/html","server":"IdeaWebServer/0.83.415","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 13:12:14 GMT"}]},"metadata":{"description":"IdeaWebServer 0.83.415","product":"IdeaWebServer","version":"0.83.415"},"status_code":"200","status_line":"200 OK","title":"home.pl: Nr 1 w Polsce. Domeny, Hosting, Serwery WWW, Strony, eSklep, Office 365","timestamp":"2020-07-07T13:12:13Z"}}},"ports":["80","465","993","995","21","5432","25","3306","443","587","110","143"],"p5432":{"postgres":{"banner":{"is_ssl":false,"protocol_error":{"code":"0A000","file":"postmaster.c","line":"2000","message":"unsupported frontend protocol 255.255: server supports 1.0 to 3.0","routine":"ProcessStartupPacket","severity":"FATAL"},"startup_error":{"code":"28000","file":"postmaster.c","line":"2114","message":"no PostgreSQL user name specified in startup packet","routine":"ProcessStartupPacket","severity":"FATAL"},"supported":true,"supported_versions":"FATAL: unsupported frontend protocol 0.0: server supports 1.0 to 3.0","timestamp":"2020-07-15T06:03:40Z"}}},"version":"0","p21":{"ftp":{"banner":{"banner":"220-Idea FTP Server 0.83.415 (localhost) [46.41.163.123]\r\n220 Ready","timestamp":"2020-07-13T22:14:39Z"}}},"tags":["database","ftp","http","https","imap","imaps","mysql","pop3","pop3s","postgres","smtp"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/hsha2.cer"],"ocsp_urls":["http://h.ocsp-certum.com"]},"authority_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331","basic_constraints":{"is_ca":false},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["https://www.certum.pl/CPS"],"id":"1.2.616.1.113527.2.5.1.9.6.3"}],"crl_distribution_points":["http://crl.certum.pl/hsha2.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"VYHUwhaQNgFK6gubVzxT8MDkOHhwJQgXL6OqHQcT0ww=","signature":"BAMARzBFAiBQ0vZh8Di0l661OwIeMgeO7UHINJUEYsLYcrccs81JYQIhANOGn6Con9y9dJgOhsOUWCtblYoszdMJfDc9bYGoRbzo","timestamp":"1593680006","version":"0"},{"log_id":"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=","signature":"BAMARjBEAiBuaINhHRR+Pr3Ruowb1CZ2Wry5TU1pXEqOMLluo4MkhwIgOSUt2bwL2mK+9FpsvMq3AQCrVPime8dCtZZvGfap99Y=","timestamp":"1593680006","version":"0"},{"log_id":"RqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUc=","signature":"BAMARTBDAh8dHZ1hkFE1AuHTzx2uWMQPO5ZTAiEXrFKTv2drZaBhAiBppXEoGMvxSpwCCJcMsr6koWM8di1gnr3CrmVTDmufCQ==","timestamp":"1593680006","version":"0"}],"subject_alt_name":{"dns_names":["*.home.pl","home.pl"]},"subject_key_id":"1d2b6067d030efd1e19c624a8c6c8d2e67884dfc"},"fingerprint_md5":"906e2a6bc0851dba0d56b9053a8acb95","fingerprint_sha1":"5c5e30022dfca023b7a981e5a11de1c7c40ab192","fingerprint_sha256":"94284e225e978d319e48e36ba23acf8a6d9d8546e0b666eab057e51ab7efb7b4","issuer":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"issuer_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","names":["*.home.pl","home.pl"],"redacted":false,"serial_number":"66655524829876848574888115382717555914","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"JsRqnU6FAyGqurjfegGcNESKS18eVIvUzuvWcbDU9uPBf6moRWNXdaOA4+d328iNTf2MJjVIn9/PHkyRU3k5jI2SozEpXPFHYBOrM+nnDAZxGHqaw6KYnS9U0J8nwqQMVRc7DT53rnYSMvW3xn/h9s4rX/oD3VBsSp3QZf0WmstOrNIB+/T7yhy8Tm3Yh+KhjFPu40FE6T441cpo8tGL1zDxHJa1YP9Q1Xj5GuGmsjsJaoB/ES8Yt84pgFFe/JRkv9yTOlVeWl4i/4iPpHgyy2UdJWfOGI0ZeD9HcKgq+6sDGziIW2ZmsF6OTMEcDkEuu/S3V2a/Ot+N94mVqGzW8A=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"96d06ee596bff962a5749486e4d68779e3be1168478cb9545f1c081f0f53ffb7","subject":{"common_name":["*.home.pl"]},"subject_dn":"CN=*.home.pl","subject_key_info":{"fingerprint_sha256":"1e60b422d7fdae9af45eef4a64e2ff9105f718eed87506d502940d0dcd53c648","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sLoUSQKsrAOPAZlsSZU4kHARGPL9ovmz80UoouxoQ2IFEsab6RnHOR94jMsXmtm7SgOa/xRTY0GYKs2/4DbHwW02YsQiQH5g1RB2+VwyL2IsGJs5PIHmUGIzXWiXTKWYaxqlbNYwi777Ex+Tnqo2KxXKSAfh4ccomwC4+qilpmkjrIdVrWMG5edVW63vuM2WvhG/asnQ5Oj2uPjrvoGieZjAaIg7P0o12rWp/2acLiATgKBsoJf21J+ujMT/cyrVMthHga2U0B930ASBDVx396HBC3fbYUw11XbjsD5YVjERTXUkNDOFO0+CT1ijD64VfCgOSNqdDpZFXWSzjHeAlQ=="}},"tbs_fingerprint":"aa2417aa1062c963a507515e56752290c719100896dad376fe7c449845162bab","tbs_noct_fingerprint":"f69cd48d9457a42ca7ee63070427ef7dceef9a046579e737d433165bef68dd1b","validation_level":"DV","validity":{"end":"2022-07-02T08:53:25Z","length":"63072000","start":"2020-07-02T08:53:25Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/gscasha2.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32","basic_constraints":{"is_ca":true,"max_path_len":"0"},"crl_distribution_points":["http://crl.certum.pl/gscasha2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331"},"fingerprint_md5":"e33a0298518b6612d3dd778363f0c951","fingerprint_sha1":"d29845169071fc79fa782962003f93ac8f977515","fingerprint_sha256":"a95f23b52af10895886fb65323d29a9876ea7d396f805e4ca280d561c26e3dad","issuer":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","redacted":false,"serial_number":"255020787367701009965542807920061370","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"QRrqx1enIkk1aojYJbYkIpYJWXyXAaPTKTGAyBVJz72Si43jGGIG8kgO+3BMnr5mtOdzZpXjVq/W7q10Km2fD/Z+IiYd59tBPgOtOPG7B/tJjGNl8nNQBsuKXJSFDUZTzbWKQB9o53b1KGT/uEcFI4hixLV9Y4TkcOK2W+o/lF1VkwbLI+2PvBgafTF5fUoSKW91WwyEZ8b9inMnS0UQG+KT95sNKx1i5gGd1GNQI+mnnqFoebCmW5hzqY3pcGhsoqI0pnYNBmbn2IQXmMUDV6XYVsQ0SMwE/PdMKqe+z1ykxTGWktEGmc+5OKPyv1RiVVlpGNcbi+GZfFrxHFVhCg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"248bae0f6f272561324195d3bb37562cea2366d88e6d08cdcfd5dff6cd5f8965","subject":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"subject_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","subject_key_info":{"fingerprint_sha256":"e4f2788c1d6c8c9e64c776b40ecda7a093dcd3b64e6ffcb5bd1d6d375b7916c4","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sOjOrZa141PYKzI7kJj2sI3id5YbKP7bpdRhLmigz63MWUytt02Tcn5ojs/wBvb2qVK49GCkcyL74Cil5o5iyLC5Ulmqc3ZbU8LqG59v2ZUy/eZzFgsKa4SJjiT03svhJQwvE+tGVvuSwP+iBoSAwRgd/lAnIR2nbPhDLa4Lgr/7OnIqmwF6KGTk0aeipMvguYo1lbIa8lfCrcg26F3iEKl0yAS1fUyjZNhrxtxqajTZWEcdfzvlOPEL+XecQpc1x10s3dW+Wdga7vG8jCYIHQ/1UMgHncyh+qU36UzNzHxd6UJJJaIkoUpcK/huy+ok5Me56OaLrINkXyJwzzN1Ww=="}},"tbs_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","tbs_noct_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","validation_level":"unknown","validity":{"end":"2026-06-06T08:01:29Z","length":"315360000","start":"2016-06-08T08:01:29Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ctnca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["http://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ctnca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32"},"fingerprint_md5":"4fc8a7335425177bc1077fa16b4c21d7","fingerprint_sha1":"96002650cc3818adb7bc358b15af098a0bd0aeb6","fingerprint_sha256":"9e852c59dfc6fd6abd4e17ea80b5f4e56fc04192d107258d54da8a92528670d6","issuer":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","redacted":false,"serial_number":"276871114946875026480589573694201475398","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"0YQvslR3xfyBXDTSm5MV9WlbAmdH2trfjMchXLOyjqltXxqTjsnLoIThZ2zPpc+GN4LeUWjhSU5u2FVGWd++dbObb/J4V3l360SKUDewrvjXouOex5Q8RFCLT5ZGJw23Q3rP/ek9fXCAndU5iD3pGEV4srj1uFoMer8pJpPdcS5CdMu+E81bVKH1ReOOql73mveczac2AlTIPgDl92WcsvV30k+oOLpvnMPyHb99XW5yXQczDoBx97sNmDImUIA6rzURPsALPj0xRCCh5gXP7dZ90ob4PXuvDPuWUTPGxFhqoC6n63k4ArAkHL/TA2MPUxVG0te0XROjbYj37M05Mg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"065723223cd5872f3812ee7d9110b6ab8d90ff39faa9178a4609aab8a54aff08","subject":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","subject_key_info":{"fingerprint_sha256":"33b683fc79a0cbb085f2c4dd76be6ca3531958406e35f2c87467b58efcb45fa1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"x4by13gOJMgVWA69dibrI1vvxzz1qQZlp0mQvYGnWzVwg/xpR6xq7kVqyp9GAWrG6J14uRS0aJ+9e2ggg7dvu1EZyceJixrd1+98h9yPk/gjrskxTriyHevI2FeL3wZtTfzdfyqIRq/Pke3k+H+GoH11UPoA2U96Rk8sKnPSCHeLh2hY1vpq+b1X7u1oy/ANtIzmsL5aldiuP6kq4z2bKh5c3+Oix4G0BCtRI0z7Ba37wEMbxqR4hCABbEvtXdsTyBCVSMb6vishm1v9EiSI+/0n2KPiLbydmuPxtiX6DxfcEwgtDfFOSPyl8Y2GFwXCBPaUNek9uE/nazHzxtpmLQ=="}},"tbs_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","tbs_noct_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","validation_level":"unknown","validity":{"end":"2027-06-09T10:46:39Z","length":"402101199","start":"2014-09-11T12:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["http://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7"},"fingerprint_md5":"6b83991274596d9efe48825e73b70440","fingerprint_sha1":"929badf26081523490edc91154b380a4776e2185","fingerprint_sha256":"949424dc2ccaab5e9e80d66e0e3f7deeb3201c607d4315ef4c6f2d93a917279d","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"196157293353240526643865071022521293608","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"jeb9QGajTJynq6HahN0cMAfm28ct7IOhVuQdPCahpQkr6H1ivrJ1lN0I8n8oQeSAZwJOio/DNdDVqSco6tL0qwaGQ66M4/mIfeDbvUKBgAISdbLoF3GrIZUxRkINiBA502/sL0LqQFNiv+vKeJ6rotUuBeozq+nWl5RCXgTtLO1qnHqVfQUqBX8IXWatYdR2rHWWl3NjvRpBWSmlXiKDw4tZ+pqi9r0wv3IdHJmGnPKFPB33JpYvLvkCsbWpUOg4+psKXrQEwM5OOSzKC1ti8E1YUDSZ5pos0pDXCYHWwKpezv7S96G6S9nWho4ZH6YGR0Jy4FYKABx4uY3MmQQ3SQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"ce331549a8e517fcff45c65665cbc1cafaaf1b9b6ed2e415ce56bac651e9dfa3","subject":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","subject_key_info":{"fingerprint_sha256":"aa2630a7b617b04d0a294bab7a8caaa5016e6dbe604837a83a85719fab667eb5","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQ=="}},"tbs_fingerprint":"5cc25d9c8a32ecf2cbbb91ebf70bd956c52039f9f20e8409da6154715236d71d","tbs_noct_fingerprint":"5cc25d9c8a32ecf2cbbb91ebf70bd956c52039f9f20e8409da6154715236d71d","validation_level":"unknown","validity":{"end":"2027-06-10T10:46:39Z","length":"587947142","start":"2008-10-22T12:07:37Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true}},"fingerprint_md5":"2c8f9f661d1890b147269d8e86828ca9","fingerprint_sha1":"6252dc40f71143a22fde9ef7348e064251b18118","fingerprint_sha256":"d8e0febc1db2e38d00940f37d27d41344d993e734b99d5656d9778d4d8143624","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"65568","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"706811a5e9363ee2a1b5f46e333c97bae8e944aa4abf8ae8438456567668a3eb","subject":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"subject_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","subject_key_info":{"fingerprint_sha256":"9736ac3b25d16c45a45418a964578156480a8cc434541ddc5dd59233229868de","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"zrHBLtNPfM0lzhg+T8SMb4Bqc8hbUfib0ty7AFyxoPx1A+6B8IjuI1Lp5hUzjawtCcV2+Ss5gInkl0uQpah4+HNDe6RhsNhYzOFsZn6c8wleVWOE1ajv87EuMGizxDzYrG6NmVqQTjTcNpqPgYhQt22WQgnz15WDDUFLsGpr+PwPfmKfZ8TtJl8QJg8IT/CkVyjOj7jtRfZu7iVdqm45vuSTL9lHoHLr+qZbr8pTP+IOxpZWEW736WapJth/lVPtCoWIuk8ppUKMXrb8hSAAqmgLoRqFAZzERmOCiLYise7+qkZZfs81LNW22l33SDMUVLbr2W/OzYjWqxvaljsdWQ=="}},"tbs_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","tbs_noct_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","validation_level":"unknown","validity":{"end":"2027-06-11T10:46:39Z","length":"788918400","start":"2002-06-11T10:46:39Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"176","lifetime_hint":"600"},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T11:44:34Z"},"heartbleed":{"heartbeat_enabled":true,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T04:50:40Z"},"get":{"body":"\n\n\n\nhome.pl: Nr 1 w Polsce. Domeny, Hosting, Serwery WWW, Strony, eSklep, Office 365\n\n\n\n\n\n\n\n\n

            REKLAMA

            \n\n\n

            Obsługę techniczną domeny 46.41.163.123 zapewnia home.pl - największy w Polsce dostawca usług internetowych.

            \n

            Copyright © 1997-2020 home.pl. All Rights Reserved.
            \nKontakt: https://home.pl/kontakt, 504 502 500
            \n

            \n\n","body_sha256":"5faf1851691ed95b732b344f7a2e486d5512154d74270ccc60af88d1a1959b4d","headers":{"connection":"keep-alive","content_type":"text/html","server":"IdeaWebServer/0.83.437","unknown":[{"key":"date","value":"Wed, 15 Jul 2020 05:07:37 GMT"}]},"metadata":{"description":"IdeaWebServer 0.83.437","product":"IdeaWebServer","version":"0.83.437"},"status_code":"200","status_line":"200 OK","title":"home.pl: Nr 1 w Polsce. Domeny, Hosting, Serwery WWW, Strony, eSklep, Office 365","timestamp":"2020-07-15T05:07:37Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T02:45:03Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T09:33:26Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"oULuyVvWA4nKw83GscUOhXR6MgiUFW34g0dre0hKZ6CeEckVmXNYrTBsFTwvEvO6f4AgPEOyafLq8mkyvzrfTYQOf6JNhwTURjUXxvwGnD2Q+kNC0DMv+IWphF/txrpg4eu3R80a6liPiiap3F1ELLd56drI5zkHZ+VOFvcSVf49oTVFn77rvPdpLC77uPfBinRVihTZQfSSCQYXFkgugfHrcgYRw02TC5wLJJPJc7pOnm1xG8d9wGXHBfYnaPelkuWxxjtZiBV1+LcfXwMZbKqAJehhaAdy6GNwf0gHRQ1+wJPJ9mMMYO2C1RyGEar87t+gD0kJflzzcXagoqlY4w=="}},"support":true,"timestamp":"2020-07-12T06:19:56Z"}}},"p465":{"smtp":{"tls":{"banner":"220 cloudserver3122037.home.pl ESMTP IdeaSmtpServer 0.83.415 ready.","ehlo":"250-cloudserver3122037.home.pl Hello worker-04.sfj.censys-scanner.com [192.35.168.64], pleased to meet you\r\n250-PIPELINING\r\n250-ENHANCEDSTATUSCODES\r\n250-SIZE\r\n250-8BITMIME\r\n250-AUTH PLAIN LOGIN\r\n250-AUTH=PLAIN LOGIN\r\n250 HELP","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/hsha2.cer"],"ocsp_urls":["http://h.ocsp-certum.com"]},"authority_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"1.2.616.1.113527.2.5.1.9.6.3","user_notice":[{"explicit_text":"Usage of this certificate is strictly subjected to the CERTUM Certification Practice Statement (CPS) incorporated by reference herein and in the repository at https://www.certum.pl/repository.","notice_reference":[{"notice_numbers":["2"],"organization":"Asseco Data Systems S.A."}]}]}],"crl_distribution_points":["http://crl.certum.pl/hsha2.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"subject_alt_name":{"dns_names":["*.online.pro","online.pro"]},"subject_key_id":"fdcb46d02a80306793fb95108611e4dc8cf1862b"},"fingerprint_md5":"c7343345d5c57f09e7c4d03b9e1b4b0a","fingerprint_sha1":"9ab2ae378d5d5d2c675d49486bb79413c5d2132d","fingerprint_sha256":"92eec3e4ce432e94d8d32381d3981513aa0f1f525390df6e10774b497f795263","issuer":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"issuer_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","names":["*.online.pro","online.pro"],"redacted":false,"serial_number":"158964248105662116706893520062302579650","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"D13JLfl+DmmuaGqIk7M9+2ZGn8GJp6Xr+1Lsr4OpshVALpIetHWodf3AU4TW4Mcofe1Eac0WT/7Il/+8WfmBBlo1EV0LcqfPY8XoNfiFUZ1qm1Tfi5Mr8Yn9blPQyEw0OVmpu6sfrYEFTHj+9yKP4UyKg6bIK4CHAsjAx5EAPr/qsXMxfDsbAAXok/ioDnM0q6iyo45lVOjPsl+uuQrO+Rci2DP29w0bqBPELMONelUQAG24+kFoKIRWQXPs7TJ+BdV4YkvtAjoK87cjiPDIY8SeJYczSOQwEGegb9aFDu0WPLy2qI/Ik1vD6yvs9LE//aLUsicY84Z/hWG1syUmBQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b6b316cba73a3f1334a1fe2d31e8db8fdd14b6f865e5afbad8da39fc3c9db8d7","subject":{"common_name":["*.online.pro"],"country":["PL"]},"subject_dn":"C=PL, CN=*.online.pro","subject_key_info":{"fingerprint_sha256":"cc0341bc46fb2aaa6b75a6142eb830e6e3af3fdf3d3e98317012cdbccd6e3778","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"oDi/0tcuDB1yWEW3X9GUP6SLohvXQjuysEHd1hi7BLrn/Svpc5ggzN+xTcVgceWsD70wA6IcwjOH+ubmkHRk0+pGCy/efO6Oq8GoNBAHu8kMJuezY9BxRqP+iu+3cv4ouvI6brAUgT43cbKW1g47HbyqtNdabsf1Y0RKIdTHyQzglBzsx+EicePiLosOvUBWsuGcoC6dMlfQmwKViJY3x4p6EiRNm8wyw6MxbtxE7UwxXgvcQOk9lGQ0celHQw5SdEA+F8O2EIIglZNsBFIzO441bB1Q3Hhlu8LIAs+OaMMd43L9osKH0RE+Hx9mDtnI8pU0Wf9E0a+SC2rMkBowBQ=="}},"tbs_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","tbs_noct_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGwA=="}],"validation_level":"unknown","validity":{"end":"2019-10-24T10:58:31Z","length":"94608000","start":"2016-10-24T10:58:31Z"},"version":"3"}},"chain":[{"fingerprints":{"md5":"e33a0298518b6612d3dd778363f0c951","sha1":"d29845169071fc79fa782962003f93ac8f977515","sha256":"a95f23b52af10895886fb65323d29a9876ea7d396f805e4ca280d561c26e3dad","spki_subject":"248bae0f6f272561324195d3bb37562cea2366d88e6d08cdcfd5dff6cd5f8965","tbs":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","tbs_noct":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393"}},{"fingerprints":{"md5":"4fc8a7335425177bc1077fa16b4c21d7","sha1":"96002650cc3818adb7bc358b15af098a0bd0aeb6","sha256":"9e852c59dfc6fd6abd4e17ea80b5f4e56fc04192d107258d54da8a92528670d6","spki_subject":"065723223cd5872f3812ee7d9110b6ab8d90ff39faa9178a4609aab8a54aff08","tbs":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","tbs_noct":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34"}},{"fingerprints":{"md5":"6b64fefc8e8a0c01507f2df98cf8bc8b","sha1":"794e7e547fcc2d61e80c5f500261865e91695191","sha256":"2d87ff20fe8ad2305dfb6f3992867ed2bf4fe3e1346212c4345991aac02266e9","spki_subject":"ce331549a8e517fcff45c65665cbc1cafaaf1b9b6ed2e415ce56bac651e9dfa3","tbs":"241cb0fac2b1d3a95ea92c6e9de0f591db6d1569156a45ff0325ea03d27f3f71","tbs_noct":"3a69d0701a214f43e24d02241642499a5a52bf83302bb1c72c3710a50fd99123"}},{"fingerprints":{"md5":"2c8f9f661d1890b147269d8e86828ca9","sha1":"6252dc40f71143a22fde9ef7348e064251b18118","sha256":"d8e0febc1db2e38d00940f37d27d41344d993e734b99d5656d9778d4d8143624","spki_subject":"706811a5e9363ee2a1b5f46e333c97bae8e944aa4abf8ae8438456567668a3eb","tbs":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","tbs_noct":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: certificate has expired or is not yet valid","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-13T21:49:43Z"}}},"p993":{"imaps":{"tls":{"banner":"* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN] Dovecot ready.","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/hsha2.cer"],"ocsp_urls":["http://h.ocsp-certum.com"]},"authority_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"1.2.616.1.113527.2.5.1.9.6.3","user_notice":[{"explicit_text":"Usage of this certificate is strictly subjected to the CERTUM Certification Practice Statement (CPS) incorporated by reference herein and in the repository at https://www.certum.pl/repository.","notice_reference":[{"notice_numbers":["2"],"organization":"Asseco Data Systems S.A."}]}]}],"crl_distribution_points":["http://crl.certum.pl/hsha2.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"subject_alt_name":{"dns_names":["*.online.pro","online.pro"]},"subject_key_id":"fdcb46d02a80306793fb95108611e4dc8cf1862b"},"fingerprint_md5":"c7343345d5c57f09e7c4d03b9e1b4b0a","fingerprint_sha1":"9ab2ae378d5d5d2c675d49486bb79413c5d2132d","fingerprint_sha256":"92eec3e4ce432e94d8d32381d3981513aa0f1f525390df6e10774b497f795263","issuer":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"issuer_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","names":["*.online.pro","online.pro"],"redacted":false,"serial_number":"158964248105662116706893520062302579650","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"D13JLfl+DmmuaGqIk7M9+2ZGn8GJp6Xr+1Lsr4OpshVALpIetHWodf3AU4TW4Mcofe1Eac0WT/7Il/+8WfmBBlo1EV0LcqfPY8XoNfiFUZ1qm1Tfi5Mr8Yn9blPQyEw0OVmpu6sfrYEFTHj+9yKP4UyKg6bIK4CHAsjAx5EAPr/qsXMxfDsbAAXok/ioDnM0q6iyo45lVOjPsl+uuQrO+Rci2DP29w0bqBPELMONelUQAG24+kFoKIRWQXPs7TJ+BdV4YkvtAjoK87cjiPDIY8SeJYczSOQwEGegb9aFDu0WPLy2qI/Ik1vD6yvs9LE//aLUsicY84Z/hWG1syUmBQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b6b316cba73a3f1334a1fe2d31e8db8fdd14b6f865e5afbad8da39fc3c9db8d7","subject":{"common_name":["*.online.pro"],"country":["PL"]},"subject_dn":"C=PL, CN=*.online.pro","subject_key_info":{"fingerprint_sha256":"cc0341bc46fb2aaa6b75a6142eb830e6e3af3fdf3d3e98317012cdbccd6e3778","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"oDi/0tcuDB1yWEW3X9GUP6SLohvXQjuysEHd1hi7BLrn/Svpc5ggzN+xTcVgceWsD70wA6IcwjOH+ubmkHRk0+pGCy/efO6Oq8GoNBAHu8kMJuezY9BxRqP+iu+3cv4ouvI6brAUgT43cbKW1g47HbyqtNdabsf1Y0RKIdTHyQzglBzsx+EicePiLosOvUBWsuGcoC6dMlfQmwKViJY3x4p6EiRNm8wyw6MxbtxE7UwxXgvcQOk9lGQ0celHQw5SdEA+F8O2EIIglZNsBFIzO441bB1Q3Hhlu8LIAs+OaMMd43L9osKH0RE+Hx9mDtnI8pU0Wf9E0a+SC2rMkBowBQ=="}},"tbs_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","tbs_noct_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGwA=="}],"validation_level":"unknown","validity":{"end":"2019-10-24T10:58:31Z","length":"94608000","start":"2016-10-24T10:58:31Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/gscasha2.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32","basic_constraints":{"is_ca":true,"max_path_len":"0"},"crl_distribution_points":["http://crl.certum.pl/gscasha2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331"},"fingerprint_md5":"e33a0298518b6612d3dd778363f0c951","fingerprint_sha1":"d29845169071fc79fa782962003f93ac8f977515","fingerprint_sha256":"a95f23b52af10895886fb65323d29a9876ea7d396f805e4ca280d561c26e3dad","issuer":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","redacted":false,"serial_number":"255020787367701009965542807920061370","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"QRrqx1enIkk1aojYJbYkIpYJWXyXAaPTKTGAyBVJz72Si43jGGIG8kgO+3BMnr5mtOdzZpXjVq/W7q10Km2fD/Z+IiYd59tBPgOtOPG7B/tJjGNl8nNQBsuKXJSFDUZTzbWKQB9o53b1KGT/uEcFI4hixLV9Y4TkcOK2W+o/lF1VkwbLI+2PvBgafTF5fUoSKW91WwyEZ8b9inMnS0UQG+KT95sNKx1i5gGd1GNQI+mnnqFoebCmW5hzqY3pcGhsoqI0pnYNBmbn2IQXmMUDV6XYVsQ0SMwE/PdMKqe+z1ykxTGWktEGmc+5OKPyv1RiVVlpGNcbi+GZfFrxHFVhCg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"248bae0f6f272561324195d3bb37562cea2366d88e6d08cdcfd5dff6cd5f8965","subject":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"subject_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","subject_key_info":{"fingerprint_sha256":"e4f2788c1d6c8c9e64c776b40ecda7a093dcd3b64e6ffcb5bd1d6d375b7916c4","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sOjOrZa141PYKzI7kJj2sI3id5YbKP7bpdRhLmigz63MWUytt02Tcn5ojs/wBvb2qVK49GCkcyL74Cil5o5iyLC5Ulmqc3ZbU8LqG59v2ZUy/eZzFgsKa4SJjiT03svhJQwvE+tGVvuSwP+iBoSAwRgd/lAnIR2nbPhDLa4Lgr/7OnIqmwF6KGTk0aeipMvguYo1lbIa8lfCrcg26F3iEKl0yAS1fUyjZNhrxtxqajTZWEcdfzvlOPEL+XecQpc1x10s3dW+Wdga7vG8jCYIHQ/1UMgHncyh+qU36UzNzHxd6UJJJaIkoUpcK/huy+ok5Me56OaLrINkXyJwzzN1Ww=="}},"tbs_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","tbs_noct_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","validation_level":"unknown","validity":{"end":"2026-06-06T08:01:29Z","length":"315360000","start":"2016-06-08T08:01:29Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ctnca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["http://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ctnca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32"},"fingerprint_md5":"4fc8a7335425177bc1077fa16b4c21d7","fingerprint_sha1":"96002650cc3818adb7bc358b15af098a0bd0aeb6","fingerprint_sha256":"9e852c59dfc6fd6abd4e17ea80b5f4e56fc04192d107258d54da8a92528670d6","issuer":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","redacted":false,"serial_number":"276871114946875026480589573694201475398","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"0YQvslR3xfyBXDTSm5MV9WlbAmdH2trfjMchXLOyjqltXxqTjsnLoIThZ2zPpc+GN4LeUWjhSU5u2FVGWd++dbObb/J4V3l360SKUDewrvjXouOex5Q8RFCLT5ZGJw23Q3rP/ek9fXCAndU5iD3pGEV4srj1uFoMer8pJpPdcS5CdMu+E81bVKH1ReOOql73mveczac2AlTIPgDl92WcsvV30k+oOLpvnMPyHb99XW5yXQczDoBx97sNmDImUIA6rzURPsALPj0xRCCh5gXP7dZ90ob4PXuvDPuWUTPGxFhqoC6n63k4ArAkHL/TA2MPUxVG0te0XROjbYj37M05Mg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"065723223cd5872f3812ee7d9110b6ab8d90ff39faa9178a4609aab8a54aff08","subject":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","subject_key_info":{"fingerprint_sha256":"33b683fc79a0cbb085f2c4dd76be6ca3531958406e35f2c87467b58efcb45fa1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"x4by13gOJMgVWA69dibrI1vvxzz1qQZlp0mQvYGnWzVwg/xpR6xq7kVqyp9GAWrG6J14uRS0aJ+9e2ggg7dvu1EZyceJixrd1+98h9yPk/gjrskxTriyHevI2FeL3wZtTfzdfyqIRq/Pke3k+H+GoH11UPoA2U96Rk8sKnPSCHeLh2hY1vpq+b1X7u1oy/ANtIzmsL5aldiuP6kq4z2bKh5c3+Oix4G0BCtRI0z7Ba37wEMbxqR4hCABbEvtXdsTyBCVSMb6vishm1v9EiSI+/0n2KPiLbydmuPxtiX6DxfcEwgtDfFOSPyl8Y2GFwXCBPaUNek9uE/nazHzxtpmLQ=="}},"tbs_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","tbs_noct_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","validation_level":"unknown","validity":{"end":"2027-06-09T10:46:39Z","length":"402101199","start":"2014-09-11T12:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7"},"fingerprint_md5":"6b64fefc8e8a0c01507f2df98cf8bc8b","fingerprint_sha1":"794e7e547fcc2d61e80c5f500261865e91695191","fingerprint_sha256":"2d87ff20fe8ad2305dfb6f3992867ed2bf4fe3e1346212c4345991aac02266e9","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"47728425367563953368335862826026879003","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"USBgXmatRbG59gzRGvF+JagKenTLbGXR15RiwVsijB7ZzvMYyclsYVXuTtnG6PIeu7OW9lxtqvYpF5T87sqAJTf4wN+Q0vkKPcD28NOztr77XYABtfTzijktgCk7Vj37vFD0lbHJwc+xh7wTgpAsRhW97/wDGZ44BMT4LQqCMDJXBRQBwkc1HE0/s/Zds3PWgadoBt+ayNXFt0ZSJO6KzWZemsByFdYBWpVx2ft6JTuiEaVgpVxU2HZ0ysQS/FquVi6/pemfleHCC/09PgWNNfVPM2GsmGQ12/ORUJVC07z3Djt2E2lHcB4ghwookSpe6aqpMsS2M/n9X3llIaxqKQ=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"ce331549a8e517fcff45c65665cbc1cafaaf1b9b6ed2e415ce56bac651e9dfa3","subject":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","subject_key_info":{"fingerprint_sha256":"aa2630a7b617b04d0a294bab7a8caaa5016e6dbe604837a83a85719fab667eb5","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQ=="}},"tbs_fingerprint":"241cb0fac2b1d3a95ea92c6e9de0f591db6d1569156a45ff0325ea03d27f3f71","tbs_noct_fingerprint":"3a69d0701a214f43e24d02241642499a5a52bf83302bb1c72c3710a50fd99123","validation_level":"unknown","validity":{"end":"2025-12-30T23:59:59Z","length":"542461942","start":"2008-10-22T12:07:37Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true}},"fingerprint_md5":"2c8f9f661d1890b147269d8e86828ca9","fingerprint_sha1":"6252dc40f71143a22fde9ef7348e064251b18118","fingerprint_sha256":"d8e0febc1db2e38d00940f37d27d41344d993e734b99d5656d9778d4d8143624","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"65568","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"706811a5e9363ee2a1b5f46e333c97bae8e944aa4abf8ae8438456567668a3eb","subject":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"subject_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","subject_key_info":{"fingerprint_sha256":"9736ac3b25d16c45a45418a964578156480a8cc434541ddc5dd59233229868de","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"zrHBLtNPfM0lzhg+T8SMb4Bqc8hbUfib0ty7AFyxoPx1A+6B8IjuI1Lp5hUzjawtCcV2+Ss5gInkl0uQpah4+HNDe6RhsNhYzOFsZn6c8wleVWOE1ajv87EuMGizxDzYrG6NmVqQTjTcNpqPgYhQt22WQgnz15WDDUFLsGpr+PwPfmKfZ8TtJl8QJg8IT/CkVyjOj7jtRfZu7iVdqm45vuSTL9lHoHLr+qZbr8pTP+IOxpZWEW736WapJth/lVPtCoWIuk8ppUKMXrb8hSAAqmgLoRqFAZzERmOCiLYise7+qkZZfs81LNW22l33SDMUVLbr2W/OzYjWqxvaljsdWQ=="}},"tbs_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","tbs_noct_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","validation_level":"unknown","validity":{"end":"2027-06-11T10:46:39Z","length":"788918400","start":"2002-06-11T10:46:39Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: certificate has expired or is not yet valid","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-15T06:29:57Z"}}},"p25":{"smtp":{"starttls":{"banner":"220 cloudserver3122037.home.pl ESMTP IdeaSmtpServer 0.83.415 ready.","ehlo":"250-cloudserver3122037.home.pl Hello worker-08.sfj.censys-scanner.com [192.35.168.128], pleased to meet you\r\n250-PIPELINING\r\n250-ENHANCEDSTATUSCODES\r\n250-SIZE\r\n250-8BITMIME\r\n250-STARTTLS\r\n250-AUTH PLAIN LOGIN\r\n250-AUTH=PLAIN LOGIN\r\n250 HELP","starttls":"220 Begin TLS negotiation","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/hsha2.cer"],"ocsp_urls":["http://h.ocsp-certum.com"]},"authority_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"1.2.616.1.113527.2.5.1.9.6.3","user_notice":[{"explicit_text":"Usage of this certificate is strictly subjected to the CERTUM Certification Practice Statement (CPS) incorporated by reference herein and in the repository at https://www.certum.pl/repository.","notice_reference":[{"notice_numbers":["2"],"organization":"Asseco Data Systems S.A."}]}]}],"crl_distribution_points":["http://crl.certum.pl/hsha2.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"subject_alt_name":{"dns_names":["*.online.pro","online.pro"]},"subject_key_id":"fdcb46d02a80306793fb95108611e4dc8cf1862b"},"fingerprint_md5":"c7343345d5c57f09e7c4d03b9e1b4b0a","fingerprint_sha1":"9ab2ae378d5d5d2c675d49486bb79413c5d2132d","fingerprint_sha256":"92eec3e4ce432e94d8d32381d3981513aa0f1f525390df6e10774b497f795263","issuer":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"issuer_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","names":["*.online.pro","online.pro"],"redacted":false,"serial_number":"158964248105662116706893520062302579650","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"D13JLfl+DmmuaGqIk7M9+2ZGn8GJp6Xr+1Lsr4OpshVALpIetHWodf3AU4TW4Mcofe1Eac0WT/7Il/+8WfmBBlo1EV0LcqfPY8XoNfiFUZ1qm1Tfi5Mr8Yn9blPQyEw0OVmpu6sfrYEFTHj+9yKP4UyKg6bIK4CHAsjAx5EAPr/qsXMxfDsbAAXok/ioDnM0q6iyo45lVOjPsl+uuQrO+Rci2DP29w0bqBPELMONelUQAG24+kFoKIRWQXPs7TJ+BdV4YkvtAjoK87cjiPDIY8SeJYczSOQwEGegb9aFDu0WPLy2qI/Ik1vD6yvs9LE//aLUsicY84Z/hWG1syUmBQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b6b316cba73a3f1334a1fe2d31e8db8fdd14b6f865e5afbad8da39fc3c9db8d7","subject":{"common_name":["*.online.pro"],"country":["PL"]},"subject_dn":"C=PL, CN=*.online.pro","subject_key_info":{"fingerprint_sha256":"cc0341bc46fb2aaa6b75a6142eb830e6e3af3fdf3d3e98317012cdbccd6e3778","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"oDi/0tcuDB1yWEW3X9GUP6SLohvXQjuysEHd1hi7BLrn/Svpc5ggzN+xTcVgceWsD70wA6IcwjOH+ubmkHRk0+pGCy/efO6Oq8GoNBAHu8kMJuezY9BxRqP+iu+3cv4ouvI6brAUgT43cbKW1g47HbyqtNdabsf1Y0RKIdTHyQzglBzsx+EicePiLosOvUBWsuGcoC6dMlfQmwKViJY3x4p6EiRNm8wyw6MxbtxE7UwxXgvcQOk9lGQ0celHQw5SdEA+F8O2EIIglZNsBFIzO441bB1Q3Hhlu8LIAs+OaMMd43L9osKH0RE+Hx9mDtnI8pU0Wf9E0a+SC2rMkBowBQ=="}},"tbs_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","tbs_noct_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGwA=="}],"validation_level":"unknown","validity":{"end":"2019-10-24T10:58:31Z","length":"94608000","start":"2016-10-24T10:58:31Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/gscasha2.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32","basic_constraints":{"is_ca":true,"max_path_len":"0"},"crl_distribution_points":["http://crl.certum.pl/gscasha2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331"},"fingerprint_md5":"e33a0298518b6612d3dd778363f0c951","fingerprint_sha1":"d29845169071fc79fa782962003f93ac8f977515","fingerprint_sha256":"a95f23b52af10895886fb65323d29a9876ea7d396f805e4ca280d561c26e3dad","issuer":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","redacted":false,"serial_number":"255020787367701009965542807920061370","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"QRrqx1enIkk1aojYJbYkIpYJWXyXAaPTKTGAyBVJz72Si43jGGIG8kgO+3BMnr5mtOdzZpXjVq/W7q10Km2fD/Z+IiYd59tBPgOtOPG7B/tJjGNl8nNQBsuKXJSFDUZTzbWKQB9o53b1KGT/uEcFI4hixLV9Y4TkcOK2W+o/lF1VkwbLI+2PvBgafTF5fUoSKW91WwyEZ8b9inMnS0UQG+KT95sNKx1i5gGd1GNQI+mnnqFoebCmW5hzqY3pcGhsoqI0pnYNBmbn2IQXmMUDV6XYVsQ0SMwE/PdMKqe+z1ykxTGWktEGmc+5OKPyv1RiVVlpGNcbi+GZfFrxHFVhCg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"248bae0f6f272561324195d3bb37562cea2366d88e6d08cdcfd5dff6cd5f8965","subject":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"subject_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","subject_key_info":{"fingerprint_sha256":"e4f2788c1d6c8c9e64c776b40ecda7a093dcd3b64e6ffcb5bd1d6d375b7916c4","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sOjOrZa141PYKzI7kJj2sI3id5YbKP7bpdRhLmigz63MWUytt02Tcn5ojs/wBvb2qVK49GCkcyL74Cil5o5iyLC5Ulmqc3ZbU8LqG59v2ZUy/eZzFgsKa4SJjiT03svhJQwvE+tGVvuSwP+iBoSAwRgd/lAnIR2nbPhDLa4Lgr/7OnIqmwF6KGTk0aeipMvguYo1lbIa8lfCrcg26F3iEKl0yAS1fUyjZNhrxtxqajTZWEcdfzvlOPEL+XecQpc1x10s3dW+Wdga7vG8jCYIHQ/1UMgHncyh+qU36UzNzHxd6UJJJaIkoUpcK/huy+ok5Me56OaLrINkXyJwzzN1Ww=="}},"tbs_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","tbs_noct_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","validation_level":"unknown","validity":{"end":"2026-06-06T08:01:29Z","length":"315360000","start":"2016-06-08T08:01:29Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ctnca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["http://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ctnca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32"},"fingerprint_md5":"4fc8a7335425177bc1077fa16b4c21d7","fingerprint_sha1":"96002650cc3818adb7bc358b15af098a0bd0aeb6","fingerprint_sha256":"9e852c59dfc6fd6abd4e17ea80b5f4e56fc04192d107258d54da8a92528670d6","issuer":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","redacted":false,"serial_number":"276871114946875026480589573694201475398","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"0YQvslR3xfyBXDTSm5MV9WlbAmdH2trfjMchXLOyjqltXxqTjsnLoIThZ2zPpc+GN4LeUWjhSU5u2FVGWd++dbObb/J4V3l360SKUDewrvjXouOex5Q8RFCLT5ZGJw23Q3rP/ek9fXCAndU5iD3pGEV4srj1uFoMer8pJpPdcS5CdMu+E81bVKH1ReOOql73mveczac2AlTIPgDl92WcsvV30k+oOLpvnMPyHb99XW5yXQczDoBx97sNmDImUIA6rzURPsALPj0xRCCh5gXP7dZ90ob4PXuvDPuWUTPGxFhqoC6n63k4ArAkHL/TA2MPUxVG0te0XROjbYj37M05Mg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"065723223cd5872f3812ee7d9110b6ab8d90ff39faa9178a4609aab8a54aff08","subject":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","subject_key_info":{"fingerprint_sha256":"33b683fc79a0cbb085f2c4dd76be6ca3531958406e35f2c87467b58efcb45fa1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"x4by13gOJMgVWA69dibrI1vvxzz1qQZlp0mQvYGnWzVwg/xpR6xq7kVqyp9GAWrG6J14uRS0aJ+9e2ggg7dvu1EZyceJixrd1+98h9yPk/gjrskxTriyHevI2FeL3wZtTfzdfyqIRq/Pke3k+H+GoH11UPoA2U96Rk8sKnPSCHeLh2hY1vpq+b1X7u1oy/ANtIzmsL5aldiuP6kq4z2bKh5c3+Oix4G0BCtRI0z7Ba37wEMbxqR4hCABbEvtXdsTyBCVSMb6vishm1v9EiSI+/0n2KPiLbydmuPxtiX6DxfcEwgtDfFOSPyl8Y2GFwXCBPaUNek9uE/nazHzxtpmLQ=="}},"tbs_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","tbs_noct_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","validation_level":"unknown","validity":{"end":"2027-06-09T10:46:39Z","length":"402101199","start":"2014-09-11T12:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7"},"fingerprint_md5":"6b64fefc8e8a0c01507f2df98cf8bc8b","fingerprint_sha1":"794e7e547fcc2d61e80c5f500261865e91695191","fingerprint_sha256":"2d87ff20fe8ad2305dfb6f3992867ed2bf4fe3e1346212c4345991aac02266e9","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"47728425367563953368335862826026879003","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"USBgXmatRbG59gzRGvF+JagKenTLbGXR15RiwVsijB7ZzvMYyclsYVXuTtnG6PIeu7OW9lxtqvYpF5T87sqAJTf4wN+Q0vkKPcD28NOztr77XYABtfTzijktgCk7Vj37vFD0lbHJwc+xh7wTgpAsRhW97/wDGZ44BMT4LQqCMDJXBRQBwkc1HE0/s/Zds3PWgadoBt+ayNXFt0ZSJO6KzWZemsByFdYBWpVx2ft6JTuiEaVgpVxU2HZ0ysQS/FquVi6/pemfleHCC/09PgWNNfVPM2GsmGQ12/ORUJVC07z3Djt2E2lHcB4ghwookSpe6aqpMsS2M/n9X3llIaxqKQ=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"ce331549a8e517fcff45c65665cbc1cafaaf1b9b6ed2e415ce56bac651e9dfa3","subject":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","subject_key_info":{"fingerprint_sha256":"aa2630a7b617b04d0a294bab7a8caaa5016e6dbe604837a83a85719fab667eb5","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQ=="}},"tbs_fingerprint":"241cb0fac2b1d3a95ea92c6e9de0f591db6d1569156a45ff0325ea03d27f3f71","tbs_noct_fingerprint":"3a69d0701a214f43e24d02241642499a5a52bf83302bb1c72c3710a50fd99123","validation_level":"unknown","validity":{"end":"2025-12-30T23:59:59Z","length":"542461942","start":"2008-10-22T12:07:37Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true}},"fingerprint_md5":"2c8f9f661d1890b147269d8e86828ca9","fingerprint_sha1":"6252dc40f71143a22fde9ef7348e064251b18118","fingerprint_sha256":"d8e0febc1db2e38d00940f37d27d41344d993e734b99d5656d9778d4d8143624","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"65568","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"706811a5e9363ee2a1b5f46e333c97bae8e944aa4abf8ae8438456567668a3eb","subject":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"subject_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","subject_key_info":{"fingerprint_sha256":"9736ac3b25d16c45a45418a964578156480a8cc434541ddc5dd59233229868de","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"zrHBLtNPfM0lzhg+T8SMb4Bqc8hbUfib0ty7AFyxoPx1A+6B8IjuI1Lp5hUzjawtCcV2+Ss5gInkl0uQpah4+HNDe6RhsNhYzOFsZn6c8wleVWOE1ajv87EuMGizxDzYrG6NmVqQTjTcNpqPgYhQt22WQgnz15WDDUFLsGpr+PwPfmKfZ8TtJl8QJg8IT/CkVyjOj7jtRfZu7iVdqm45vuSTL9lHoHLr+qZbr8pTP+IOxpZWEW736WapJth/lVPtCoWIuk8ppUKMXrb8hSAAqmgLoRqFAZzERmOCiLYise7+qkZZfs81LNW22l33SDMUVLbr2W/OzYjWqxvaljsdWQ=="}},"tbs_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","tbs_noct_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","validation_level":"unknown","validity":{"end":"2027-06-11T10:46:39Z","length":"788918400","start":"2002-06-11T10:46:39Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: certificate has expired or is not yet valid","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-11T23:03:30Z"}}},"p110":{"pop3":{"starttls":{"banner":"+OK Dovecot ready.","metadata":{"description":"Dovecot","product":"Dovecot"},"starttls":"+OK Begin TLS negotiation now.","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/hsha2.cer"],"ocsp_urls":["http://h.ocsp-certum.com"]},"authority_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"1.2.616.1.113527.2.5.1.9.6.3","user_notice":[{"explicit_text":"Usage of this certificate is strictly subjected to the CERTUM Certification Practice Statement (CPS) incorporated by reference herein and in the repository at https://www.certum.pl/repository.","notice_reference":[{"notice_numbers":["2"],"organization":"Asseco Data Systems S.A."}]}]}],"crl_distribution_points":["http://crl.certum.pl/hsha2.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"subject_alt_name":{"dns_names":["*.online.pro","online.pro"]},"subject_key_id":"fdcb46d02a80306793fb95108611e4dc8cf1862b"},"fingerprint_md5":"c7343345d5c57f09e7c4d03b9e1b4b0a","fingerprint_sha1":"9ab2ae378d5d5d2c675d49486bb79413c5d2132d","fingerprint_sha256":"92eec3e4ce432e94d8d32381d3981513aa0f1f525390df6e10774b497f795263","issuer":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"issuer_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","names":["*.online.pro","online.pro"],"redacted":false,"serial_number":"158964248105662116706893520062302579650","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"D13JLfl+DmmuaGqIk7M9+2ZGn8GJp6Xr+1Lsr4OpshVALpIetHWodf3AU4TW4Mcofe1Eac0WT/7Il/+8WfmBBlo1EV0LcqfPY8XoNfiFUZ1qm1Tfi5Mr8Yn9blPQyEw0OVmpu6sfrYEFTHj+9yKP4UyKg6bIK4CHAsjAx5EAPr/qsXMxfDsbAAXok/ioDnM0q6iyo45lVOjPsl+uuQrO+Rci2DP29w0bqBPELMONelUQAG24+kFoKIRWQXPs7TJ+BdV4YkvtAjoK87cjiPDIY8SeJYczSOQwEGegb9aFDu0WPLy2qI/Ik1vD6yvs9LE//aLUsicY84Z/hWG1syUmBQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b6b316cba73a3f1334a1fe2d31e8db8fdd14b6f865e5afbad8da39fc3c9db8d7","subject":{"common_name":["*.online.pro"],"country":["PL"]},"subject_dn":"C=PL, CN=*.online.pro","subject_key_info":{"fingerprint_sha256":"cc0341bc46fb2aaa6b75a6142eb830e6e3af3fdf3d3e98317012cdbccd6e3778","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"oDi/0tcuDB1yWEW3X9GUP6SLohvXQjuysEHd1hi7BLrn/Svpc5ggzN+xTcVgceWsD70wA6IcwjOH+ubmkHRk0+pGCy/efO6Oq8GoNBAHu8kMJuezY9BxRqP+iu+3cv4ouvI6brAUgT43cbKW1g47HbyqtNdabsf1Y0RKIdTHyQzglBzsx+EicePiLosOvUBWsuGcoC6dMlfQmwKViJY3x4p6EiRNm8wyw6MxbtxE7UwxXgvcQOk9lGQ0celHQw5SdEA+F8O2EIIglZNsBFIzO441bB1Q3Hhlu8LIAs+OaMMd43L9osKH0RE+Hx9mDtnI8pU0Wf9E0a+SC2rMkBowBQ=="}},"tbs_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","tbs_noct_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGwA=="}],"validation_level":"unknown","validity":{"end":"2019-10-24T10:58:31Z","length":"94608000","start":"2016-10-24T10:58:31Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/gscasha2.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32","basic_constraints":{"is_ca":true,"max_path_len":"0"},"crl_distribution_points":["http://crl.certum.pl/gscasha2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331"},"fingerprint_md5":"e33a0298518b6612d3dd778363f0c951","fingerprint_sha1":"d29845169071fc79fa782962003f93ac8f977515","fingerprint_sha256":"a95f23b52af10895886fb65323d29a9876ea7d396f805e4ca280d561c26e3dad","issuer":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","redacted":false,"serial_number":"255020787367701009965542807920061370","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"QRrqx1enIkk1aojYJbYkIpYJWXyXAaPTKTGAyBVJz72Si43jGGIG8kgO+3BMnr5mtOdzZpXjVq/W7q10Km2fD/Z+IiYd59tBPgOtOPG7B/tJjGNl8nNQBsuKXJSFDUZTzbWKQB9o53b1KGT/uEcFI4hixLV9Y4TkcOK2W+o/lF1VkwbLI+2PvBgafTF5fUoSKW91WwyEZ8b9inMnS0UQG+KT95sNKx1i5gGd1GNQI+mnnqFoebCmW5hzqY3pcGhsoqI0pnYNBmbn2IQXmMUDV6XYVsQ0SMwE/PdMKqe+z1ykxTGWktEGmc+5OKPyv1RiVVlpGNcbi+GZfFrxHFVhCg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"248bae0f6f272561324195d3bb37562cea2366d88e6d08cdcfd5dff6cd5f8965","subject":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"subject_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","subject_key_info":{"fingerprint_sha256":"e4f2788c1d6c8c9e64c776b40ecda7a093dcd3b64e6ffcb5bd1d6d375b7916c4","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sOjOrZa141PYKzI7kJj2sI3id5YbKP7bpdRhLmigz63MWUytt02Tcn5ojs/wBvb2qVK49GCkcyL74Cil5o5iyLC5Ulmqc3ZbU8LqG59v2ZUy/eZzFgsKa4SJjiT03svhJQwvE+tGVvuSwP+iBoSAwRgd/lAnIR2nbPhDLa4Lgr/7OnIqmwF6KGTk0aeipMvguYo1lbIa8lfCrcg26F3iEKl0yAS1fUyjZNhrxtxqajTZWEcdfzvlOPEL+XecQpc1x10s3dW+Wdga7vG8jCYIHQ/1UMgHncyh+qU36UzNzHxd6UJJJaIkoUpcK/huy+ok5Me56OaLrINkXyJwzzN1Ww=="}},"tbs_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","tbs_noct_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","validation_level":"unknown","validity":{"end":"2026-06-06T08:01:29Z","length":"315360000","start":"2016-06-08T08:01:29Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ctnca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["http://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ctnca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32"},"fingerprint_md5":"4fc8a7335425177bc1077fa16b4c21d7","fingerprint_sha1":"96002650cc3818adb7bc358b15af098a0bd0aeb6","fingerprint_sha256":"9e852c59dfc6fd6abd4e17ea80b5f4e56fc04192d107258d54da8a92528670d6","issuer":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","redacted":false,"serial_number":"276871114946875026480589573694201475398","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"0YQvslR3xfyBXDTSm5MV9WlbAmdH2trfjMchXLOyjqltXxqTjsnLoIThZ2zPpc+GN4LeUWjhSU5u2FVGWd++dbObb/J4V3l360SKUDewrvjXouOex5Q8RFCLT5ZGJw23Q3rP/ek9fXCAndU5iD3pGEV4srj1uFoMer8pJpPdcS5CdMu+E81bVKH1ReOOql73mveczac2AlTIPgDl92WcsvV30k+oOLpvnMPyHb99XW5yXQczDoBx97sNmDImUIA6rzURPsALPj0xRCCh5gXP7dZ90ob4PXuvDPuWUTPGxFhqoC6n63k4ArAkHL/TA2MPUxVG0te0XROjbYj37M05Mg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"065723223cd5872f3812ee7d9110b6ab8d90ff39faa9178a4609aab8a54aff08","subject":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","subject_key_info":{"fingerprint_sha256":"33b683fc79a0cbb085f2c4dd76be6ca3531958406e35f2c87467b58efcb45fa1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"x4by13gOJMgVWA69dibrI1vvxzz1qQZlp0mQvYGnWzVwg/xpR6xq7kVqyp9GAWrG6J14uRS0aJ+9e2ggg7dvu1EZyceJixrd1+98h9yPk/gjrskxTriyHevI2FeL3wZtTfzdfyqIRq/Pke3k+H+GoH11UPoA2U96Rk8sKnPSCHeLh2hY1vpq+b1X7u1oy/ANtIzmsL5aldiuP6kq4z2bKh5c3+Oix4G0BCtRI0z7Ba37wEMbxqR4hCABbEvtXdsTyBCVSMb6vishm1v9EiSI+/0n2KPiLbydmuPxtiX6DxfcEwgtDfFOSPyl8Y2GFwXCBPaUNek9uE/nazHzxtpmLQ=="}},"tbs_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","tbs_noct_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","validation_level":"unknown","validity":{"end":"2027-06-09T10:46:39Z","length":"402101199","start":"2014-09-11T12:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7"},"fingerprint_md5":"6b64fefc8e8a0c01507f2df98cf8bc8b","fingerprint_sha1":"794e7e547fcc2d61e80c5f500261865e91695191","fingerprint_sha256":"2d87ff20fe8ad2305dfb6f3992867ed2bf4fe3e1346212c4345991aac02266e9","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"47728425367563953368335862826026879003","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"USBgXmatRbG59gzRGvF+JagKenTLbGXR15RiwVsijB7ZzvMYyclsYVXuTtnG6PIeu7OW9lxtqvYpF5T87sqAJTf4wN+Q0vkKPcD28NOztr77XYABtfTzijktgCk7Vj37vFD0lbHJwc+xh7wTgpAsRhW97/wDGZ44BMT4LQqCMDJXBRQBwkc1HE0/s/Zds3PWgadoBt+ayNXFt0ZSJO6KzWZemsByFdYBWpVx2ft6JTuiEaVgpVxU2HZ0ysQS/FquVi6/pemfleHCC/09PgWNNfVPM2GsmGQ12/ORUJVC07z3Djt2E2lHcB4ghwookSpe6aqpMsS2M/n9X3llIaxqKQ=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"ce331549a8e517fcff45c65665cbc1cafaaf1b9b6ed2e415ce56bac651e9dfa3","subject":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","subject_key_info":{"fingerprint_sha256":"aa2630a7b617b04d0a294bab7a8caaa5016e6dbe604837a83a85719fab667eb5","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQ=="}},"tbs_fingerprint":"241cb0fac2b1d3a95ea92c6e9de0f591db6d1569156a45ff0325ea03d27f3f71","tbs_noct_fingerprint":"3a69d0701a214f43e24d02241642499a5a52bf83302bb1c72c3710a50fd99123","validation_level":"unknown","validity":{"end":"2025-12-30T23:59:59Z","length":"542461942","start":"2008-10-22T12:07:37Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true}},"fingerprint_md5":"2c8f9f661d1890b147269d8e86828ca9","fingerprint_sha1":"6252dc40f71143a22fde9ef7348e064251b18118","fingerprint_sha256":"d8e0febc1db2e38d00940f37d27d41344d993e734b99d5656d9778d4d8143624","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"65568","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"706811a5e9363ee2a1b5f46e333c97bae8e944aa4abf8ae8438456567668a3eb","subject":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"subject_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","subject_key_info":{"fingerprint_sha256":"9736ac3b25d16c45a45418a964578156480a8cc434541ddc5dd59233229868de","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"zrHBLtNPfM0lzhg+T8SMb4Bqc8hbUfib0ty7AFyxoPx1A+6B8IjuI1Lp5hUzjawtCcV2+Ss5gInkl0uQpah4+HNDe6RhsNhYzOFsZn6c8wleVWOE1ajv87EuMGizxDzYrG6NmVqQTjTcNpqPgYhQt22WQgnz15WDDUFLsGpr+PwPfmKfZ8TtJl8QJg8IT/CkVyjOj7jtRfZu7iVdqm45vuSTL9lHoHLr+qZbr8pTP+IOxpZWEW736WapJth/lVPtCoWIuk8ppUKMXrb8hSAAqmgLoRqFAZzERmOCiLYise7+qkZZfs81LNW22l33SDMUVLbr2W/OzYjWqxvaljsdWQ=="}},"tbs_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","tbs_noct_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","validation_level":"unknown","validity":{"end":"2027-06-11T10:46:39Z","length":"788918400","start":"2002-06-11T10:46:39Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: certificate has expired or is not yet valid","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-11T06:22:26Z"}}},"p143":{"imap":{"starttls":{"banner":"* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=PLAIN] Dovecot ready.","metadata":{"description":"Dovecot","product":"Dovecot"},"starttls":"a001 OK Begin TLS negotiation now.","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/hsha2.cer"],"ocsp_urls":["http://h.ocsp-certum.com"]},"authority_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"1.2.616.1.113527.2.5.1.9.6.3","user_notice":[{"explicit_text":"Usage of this certificate is strictly subjected to the CERTUM Certification Practice Statement (CPS) incorporated by reference herein and in the repository at https://www.certum.pl/repository.","notice_reference":[{"notice_numbers":["2"],"organization":"Asseco Data Systems S.A."}]}]}],"crl_distribution_points":["http://crl.certum.pl/hsha2.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"subject_alt_name":{"dns_names":["*.online.pro","online.pro"]},"subject_key_id":"fdcb46d02a80306793fb95108611e4dc8cf1862b"},"fingerprint_md5":"c7343345d5c57f09e7c4d03b9e1b4b0a","fingerprint_sha1":"9ab2ae378d5d5d2c675d49486bb79413c5d2132d","fingerprint_sha256":"92eec3e4ce432e94d8d32381d3981513aa0f1f525390df6e10774b497f795263","issuer":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"issuer_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","names":["*.online.pro","online.pro"],"redacted":false,"serial_number":"158964248105662116706893520062302579650","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"D13JLfl+DmmuaGqIk7M9+2ZGn8GJp6Xr+1Lsr4OpshVALpIetHWodf3AU4TW4Mcofe1Eac0WT/7Il/+8WfmBBlo1EV0LcqfPY8XoNfiFUZ1qm1Tfi5Mr8Yn9blPQyEw0OVmpu6sfrYEFTHj+9yKP4UyKg6bIK4CHAsjAx5EAPr/qsXMxfDsbAAXok/ioDnM0q6iyo45lVOjPsl+uuQrO+Rci2DP29w0bqBPELMONelUQAG24+kFoKIRWQXPs7TJ+BdV4YkvtAjoK87cjiPDIY8SeJYczSOQwEGegb9aFDu0WPLy2qI/Ik1vD6yvs9LE//aLUsicY84Z/hWG1syUmBQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b6b316cba73a3f1334a1fe2d31e8db8fdd14b6f865e5afbad8da39fc3c9db8d7","subject":{"common_name":["*.online.pro"],"country":["PL"]},"subject_dn":"C=PL, CN=*.online.pro","subject_key_info":{"fingerprint_sha256":"cc0341bc46fb2aaa6b75a6142eb830e6e3af3fdf3d3e98317012cdbccd6e3778","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"oDi/0tcuDB1yWEW3X9GUP6SLohvXQjuysEHd1hi7BLrn/Svpc5ggzN+xTcVgceWsD70wA6IcwjOH+ubmkHRk0+pGCy/efO6Oq8GoNBAHu8kMJuezY9BxRqP+iu+3cv4ouvI6brAUgT43cbKW1g47HbyqtNdabsf1Y0RKIdTHyQzglBzsx+EicePiLosOvUBWsuGcoC6dMlfQmwKViJY3x4p6EiRNm8wyw6MxbtxE7UwxXgvcQOk9lGQ0celHQw5SdEA+F8O2EIIglZNsBFIzO441bB1Q3Hhlu8LIAs+OaMMd43L9osKH0RE+Hx9mDtnI8pU0Wf9E0a+SC2rMkBowBQ=="}},"tbs_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","tbs_noct_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGwA=="}],"validation_level":"unknown","validity":{"end":"2019-10-24T10:58:31Z","length":"94608000","start":"2016-10-24T10:58:31Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/gscasha2.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32","basic_constraints":{"is_ca":true,"max_path_len":"0"},"crl_distribution_points":["http://crl.certum.pl/gscasha2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331"},"fingerprint_md5":"e33a0298518b6612d3dd778363f0c951","fingerprint_sha1":"d29845169071fc79fa782962003f93ac8f977515","fingerprint_sha256":"a95f23b52af10895886fb65323d29a9876ea7d396f805e4ca280d561c26e3dad","issuer":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","redacted":false,"serial_number":"255020787367701009965542807920061370","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"QRrqx1enIkk1aojYJbYkIpYJWXyXAaPTKTGAyBVJz72Si43jGGIG8kgO+3BMnr5mtOdzZpXjVq/W7q10Km2fD/Z+IiYd59tBPgOtOPG7B/tJjGNl8nNQBsuKXJSFDUZTzbWKQB9o53b1KGT/uEcFI4hixLV9Y4TkcOK2W+o/lF1VkwbLI+2PvBgafTF5fUoSKW91WwyEZ8b9inMnS0UQG+KT95sNKx1i5gGd1GNQI+mnnqFoebCmW5hzqY3pcGhsoqI0pnYNBmbn2IQXmMUDV6XYVsQ0SMwE/PdMKqe+z1ykxTGWktEGmc+5OKPyv1RiVVlpGNcbi+GZfFrxHFVhCg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"248bae0f6f272561324195d3bb37562cea2366d88e6d08cdcfd5dff6cd5f8965","subject":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"subject_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","subject_key_info":{"fingerprint_sha256":"e4f2788c1d6c8c9e64c776b40ecda7a093dcd3b64e6ffcb5bd1d6d375b7916c4","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sOjOrZa141PYKzI7kJj2sI3id5YbKP7bpdRhLmigz63MWUytt02Tcn5ojs/wBvb2qVK49GCkcyL74Cil5o5iyLC5Ulmqc3ZbU8LqG59v2ZUy/eZzFgsKa4SJjiT03svhJQwvE+tGVvuSwP+iBoSAwRgd/lAnIR2nbPhDLa4Lgr/7OnIqmwF6KGTk0aeipMvguYo1lbIa8lfCrcg26F3iEKl0yAS1fUyjZNhrxtxqajTZWEcdfzvlOPEL+XecQpc1x10s3dW+Wdga7vG8jCYIHQ/1UMgHncyh+qU36UzNzHxd6UJJJaIkoUpcK/huy+ok5Me56OaLrINkXyJwzzN1Ww=="}},"tbs_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","tbs_noct_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","validation_level":"unknown","validity":{"end":"2026-06-06T08:01:29Z","length":"315360000","start":"2016-06-08T08:01:29Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ctnca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["http://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ctnca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32"},"fingerprint_md5":"4fc8a7335425177bc1077fa16b4c21d7","fingerprint_sha1":"96002650cc3818adb7bc358b15af098a0bd0aeb6","fingerprint_sha256":"9e852c59dfc6fd6abd4e17ea80b5f4e56fc04192d107258d54da8a92528670d6","issuer":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","redacted":false,"serial_number":"276871114946875026480589573694201475398","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"0YQvslR3xfyBXDTSm5MV9WlbAmdH2trfjMchXLOyjqltXxqTjsnLoIThZ2zPpc+GN4LeUWjhSU5u2FVGWd++dbObb/J4V3l360SKUDewrvjXouOex5Q8RFCLT5ZGJw23Q3rP/ek9fXCAndU5iD3pGEV4srj1uFoMer8pJpPdcS5CdMu+E81bVKH1ReOOql73mveczac2AlTIPgDl92WcsvV30k+oOLpvnMPyHb99XW5yXQczDoBx97sNmDImUIA6rzURPsALPj0xRCCh5gXP7dZ90ob4PXuvDPuWUTPGxFhqoC6n63k4ArAkHL/TA2MPUxVG0te0XROjbYj37M05Mg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"065723223cd5872f3812ee7d9110b6ab8d90ff39faa9178a4609aab8a54aff08","subject":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","subject_key_info":{"fingerprint_sha256":"33b683fc79a0cbb085f2c4dd76be6ca3531958406e35f2c87467b58efcb45fa1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"x4by13gOJMgVWA69dibrI1vvxzz1qQZlp0mQvYGnWzVwg/xpR6xq7kVqyp9GAWrG6J14uRS0aJ+9e2ggg7dvu1EZyceJixrd1+98h9yPk/gjrskxTriyHevI2FeL3wZtTfzdfyqIRq/Pke3k+H+GoH11UPoA2U96Rk8sKnPSCHeLh2hY1vpq+b1X7u1oy/ANtIzmsL5aldiuP6kq4z2bKh5c3+Oix4G0BCtRI0z7Ba37wEMbxqR4hCABbEvtXdsTyBCVSMb6vishm1v9EiSI+/0n2KPiLbydmuPxtiX6DxfcEwgtDfFOSPyl8Y2GFwXCBPaUNek9uE/nazHzxtpmLQ=="}},"tbs_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","tbs_noct_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","validation_level":"unknown","validity":{"end":"2027-06-09T10:46:39Z","length":"402101199","start":"2014-09-11T12:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7"},"fingerprint_md5":"6b64fefc8e8a0c01507f2df98cf8bc8b","fingerprint_sha1":"794e7e547fcc2d61e80c5f500261865e91695191","fingerprint_sha256":"2d87ff20fe8ad2305dfb6f3992867ed2bf4fe3e1346212c4345991aac02266e9","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"47728425367563953368335862826026879003","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"USBgXmatRbG59gzRGvF+JagKenTLbGXR15RiwVsijB7ZzvMYyclsYVXuTtnG6PIeu7OW9lxtqvYpF5T87sqAJTf4wN+Q0vkKPcD28NOztr77XYABtfTzijktgCk7Vj37vFD0lbHJwc+xh7wTgpAsRhW97/wDGZ44BMT4LQqCMDJXBRQBwkc1HE0/s/Zds3PWgadoBt+ayNXFt0ZSJO6KzWZemsByFdYBWpVx2ft6JTuiEaVgpVxU2HZ0ysQS/FquVi6/pemfleHCC/09PgWNNfVPM2GsmGQ12/ORUJVC07z3Djt2E2lHcB4ghwookSpe6aqpMsS2M/n9X3llIaxqKQ=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"ce331549a8e517fcff45c65665cbc1cafaaf1b9b6ed2e415ce56bac651e9dfa3","subject":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","subject_key_info":{"fingerprint_sha256":"aa2630a7b617b04d0a294bab7a8caaa5016e6dbe604837a83a85719fab667eb5","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQ=="}},"tbs_fingerprint":"241cb0fac2b1d3a95ea92c6e9de0f591db6d1569156a45ff0325ea03d27f3f71","tbs_noct_fingerprint":"3a69d0701a214f43e24d02241642499a5a52bf83302bb1c72c3710a50fd99123","validation_level":"unknown","validity":{"end":"2025-12-30T23:59:59Z","length":"542461942","start":"2008-10-22T12:07:37Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true}},"fingerprint_md5":"2c8f9f661d1890b147269d8e86828ca9","fingerprint_sha1":"6252dc40f71143a22fde9ef7348e064251b18118","fingerprint_sha256":"d8e0febc1db2e38d00940f37d27d41344d993e734b99d5656d9778d4d8143624","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"65568","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"706811a5e9363ee2a1b5f46e333c97bae8e944aa4abf8ae8438456567668a3eb","subject":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"subject_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","subject_key_info":{"fingerprint_sha256":"9736ac3b25d16c45a45418a964578156480a8cc434541ddc5dd59233229868de","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"zrHBLtNPfM0lzhg+T8SMb4Bqc8hbUfib0ty7AFyxoPx1A+6B8IjuI1Lp5hUzjawtCcV2+Ss5gInkl0uQpah4+HNDe6RhsNhYzOFsZn6c8wleVWOE1ajv87EuMGizxDzYrG6NmVqQTjTcNpqPgYhQt22WQgnz15WDDUFLsGpr+PwPfmKfZ8TtJl8QJg8IT/CkVyjOj7jtRfZu7iVdqm45vuSTL9lHoHLr+qZbr8pTP+IOxpZWEW736WapJth/lVPtCoWIuk8ppUKMXrb8hSAAqmgLoRqFAZzERmOCiLYise7+qkZZfs81LNW22l33SDMUVLbr2W/OzYjWqxvaljsdWQ=="}},"tbs_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","tbs_noct_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","validation_level":"unknown","validity":{"end":"2027-06-11T10:46:39Z","length":"788918400","start":"2002-06-11T10:46:39Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: certificate has expired or is not yet valid","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-12T07:14:53Z"}}},"ipint":"774480763","p3306":{"mysql":{"banner":{"capability_flags":{"CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS":true,"CLIENT_COMPRESS":true,"CLIENT_CONNECT_ATTRS":true,"CLIENT_CONNECT_WITH_DB":true,"CLIENT_DEPRECATED_EOF":true,"CLIENT_FOUND_ROWS":true,"CLIENT_IGNORE_SIGPIPE":true,"CLIENT_IGNORE_SPACE":true,"CLIENT_INTERACTIVE":true,"CLIENT_LOCAL_FILES":true,"CLIENT_LONG_FLAG":true,"CLIENT_LONG_PASSWORD":true,"CLIENT_MULTI_RESULTS":true,"CLIENT_MULTI_STATEMENTS":true,"CLIENT_NO_SCHEMA":true,"CLIENT_ODBC":true,"CLIENT_PLUGIN_AUTH":true,"CLIENT_PLUGIN_AUTH_LEN_ENC_CLIENT_DATA":true,"CLIENT_PROTOCOL_41":true,"CLIENT_PS_MULTI_RESULTS":true,"CLIENT_RESERVED":true,"CLIENT_SECURE_CONNECTION":true,"CLIENT_SESSION_TRACK":true,"CLIENT_SSL":true,"CLIENT_TRANSACTIONS":true},"protocol_version":"10","server_version":"5.7.25-28-log","status_flags":{"SERVER_STATUS_AUTOCOMMIT":true},"supported":true,"tls":{"certificate":{"parsed":{"fingerprint_md5":"9995bcaaa58e62990f68acd8e1b6bee0","fingerprint_sha1":"3e0373cd89ff712712ec69637f1a33888e4c02a6","fingerprint_sha256":"0e9572b7fe1120d4fa82d25ff83181742e5ea567c47c8043e598497bb97a7678","issuer":{"common_name":["MySQL_Server_5.7.18-14_Auto_Generated_CA_Certificate"]},"issuer_dn":"CN=MySQL_Server_5.7.18-14_Auto_Generated_CA_Certificate","redacted":false,"serial_number":"2","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"Kx2t1rAunWIxvBZFzxKcjqyH/wdqlDg4xdi9ncETGR/NX1RetsDqLrejCzCmKplRMptztQr/Qww2HMb5SJ16EnmcCqNueNNNvS5yYkOJyWl5bY5XOGFIq2GJogVYpNbyYKoyKh5kojCiUcfGuhHeFrDluZXJwkgTliYe57lmpfSWC3nceb31x1Gedl+MxRsgXByBiypsv7FUDRckTZ/6NjgnxHTLHK0vIRnb89h4uqak58r1dtb1sVk8yE7B7+eDEsQ+OxzpP7IAawP+WAKvlXab0wM8LKNJV1+cQbATmUROEhzcGMFnJXBrRg6uHK+uY6SDQGCKtsssUdUurcU1mA=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"ade614ccbb97e72166c0d996c858278b857ea3abf7b087a615290b30d8cfdd38","subject":{"common_name":["MySQL_Server_5.7.18-14_Auto_Generated_Server_Certificate"]},"subject_dn":"CN=MySQL_Server_5.7.18-14_Auto_Generated_Server_Certificate","subject_key_info":{"fingerprint_sha256":"c93ab3a5f31dbb0f8322a5e31c1a640af24f8553c0f231d70dddab3c2c1d73be","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wwRdY3Vm2bliM4JYE9Xc1VGF1jQXdrZQ2APwyHL+MWmbZYa1mxPXNpYP17BpFjXM/QxUlsqX+8ALCQbsHIY7ZVKcQJjZZk8jM99Dau/m7cbsgYZDZ+c+JqhmkcSw8iblytpYpyU++JIGUVuPvpK15t5b9ZXk8wSsjuPqA4uYCmglVKYkRxSmZi0Z78JI1kim9Vu96D7G+ZBwRJA+LvLQ+8SuSVY/OlfLLNjMYZfrGc95B+C5wXKOMyrz3rrTYGixZ8y/+sVNb/0uOONEJ5yoz4O3RmiZBQW8ZtHns+XG9arq6Qw35ZY+e6HENo1v1GY75FDCE4BFCgKa8VhLRHjjYw=="}},"tbs_fingerprint":"262d749178fdbc60f6073817450b5c77aa2d7f72117079d1f6ece69806d4ef10","tbs_noct_fingerprint":"725df1f2bff2fad1ce73fe8801b42eaaa6645c23330b3defdc4ae9ee519488c1","validation_level":"unknown","validity":{"end":"2027-11-18T14:10:08Z","length":"315360000","start":"2017-11-20T14:10:08Z"},"version":"1"}},"chain":[{"parsed":{"fingerprint_md5":"976b05bc49b44af0d8d4fc0868f58b92","fingerprint_sha1":"bac7c3bfb169552e0d3bc25a68cc77cd6ecaa473","fingerprint_sha256":"c832243c922e624687f584b5fc0fbdf6b07ee59245083187daca60fdc5ad77d3","issuer":{"common_name":["MySQL_Server_5.7.18-14_Auto_Generated_CA_Certificate"]},"issuer_dn":"CN=MySQL_Server_5.7.18-14_Auto_Generated_CA_Certificate","redacted":false,"serial_number":"1","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"XsYAuHRJVT90joALQ3RuLFwsG471s0vm8QAzYMX6eOmQjyqpuuHy707gGT1t65Z7teqV4HzO6cHCosg+NXAn+ybmjO8k7nAdJGUz8l0KsPa46PRQOE4L3rTTA1J0cxRJ/d2e4/V5qKoIAc+0b1zOvg2pMQsIXEovaJMW9NNIwxIW1QqXP00Nm1WMzUojDIPB4SJkLkUCIHjiZNe/R+a6K+kyokxF7/sLD61xGZhoDGH4BS/gawtAtJr0cdxi9Krcrm/aWmWLwUG6xL8LVWYgI2QLfvoqz1Z0DnvZshM+gOnrZpb+1RHCrKL0P90r0vEJwkefgyKorgfe35LOoZzIuw=="},"signature_algorithm":{"name":"SHA256-RSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"0e469c7524fb1ad3a70f2a71aa85a4f769259a6e6b0062aca3d88830a5dca9b2","subject":{"common_name":["MySQL_Server_5.7.18-14_Auto_Generated_CA_Certificate"]},"subject_dn":"CN=MySQL_Server_5.7.18-14_Auto_Generated_CA_Certificate","subject_key_info":{"fingerprint_sha256":"1dc93f5fc684db56d4a23116caa9c0e08b1adba2b92c03fbc5eef10e378b5d07","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"rpnmW9Vg4bk6hNBT9mgVdzxNBUqupknBzD+QwfRHB7V4zvllL/wATAJwHIym4dC6FfDZ2V0GzC7WLJHmonZKSxvcmxP9uJn5qROUsX/uZ8A5mDy9cIQXQFM/eJXM11baE7aLiQG2NGSx2KwDClVkrRYh0xxwDK3iyfk8rypfqqhxpYUxFx/3ndnVbXwtsOxlKHXXmSVL07fcB+6ekJjFhnNqGUhzA/f96kA5y8M/1Jm4K4pSDc0WYROZVUPvQmB/UUhissdUJ3KAnX9tGNF+VrkYIvvyMISK5FjwvIG5nxzztx8HwgT12/hIfrBidGR6xUYFzqIFgqikUvJPRkENzQ=="}},"tbs_fingerprint":"39bdfaeefe9312891917ef8f2647507bcaafb4b5f73d3ea6c1b3985dc099fa71","tbs_noct_fingerprint":"2fd320f9d14f43c0b1f1473305d32c77318d9d9c97488ec9702204f9251a05dd","validation_level":"unknown","validity":{"end":"2027-11-18T14:10:07Z","length":"315360000","start":"2017-11-20T14:10:07Z"},"version":"1"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: failed to load system roots and no roots provided","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-13T07:17:18Z"}}},"updated_at":"2020-07-15T06:29:57Z","p995":{"pop3s":{"tls":{"banner":"+OK Dovecot ready.","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/hsha2.cer"],"ocsp_urls":["http://h.ocsp-certum.com"]},"authority_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"1.2.616.1.113527.2.5.1.9.6.3","user_notice":[{"explicit_text":"Usage of this certificate is strictly subjected to the CERTUM Certification Practice Statement (CPS) incorporated by reference herein and in the repository at https://www.certum.pl/repository.","notice_reference":[{"notice_numbers":["2"],"organization":"Asseco Data Systems S.A."}]}]}],"crl_distribution_points":["http://crl.certum.pl/hsha2.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"subject_alt_name":{"dns_names":["*.online.pro","online.pro"]},"subject_key_id":"fdcb46d02a80306793fb95108611e4dc8cf1862b"},"fingerprint_md5":"c7343345d5c57f09e7c4d03b9e1b4b0a","fingerprint_sha1":"9ab2ae378d5d5d2c675d49486bb79413c5d2132d","fingerprint_sha256":"92eec3e4ce432e94d8d32381d3981513aa0f1f525390df6e10774b497f795263","issuer":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"issuer_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","names":["online.pro","*.online.pro"],"redacted":false,"serial_number":"158964248105662116706893520062302579650","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"D13JLfl+DmmuaGqIk7M9+2ZGn8GJp6Xr+1Lsr4OpshVALpIetHWodf3AU4TW4Mcofe1Eac0WT/7Il/+8WfmBBlo1EV0LcqfPY8XoNfiFUZ1qm1Tfi5Mr8Yn9blPQyEw0OVmpu6sfrYEFTHj+9yKP4UyKg6bIK4CHAsjAx5EAPr/qsXMxfDsbAAXok/ioDnM0q6iyo45lVOjPsl+uuQrO+Rci2DP29w0bqBPELMONelUQAG24+kFoKIRWQXPs7TJ+BdV4YkvtAjoK87cjiPDIY8SeJYczSOQwEGegb9aFDu0WPLy2qI/Ik1vD6yvs9LE//aLUsicY84Z/hWG1syUmBQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b6b316cba73a3f1334a1fe2d31e8db8fdd14b6f865e5afbad8da39fc3c9db8d7","subject":{"common_name":["*.online.pro"],"country":["PL"]},"subject_dn":"C=PL, CN=*.online.pro","subject_key_info":{"fingerprint_sha256":"cc0341bc46fb2aaa6b75a6142eb830e6e3af3fdf3d3e98317012cdbccd6e3778","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"oDi/0tcuDB1yWEW3X9GUP6SLohvXQjuysEHd1hi7BLrn/Svpc5ggzN+xTcVgceWsD70wA6IcwjOH+ubmkHRk0+pGCy/efO6Oq8GoNBAHu8kMJuezY9BxRqP+iu+3cv4ouvI6brAUgT43cbKW1g47HbyqtNdabsf1Y0RKIdTHyQzglBzsx+EicePiLosOvUBWsuGcoC6dMlfQmwKViJY3x4p6EiRNm8wyw6MxbtxE7UwxXgvcQOk9lGQ0celHQw5SdEA+F8O2EIIglZNsBFIzO441bB1Q3Hhlu8LIAs+OaMMd43L9osKH0RE+Hx9mDtnI8pU0Wf9E0a+SC2rMkBowBQ=="}},"tbs_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","tbs_noct_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGwA=="}],"validation_level":"unknown","validity":{"end":"2019-10-24T10:58:31Z","length":"94608000","start":"2016-10-24T10:58:31Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/gscasha2.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32","basic_constraints":{"is_ca":true,"max_path_len":"0"},"crl_distribution_points":["http://crl.certum.pl/gscasha2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331"},"fingerprint_md5":"e33a0298518b6612d3dd778363f0c951","fingerprint_sha1":"d29845169071fc79fa782962003f93ac8f977515","fingerprint_sha256":"a95f23b52af10895886fb65323d29a9876ea7d396f805e4ca280d561c26e3dad","issuer":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","redacted":false,"serial_number":"255020787367701009965542807920061370","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"QRrqx1enIkk1aojYJbYkIpYJWXyXAaPTKTGAyBVJz72Si43jGGIG8kgO+3BMnr5mtOdzZpXjVq/W7q10Km2fD/Z+IiYd59tBPgOtOPG7B/tJjGNl8nNQBsuKXJSFDUZTzbWKQB9o53b1KGT/uEcFI4hixLV9Y4TkcOK2W+o/lF1VkwbLI+2PvBgafTF5fUoSKW91WwyEZ8b9inMnS0UQG+KT95sNKx1i5gGd1GNQI+mnnqFoebCmW5hzqY3pcGhsoqI0pnYNBmbn2IQXmMUDV6XYVsQ0SMwE/PdMKqe+z1ykxTGWktEGmc+5OKPyv1RiVVlpGNcbi+GZfFrxHFVhCg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"248bae0f6f272561324195d3bb37562cea2366d88e6d08cdcfd5dff6cd5f8965","subject":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"subject_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","subject_key_info":{"fingerprint_sha256":"e4f2788c1d6c8c9e64c776b40ecda7a093dcd3b64e6ffcb5bd1d6d375b7916c4","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sOjOrZa141PYKzI7kJj2sI3id5YbKP7bpdRhLmigz63MWUytt02Tcn5ojs/wBvb2qVK49GCkcyL74Cil5o5iyLC5Ulmqc3ZbU8LqG59v2ZUy/eZzFgsKa4SJjiT03svhJQwvE+tGVvuSwP+iBoSAwRgd/lAnIR2nbPhDLa4Lgr/7OnIqmwF6KGTk0aeipMvguYo1lbIa8lfCrcg26F3iEKl0yAS1fUyjZNhrxtxqajTZWEcdfzvlOPEL+XecQpc1x10s3dW+Wdga7vG8jCYIHQ/1UMgHncyh+qU36UzNzHxd6UJJJaIkoUpcK/huy+ok5Me56OaLrINkXyJwzzN1Ww=="}},"tbs_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","tbs_noct_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","validation_level":"unknown","validity":{"end":"2026-06-06T08:01:29Z","length":"315360000","start":"2016-06-08T08:01:29Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ctnca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["http://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ctnca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32"},"fingerprint_md5":"4fc8a7335425177bc1077fa16b4c21d7","fingerprint_sha1":"96002650cc3818adb7bc358b15af098a0bd0aeb6","fingerprint_sha256":"9e852c59dfc6fd6abd4e17ea80b5f4e56fc04192d107258d54da8a92528670d6","issuer":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","redacted":false,"serial_number":"276871114946875026480589573694201475398","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"0YQvslR3xfyBXDTSm5MV9WlbAmdH2trfjMchXLOyjqltXxqTjsnLoIThZ2zPpc+GN4LeUWjhSU5u2FVGWd++dbObb/J4V3l360SKUDewrvjXouOex5Q8RFCLT5ZGJw23Q3rP/ek9fXCAndU5iD3pGEV4srj1uFoMer8pJpPdcS5CdMu+E81bVKH1ReOOql73mveczac2AlTIPgDl92WcsvV30k+oOLpvnMPyHb99XW5yXQczDoBx97sNmDImUIA6rzURPsALPj0xRCCh5gXP7dZ90ob4PXuvDPuWUTPGxFhqoC6n63k4ArAkHL/TA2MPUxVG0te0XROjbYj37M05Mg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"065723223cd5872f3812ee7d9110b6ab8d90ff39faa9178a4609aab8a54aff08","subject":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","subject_key_info":{"fingerprint_sha256":"33b683fc79a0cbb085f2c4dd76be6ca3531958406e35f2c87467b58efcb45fa1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"x4by13gOJMgVWA69dibrI1vvxzz1qQZlp0mQvYGnWzVwg/xpR6xq7kVqyp9GAWrG6J14uRS0aJ+9e2ggg7dvu1EZyceJixrd1+98h9yPk/gjrskxTriyHevI2FeL3wZtTfzdfyqIRq/Pke3k+H+GoH11UPoA2U96Rk8sKnPSCHeLh2hY1vpq+b1X7u1oy/ANtIzmsL5aldiuP6kq4z2bKh5c3+Oix4G0BCtRI0z7Ba37wEMbxqR4hCABbEvtXdsTyBCVSMb6vishm1v9EiSI+/0n2KPiLbydmuPxtiX6DxfcEwgtDfFOSPyl8Y2GFwXCBPaUNek9uE/nazHzxtpmLQ=="}},"tbs_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","tbs_noct_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","validation_level":"unknown","validity":{"end":"2027-06-09T10:46:39Z","length":"402101199","start":"2014-09-11T12:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7"},"fingerprint_md5":"6b64fefc8e8a0c01507f2df98cf8bc8b","fingerprint_sha1":"794e7e547fcc2d61e80c5f500261865e91695191","fingerprint_sha256":"2d87ff20fe8ad2305dfb6f3992867ed2bf4fe3e1346212c4345991aac02266e9","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"47728425367563953368335862826026879003","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"USBgXmatRbG59gzRGvF+JagKenTLbGXR15RiwVsijB7ZzvMYyclsYVXuTtnG6PIeu7OW9lxtqvYpF5T87sqAJTf4wN+Q0vkKPcD28NOztr77XYABtfTzijktgCk7Vj37vFD0lbHJwc+xh7wTgpAsRhW97/wDGZ44BMT4LQqCMDJXBRQBwkc1HE0/s/Zds3PWgadoBt+ayNXFt0ZSJO6KzWZemsByFdYBWpVx2ft6JTuiEaVgpVxU2HZ0ysQS/FquVi6/pemfleHCC/09PgWNNfVPM2GsmGQ12/ORUJVC07z3Djt2E2lHcB4ghwookSpe6aqpMsS2M/n9X3llIaxqKQ=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"ce331549a8e517fcff45c65665cbc1cafaaf1b9b6ed2e415ce56bac651e9dfa3","subject":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","subject_key_info":{"fingerprint_sha256":"aa2630a7b617b04d0a294bab7a8caaa5016e6dbe604837a83a85719fab667eb5","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQ=="}},"tbs_fingerprint":"241cb0fac2b1d3a95ea92c6e9de0f591db6d1569156a45ff0325ea03d27f3f71","tbs_noct_fingerprint":"3a69d0701a214f43e24d02241642499a5a52bf83302bb1c72c3710a50fd99123","validation_level":"unknown","validity":{"end":"2025-12-30T23:59:59Z","length":"542461942","start":"2008-10-22T12:07:37Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true}},"fingerprint_md5":"2c8f9f661d1890b147269d8e86828ca9","fingerprint_sha1":"6252dc40f71143a22fde9ef7348e064251b18118","fingerprint_sha256":"d8e0febc1db2e38d00940f37d27d41344d993e734b99d5656d9778d4d8143624","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"65568","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"706811a5e9363ee2a1b5f46e333c97bae8e944aa4abf8ae8438456567668a3eb","subject":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"subject_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","subject_key_info":{"fingerprint_sha256":"9736ac3b25d16c45a45418a964578156480a8cc434541ddc5dd59233229868de","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"zrHBLtNPfM0lzhg+T8SMb4Bqc8hbUfib0ty7AFyxoPx1A+6B8IjuI1Lp5hUzjawtCcV2+Ss5gInkl0uQpah4+HNDe6RhsNhYzOFsZn6c8wleVWOE1ajv87EuMGizxDzYrG6NmVqQTjTcNpqPgYhQt22WQgnz15WDDUFLsGpr+PwPfmKfZ8TtJl8QJg8IT/CkVyjOj7jtRfZu7iVdqm45vuSTL9lHoHLr+qZbr8pTP+IOxpZWEW736WapJth/lVPtCoWIuk8ppUKMXrb8hSAAqmgLoRqFAZzERmOCiLYise7+qkZZfs81LNW22l33SDMUVLbr2W/OzYjWqxvaljsdWQ=="}},"tbs_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","tbs_noct_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","validation_level":"unknown","validity":{"end":"2027-06-11T10:46:39Z","length":"788918400","start":"2002-06-11T10:46:39Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: certificate has expired or is not yet valid","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-10T07:14:48Z"}}},"p587":{"smtp":{"starttls":{"banner":"220 cloudserver3122037.home.pl ESMTP IdeaSmtpServer 0.83.415 ready.","ehlo":"250-cloudserver3122037.home.pl Hello worker-06.sfj.censys-scanner.com [192.35.168.96], pleased to meet you\r\n250-PIPELINING\r\n250-ENHANCEDSTATUSCODES\r\n250-SIZE\r\n250-8BITMIME\r\n250-STARTTLS\r\n250-AUTH PLAIN LOGIN\r\n250-AUTH=PLAIN LOGIN\r\n250 HELP","starttls":"220 Begin TLS negotiation","tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/hsha2.cer"],"ocsp_urls":["http://h.ocsp-certum.com"]},"authority_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"1.2.616.1.113527.2.5.1.9.6.3","user_notice":[{"explicit_text":"Usage of this certificate is strictly subjected to the CERTUM Certification Practice Statement (CPS) incorporated by reference herein and in the repository at https://www.certum.pl/repository.","notice_reference":[{"notice_numbers":["2"],"organization":"Asseco Data Systems S.A."}]}]}],"crl_distribution_points":["http://crl.certum.pl/hsha2.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"subject_alt_name":{"dns_names":["*.online.pro","online.pro"]},"subject_key_id":"fdcb46d02a80306793fb95108611e4dc8cf1862b"},"fingerprint_md5":"c7343345d5c57f09e7c4d03b9e1b4b0a","fingerprint_sha1":"9ab2ae378d5d5d2c675d49486bb79413c5d2132d","fingerprint_sha256":"92eec3e4ce432e94d8d32381d3981513aa0f1f525390df6e10774b497f795263","issuer":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"issuer_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","names":["*.online.pro","online.pro"],"redacted":false,"serial_number":"158964248105662116706893520062302579650","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"D13JLfl+DmmuaGqIk7M9+2ZGn8GJp6Xr+1Lsr4OpshVALpIetHWodf3AU4TW4Mcofe1Eac0WT/7Il/+8WfmBBlo1EV0LcqfPY8XoNfiFUZ1qm1Tfi5Mr8Yn9blPQyEw0OVmpu6sfrYEFTHj+9yKP4UyKg6bIK4CHAsjAx5EAPr/qsXMxfDsbAAXok/ioDnM0q6iyo45lVOjPsl+uuQrO+Rci2DP29w0bqBPELMONelUQAG24+kFoKIRWQXPs7TJ+BdV4YkvtAjoK87cjiPDIY8SeJYczSOQwEGegb9aFDu0WPLy2qI/Ik1vD6yvs9LE//aLUsicY84Z/hWG1syUmBQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"b6b316cba73a3f1334a1fe2d31e8db8fdd14b6f865e5afbad8da39fc3c9db8d7","subject":{"common_name":["*.online.pro"],"country":["PL"]},"subject_dn":"C=PL, CN=*.online.pro","subject_key_info":{"fingerprint_sha256":"cc0341bc46fb2aaa6b75a6142eb830e6e3af3fdf3d3e98317012cdbccd6e3778","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"oDi/0tcuDB1yWEW3X9GUP6SLohvXQjuysEHd1hi7BLrn/Svpc5ggzN+xTcVgceWsD70wA6IcwjOH+ubmkHRk0+pGCy/efO6Oq8GoNBAHu8kMJuezY9BxRqP+iu+3cv4ouvI6brAUgT43cbKW1g47HbyqtNdabsf1Y0RKIdTHyQzglBzsx+EicePiLosOvUBWsuGcoC6dMlfQmwKViJY3x4p6EiRNm8wyw6MxbtxE7UwxXgvcQOk9lGQ0celHQw5SdEA+F8O2EIIglZNsBFIzO441bB1Q3Hhlu8LIAs+OaMMd43L9osKH0RE+Hx9mDtnI8pU0Wf9E0a+SC2rMkBowBQ=="}},"tbs_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","tbs_noct_fingerprint":"f64981343ead8dd63c75abcb727149b2c4f02837060796026a1888c226886e85","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGwA=="}],"validation_level":"unknown","validity":{"end":"2019-10-24T10:58:31Z","length":"94608000","start":"2016-10-24T10:58:31Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/gscasha2.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32","basic_constraints":{"is_ca":true,"max_path_len":"0"},"crl_distribution_points":["http://crl.certum.pl/gscasha2.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"3d91b6cc117bebe46611acd2d207cba9a4807331"},"fingerprint_md5":"e33a0298518b6612d3dd778363f0c951","fingerprint_sha1":"d29845169071fc79fa782962003f93ac8f977515","fingerprint_sha256":"a95f23b52af10895886fb65323d29a9876ea7d396f805e4ca280d561c26e3dad","issuer":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","redacted":false,"serial_number":"255020787367701009965542807920061370","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"QRrqx1enIkk1aojYJbYkIpYJWXyXAaPTKTGAyBVJz72Si43jGGIG8kgO+3BMnr5mtOdzZpXjVq/W7q10Km2fD/Z+IiYd59tBPgOtOPG7B/tJjGNl8nNQBsuKXJSFDUZTzbWKQB9o53b1KGT/uEcFI4hixLV9Y4TkcOK2W+o/lF1VkwbLI+2PvBgafTF5fUoSKW91WwyEZ8b9inMnS0UQG+KT95sNKx1i5gGd1GNQI+mnnqFoebCmW5hzqY3pcGhsoqI0pnYNBmbn2IQXmMUDV6XYVsQ0SMwE/PdMKqe+z1ykxTGWktEGmc+5OKPyv1RiVVlpGNcbi+GZfFrxHFVhCg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"248bae0f6f272561324195d3bb37562cea2366d88e6d08cdcfd5dff6cd5f8965","subject":{"common_name":["Certyfikat SSL"],"country":["PL"],"organization":["home.pl S.A."]},"subject_dn":"C=PL, O=home.pl S.A., CN=Certyfikat SSL","subject_key_info":{"fingerprint_sha256":"e4f2788c1d6c8c9e64c776b40ecda7a093dcd3b64e6ffcb5bd1d6d375b7916c4","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"sOjOrZa141PYKzI7kJj2sI3id5YbKP7bpdRhLmigz63MWUytt02Tcn5ojs/wBvb2qVK49GCkcyL74Cil5o5iyLC5Ulmqc3ZbU8LqG59v2ZUy/eZzFgsKa4SJjiT03svhJQwvE+tGVvuSwP+iBoSAwRgd/lAnIR2nbPhDLa4Lgr/7OnIqmwF6KGTk0aeipMvguYo1lbIa8lfCrcg26F3iEKl0yAS1fUyjZNhrxtxqajTZWEcdfzvlOPEL+XecQpc1x10s3dW+Wdga7vG8jCYIHQ/1UMgHncyh+qU36UzNzHxd6UJJJaIkoUpcK/huy+ok5Me56OaLrINkXyJwzzN1Ww=="}},"tbs_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","tbs_noct_fingerprint":"3fdf9cb7d2717558f0e812925402676e2ad21b58a3ace75d746fe478f931b393","validation_level":"unknown","validity":{"end":"2026-06-06T08:01:29Z","length":"315360000","start":"2016-06-08T08:01:29Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ctnca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"authority_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7","basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["http://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ctnca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"5499dd9bffe8a70ea3199d5bbe4257df30fc8f32"},"fingerprint_md5":"4fc8a7335425177bc1077fa16b4c21d7","fingerprint_sha1":"96002650cc3818adb7bc358b15af098a0bd0aeb6","fingerprint_sha256":"9e852c59dfc6fd6abd4e17ea80b5f4e56fc04192d107258d54da8a92528670d6","issuer":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"issuer_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","redacted":false,"serial_number":"276871114946875026480589573694201475398","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"0YQvslR3xfyBXDTSm5MV9WlbAmdH2trfjMchXLOyjqltXxqTjsnLoIThZ2zPpc+GN4LeUWjhSU5u2FVGWd++dbObb/J4V3l360SKUDewrvjXouOex5Q8RFCLT5ZGJw23Q3rP/ek9fXCAndU5iD3pGEV4srj1uFoMer8pJpPdcS5CdMu+E81bVKH1ReOOql73mveczac2AlTIPgDl92WcsvV30k+oOLpvnMPyHb99XW5yXQczDoBx97sNmDImUIA6rzURPsALPj0xRCCh5gXP7dZ90ob4PXuvDPuWUTPGxFhqoC6n63k4ArAkHL/TA2MPUxVG0te0XROjbYj37M05Mg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"065723223cd5872f3812ee7d9110b6ab8d90ff39faa9178a4609aab8a54aff08","subject":{"common_name":["Certum Global Services CA SHA2"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Global Services CA SHA2","subject_key_info":{"fingerprint_sha256":"33b683fc79a0cbb085f2c4dd76be6ca3531958406e35f2c87467b58efcb45fa1","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"x4by13gOJMgVWA69dibrI1vvxzz1qQZlp0mQvYGnWzVwg/xpR6xq7kVqyp9GAWrG6J14uRS0aJ+9e2ggg7dvu1EZyceJixrd1+98h9yPk/gjrskxTriyHevI2FeL3wZtTfzdfyqIRq/Pke3k+H+GoH11UPoA2U96Rk8sKnPSCHeLh2hY1vpq+b1X7u1oy/ANtIzmsL5aldiuP6kq4z2bKh5c3+Oix4G0BCtRI0z7Ba37wEMbxqR4hCABbEvtXdsTyBCVSMb6vishm1v9EiSI+/0n2KPiLbydmuPxtiX6DxfcEwgtDfFOSPyl8Y2GFwXCBPaUNek9uE/nazHzxtpmLQ=="}},"tbs_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","tbs_noct_fingerprint":"b2f3dad9ac9e53744debdabf3fd0883886aa30c0706974f79240cffde214bf34","validation_level":"unknown","validity":{"end":"2027-06-09T10:46:39Z","length":"402101199","start":"2014-09-11T12:00:00Z"},"version":"3"}},{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://repository.certum.pl/ca.cer"],"ocsp_urls":["http://subca.ocsp-certum.com"]},"basic_constraints":{"is_ca":true},"certificate_policies":[{"cps":["https://www.certum.pl/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl.certum.pl/ca.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"value":"96"},"subject_key_id":"0876cdcb07ff24f6c5cdedbb90bce284374675f7"},"fingerprint_md5":"6b64fefc8e8a0c01507f2df98cf8bc8b","fingerprint_sha1":"794e7e547fcc2d61e80c5f500261865e91695191","fingerprint_sha256":"2d87ff20fe8ad2305dfb6f3992867ed2bf4fe3e1346212c4345991aac02266e9","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"47728425367563953368335862826026879003","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"USBgXmatRbG59gzRGvF+JagKenTLbGXR15RiwVsijB7ZzvMYyclsYVXuTtnG6PIeu7OW9lxtqvYpF5T87sqAJTf4wN+Q0vkKPcD28NOztr77XYABtfTzijktgCk7Vj37vFD0lbHJwc+xh7wTgpAsRhW97/wDGZ44BMT4LQqCMDJXBRQBwkc1HE0/s/Zds3PWgadoBt+ayNXFt0ZSJO6KzWZemsByFdYBWpVx2ft6JTuiEaVgpVxU2HZ0ysQS/FquVi6/pemfleHCC/09PgWNNfVPM2GsmGQ12/ORUJVC07z3Djt2E2lHcB4ghwookSpe6aqpMsS2M/n9X3llIaxqKQ=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"ce331549a8e517fcff45c65665cbc1cafaaf1b9b6ed2e415ce56bac651e9dfa3","subject":{"common_name":["Certum Trusted Network CA"],"country":["PL"],"organization":["Unizeto Technologies S.A."],"organizational_unit":["Certum Certification Authority"]},"subject_dn":"C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA","subject_key_info":{"fingerprint_sha256":"aa2630a7b617b04d0a294bab7a8caaa5016e6dbe604837a83a85719fab667eb5","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQ=="}},"tbs_fingerprint":"241cb0fac2b1d3a95ea92c6e9de0f591db6d1569156a45ff0325ea03d27f3f71","tbs_noct_fingerprint":"3a69d0701a214f43e24d02241642499a5a52bf83302bb1c72c3710a50fd99123","validation_level":"unknown","validity":{"end":"2025-12-30T23:59:59Z","length":"542461942","start":"2008-10-22T12:07:37Z"},"version":"3"}},{"parsed":{"extensions":{"basic_constraints":{"is_ca":true}},"fingerprint_md5":"2c8f9f661d1890b147269d8e86828ca9","fingerprint_sha1":"6252dc40f71143a22fde9ef7348e064251b18118","fingerprint_sha256":"d8e0febc1db2e38d00940f37d27d41344d993e734b99d5656d9778d4d8143624","issuer":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"issuer_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","redacted":false,"serial_number":"65568","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"706811a5e9363ee2a1b5f46e333c97bae8e944aa4abf8ae8438456567668a3eb","subject":{"common_name":["Certum CA"],"country":["PL"],"organization":["Unizeto Sp. z o.o."]},"subject_dn":"C=PL, O=Unizeto Sp. z o.o., CN=Certum CA","subject_key_info":{"fingerprint_sha256":"9736ac3b25d16c45a45418a964578156480a8cc434541ddc5dd59233229868de","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"zrHBLtNPfM0lzhg+T8SMb4Bqc8hbUfib0ty7AFyxoPx1A+6B8IjuI1Lp5hUzjawtCcV2+Ss5gInkl0uQpah4+HNDe6RhsNhYzOFsZn6c8wleVWOE1ajv87EuMGizxDzYrG6NmVqQTjTcNpqPgYhQt22WQgnz15WDDUFLsGpr+PwPfmKfZ8TtJl8QJg8IT/CkVyjOj7jtRfZu7iVdqm45vuSTL9lHoHLr+qZbr8pTP+IOxpZWEW736WapJth/lVPtCoWIuk8ppUKMXrb8hSAAqmgLoRqFAZzERmOCiLYise7+qkZZfs81LNW22l33SDMUVLbr2W/OzYjWqxvaljsdWQ=="}},"tbs_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","tbs_noct_fingerprint":"5066aadb5d4fd15d89907ae1a85c3e26f79a2e24a8c6b68a0238a7fcfc97ab57","validation_level":"unknown","validity":{"end":"2027-06-11T10:46:39Z","length":"788918400","start":"2002-06-11T10:46:39Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: certificate has expired or is not yet valid","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-11T03:02:24Z"}}},"location":{"country_code":"PL","continent":"Europe","timezone":"Europe/Warsaw","latitude":52.2394,"longitude":21.0362,"registered_country":"Poland","registered_country_code":"PL","country":"Poland"},"autonomous_system":{"description":"HOMEPL-AS","routed_prefix":"46.41.128.0/18","asn":"12824","country_code":"PL","name":"HOMEPL-AS","path":["7018","174","12824"]},"protocols":["110/pop3","143/imap","21/ftp","25/smtp","3306/mysql","443/https","465/smtp","5432/postgres","587/smtp","80/http","993/imaps","995/pop3s"],"ipinteger":"2074290478"} +{"address":"192.229.96.79","ip":"192.229.96.79","p80":{"http":{"get":{"body":"未绑定","body_sha256":"e026c6693dc517e4a600f2bf2c608a8aba4b0526a481a6ec7c93843ede7bdc5a","headers":{"connection":"keep-alive","content_type":"text/html; charset=UTF-8","server":"nginx","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 14:53:58 GMT"}],"vary":"Accept-Encoding"},"metadata":{"description":"nginx","product":"nginx"},"status_code":"200","status_line":"200 OK","timestamp":"2020-07-07T14:53:58Z"}}},"ports":["80","21","443"],"version":"0","p21":{"ftp":{"banner":{"banner":"220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------\r\n220-You are user number 2 of 50 allowed.\r\n220-Local time is now 03:32. Server port: 21.\r\n220-This is a private system - No anonymous login\r\n220-IPv6 connections are also welcome on this server.\r\n220 You will be disconnected after 15 minutes of inactivity.","metadata":{"description":"Pure-FTPd","product":"Pure-FTPd"},"timestamp":"2020-07-13T19:32:18Z"}}},"tags":["ftp","http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cert.int-x3.letsencrypt.org/"],"ocsp_urls":["http://ocsp.int-x3.letsencrypt.org"]},"authority_key_id":"a84a6a63047dddbae6d139b7a64565eff3a8eca1","basic_constraints":{"is_ca":false},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["http://cps.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1"}],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"5xLysDd+GmL7jskMYYTx6ns3y1YdESZb8+DzS/JBVG4=","signature":"BAMARzBFAiEA1zbAE/hvuuqaAHOwphRLIda0zehXVf9e7EixQFqIEssCIAwIRXNcatgAA+xgy44LKMzvg0WcBpSHUF4IK+vSL0RD","timestamp":"1593998534","version":"0"},{"log_id":"sh4FzIuizYogTodm+Su5iiUgZ2va+nDnsklTLe+LkF4=","signature":"BAMARzBFAiBZMIMwZ39pLG39WgcirnwU9oGTtynhM/5HWWEsbz2u6QIhAIPqPbPR5R+vaRit4SOZl4cAfvY/7UFnZQOkf893RICD","timestamp":"1593998534","version":"0"}],"subject_alt_name":{"dns_names":["lanseapp.cc","m.lanseapp.cc"]},"subject_key_id":"cc8e8223f6a6dfc7d704f5a809afa1ccdd79eb79"},"fingerprint_md5":"c747b141b4b813c8b336186be14b68fd","fingerprint_sha1":"ac00d193eeb249c9b0a650a6bf157222af327d40","fingerprint_sha256":"4deae4f62de68dac2f143d0655814fa42687933ec27e92eb0a3a47cf314858ba","issuer":{"common_name":["Let's Encrypt Authority X3"],"country":["US"],"organization":["Let's Encrypt"]},"issuer_dn":"C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3","names":["lanseapp.cc","m.lanseapp.cc"],"redacted":false,"serial_number":"376395194615092860547271473932083702743543","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"a/QkfSBe6R0mmHf615rtiS8Ywn/qtAiH2hmaPg6BWHosSX49elMrPXR9rGRv5pOgh5z2zLcJCO9o6fezg4JvmsPpfJBqf3wFlL4Q3zc2JG+Rase0gWBRHX4RnRGy1PO0f2IWKNcWA+6RRERSzcpzdEplCGZDL6PFx+ubQsORf8T5l2V8vYq/8flD9xAFLLhuzmMSiqWbf6V0uB4+w5JCvZNRNqm7Hof2KcA/S4v5xU8R+H90khz0M9NlZMmKLCPoSVC4Ab01Lg4WFD5AisjEmonQfYuO6RlShJa/m2JSVqH8Y1KApGrnOFnEy0/J3iPTO5bvWrU58K5Fz+H9lArKeg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"179959c288099164022b5cca9efe6c8a823265279aea0997f9e1fd93dec36e3f","subject":{"common_name":["lanseapp.cc"]},"subject_dn":"CN=lanseapp.cc","subject_key_info":{"fingerprint_sha256":"10ff9c63a278c1f57b44202aaaecce79adb2800c51eb7ae540c9361f05db2353","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"pwZb7QC+y+jcFC3FPtZGkMLL/hwGpWPCWkPuCUsUJHx81hvqN77Lp/NHdqoRrstQAXM6t7WqPX9iktRh8b3kMhxcFthpby6DJb0CYfmqMezpQosO55RJuDmgHLAv9rEV2nOK0cqLyo9ZCWixLMdO8i7WXfkRiJchSyTFwBESWe6E13xHFy7z/fuvGBunbvyjcqzEjPUjpGfu9FB7dhrJxwRCnAVPpcfFom2swnYDFSn67ETC9zYVnGYT9lSdNUVQXXNlwwqtweB41LeZf1f/CCSU3haoBtO+Fhk7Dq5/xr5uWdfKzIrJeVa2f0pspZlSAlr/XyPqu9D3MJ0b7sltjQ=="}},"tbs_fingerprint":"dd78229a10c7542bfdfc00e2c3ca7d748a5a6e25aab399ff7129015908b5cc89","tbs_noct_fingerprint":"8e71a79ae1044a5f85db4979d98ae6b5cb79846cb35bb912438a95310e21f4a5","validation_level":"DV","validity":{"end":"2020-10-04T00:22:14Z","length":"7776000","start":"2020-07-06T00:22:14Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://apps.identrust.com/roots/dstrootcax3.p7c"],"ocsp_urls":["http://isrg.trustid.ocsp.identrust.com"]},"authority_key_id":"c4a7b1a47b2c71fadbe14b9075ffc41560858910","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"id":"2.23.140.1.2.1"},{"cps":["http://cps.root-x1.letsencrypt.org"],"id":"1.3.6.1.4.1.44947.1.1.1"}],"crl_distribution_points":["http://crl.identrust.com/DSTROOTCAX3CRL.crl"],"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"a84a6a63047dddbae6d139b7a64565eff3a8eca1"},"fingerprint_md5":"b15409274f54ad8f023d3b85a5ecec5d","fingerprint_sha1":"e6a3b45b062d509b3382282d196efe97d5956ccb","fingerprint_sha256":"25847d668eb4f04fdd40b12b6b0740c567da7d024308eb6c2c96fe41d9de218d","issuer":{"common_name":["DST Root CA X3"],"organization":["Digital Signature Trust Co."]},"issuer_dn":"O=Digital Signature Trust Co., CN=DST Root CA X3","redacted":false,"serial_number":"13298795840390663119752826058995181320","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJouM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwuX4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlGPfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"78d2913356ad04f8f362019df6cb4f4f8b003be0d2aa0d1cb37d2fd326b09c9e","subject":{"common_name":["Let's Encrypt Authority X3"],"country":["US"],"organization":["Let's Encrypt"]},"subject_dn":"C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3","subject_key_info":{"fingerprint_sha256":"60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"nNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EFq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWAa6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3Dkw=="}},"tbs_fingerprint":"3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838","tbs_noct_fingerprint":"3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838","validation_level":"DV","validity":{"end":"2021-03-17T16:40:46Z","length":"157766400","start":"2016-03-17T16:40:46Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"176","lifetime_hint":"600"},"signature":{"hash_algorithm":"sha256","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T08:36:35Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T09:51:32Z"},"get":{"body":"\r\n\r\n\r\n 成人APP导航,让您享受激情时刻! - 蓝色导航\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n

            \r\n
            \r\n
            \r\n 成人视频精选\r\n
            \r\n \r\n
            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n
            \r\n

            \r\n

            \r\n
            \r\n
            \r\n

            下载:

            \r\n

            \r\n \r\n

            \r\n
            \r\n
            \r\n
            \r\n
            \r\n
            \r\n\r\n\r\n","body_sha256":"f087c4fce99ce084c322805fb0e449f3496976362e1938fc27eccd334bfc4612","headers":{"connection":"keep-alive","content_type":"text/html","last_modified":"Tue, 07 Jul 2020 17:26:48 GMT","server":"nginx","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 11:56:26 GMT"},{"key":"etag","value":"W/\"5f04b058-2e9e\""}],"vary":"Accept-Encoding"},"metadata":{"description":"nginx","product":"nginx"},"status_code":"200","status_line":"200 OK","title":"成人APP导航,让您享受激情时刻! - 蓝色导航","timestamp":"2020-07-14T11:56:26Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T04:30:16Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T10:11:05Z"},"dhe":{"support":false,"timestamp":"2020-07-12T09:24:11Z"}}},"ipint":"3236257871","updated_at":"2020-07-14T11:56:26Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"LEASEWEB-USA-LAX-11","routed_prefix":"192.229.64.0/18","asn":"395954","country_code":"US","name":"LEASEWEB-USA-LAX-11","path":["7018","1299","395954"]},"protocols":["21/ftp","443/https","80/http"],"ipinteger":"1331750336"} +{"metadata":{"os":"Debian,Debian"},"address":"216.237.127.202","ip":"216.237.127.202","p80":{"http":{"get":{"body":"\n\n\nRichters Herbs - Medicinal, Culinary, Aromatic - Plants & Seeds\n\n\n\n\n\n\n\n\n\n\n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
            \n
            \n\t
            \n\t\t
            \n\t\t \t\n \t\t \t\t\n \t\t \t\t\t\t\t\n\t\t \t\t\n\t\t\t
            \n\t\t\t\t\tSEARCH
            CATALOG
            \n\t\t\t\t
            \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tSearch by item name, latin name, or catalog number.\n\t\t\t\t\n \t\t \t\t\t  \"Cart\"  \n \t\t \t\t
            \n\t\t
            \n\t
            \n\t
            \n\t\n\t\t\n \t \n \t \t\t\t \t\t\t \t\t\t\n\t\t\n\t
            \n \t\t\t
              \n \t\t\t
            • \n \t\t\t Main Menu\n \t\t\t
            • \n \t\t
            \n
            \n\t\t\t\t \n
            \t\n
            \n\t
            \n\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\t\n\t\t\t\n \t\t\n \t\t\n\t\t\t\n\t\t
            \n \t\t\t\t\n \t\t\n \t\t\t\t\n \t\t\n \t\t\t\n \t\t\n \t\t\t\t\n \t\t\n \t\t\t\t\n \t\t\n \t\t\t\n \t\t
            \t\n\t
            \n\t
            \n\t\t\"Richters\n\t
            \n
            \n
            \n\t
            \n\t\t\n\t
            \n\t
            \n\t\t

            Herbs, Veggies, Dried Herbs, Books, and More!
            \n\t\twww.Richters.com

            \t\n\t
            \n\t
            \n\t
            \n
            \n
            \n\t\n\t
            \n\t\n\t\t\n\t
            \n\t\t\t

            Yes we are open! Most plants are back in stock for personal shopping and for shipping. But please note that delivery is taking longer than normal due to COVID-19. We appreciate your patience.

            \t
            \t\t\t \t\t\t\t\t
            SHOP ONLINE
            \"richters
            \"richters
            \"richters
            \"richters
            \"richters
            \"richters
            \"Rubus
            \"richters
            \t\t\t \t\t\t \t\t\t \t\t\t
            \t\t\t
            \t\t\t \t\t\t
            \t\t\t
            \t\t\t

            Herb plants, seeds, books, dried herbs and more – Richters is your best source for everything herbal!

            \t\t\t\t\t\t\t\t\t\t\t\t\t\t


            If you grow your own herbs or make your own herbal products, or if you are in the business of herbs, make Richters your destination.

            Richters has been growing and selling herbs since 1969. Our first catalogue dedicated to herbs came out in 1970. We have lived, worked and breathed herbs ever since.

            If you are in the Toronto area, come and visit our greenhouses and gift shop.

            RICHTERS HERBS
            357 Highway 47
            Goodwood, ON L0C 1A0 Canada
            Tel. +1.905.640.6677  Fax. +1.905.640.6641
            \t \t \t\t\t \t\t\t\t\t \t \t\t\t\t\t\t\t\t\t \t\t\t \t\t\t\t\t \t\t\t \t\t\t\t\t \t\t\t \t\t\t\t\t \t\t\t\t\t\t\t\t\t \t\t\t \t\t\t\t\t \t\t\t \t\t\t\t\t \t\t\t \t\t\t\t\t \t\t\t\t\t\t\t\t\t \t\t\t \t\t\t\t\t
            \"Colosso
            \"SeedZoo
            \t\t\t\t\t\t\t\t\t\t \t\t\t\t\t\t\t\t\t
            \t\t\t\t\t\t\t\t\t\t \t\t\t\t\t\t\t\t\t
            \t\t\t\t\t\t\t\t\t\t \t\t\t\t\t\t\t\t\t
            \t\t\t\t\t
            \n\t\t
            \n\t
            \n\t
            \n
            \n\t \n
              \n \t
            • Copyright © 1997-2020 Otto Richter and Sons Limited. All rights reserved. \n \tUsage prohibited without expressed written consent.
            • \n\t
            \n
              \n \t
            • \n \t
            • \n \t
            • \n \t
            • \n\t
            \n
            \n
            Copyright © 1997-2020 Otto Richter and Sons Limited. All rights reserved.
            \n
            \n\n\n","body_sha256":"995700685b74dd9d01c23b9a4b61f4b762adac54e5f92610b64dc03f24678964","headers":{"content_type":"text/html","server":"Apache/2.2.22 (Debian)","strict_transport_security":"max-age=15768000","unknown":[{"key":"date","value":"Tue, 07 Jul 2020 12:23:52 GMT"}],"vary":"Accept-Encoding"},"metadata":{"description":"Apache httpd 2.2.22","manufacturer":"Apache","product":"httpd","version":"2.2.22"},"status_code":"200","status_line":"200 OK","title":"Richters Herbs - Medicinal, Culinary, Aromatic - Plants & Seeds","timestamp":"2020-07-07T12:23:51Z"}}},"ports":["80","443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"authority_info_access":{"issuer_urls":["http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt"],"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"5168ff90af0207753cccd9656462a212b859723b","basic_constraints":{"is_ca":false},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.16.840.1.114412.1.1"},{"id":"2.23.140.1.2.2"}],"crl_distribution_points":["http://crl3.digicert.com/sha2-ha-server-g6.crl","http://crl4.digicert.com/sha2-ha-server-g6.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"digital_signature":true,"key_encipherment":true,"value":"5"},"signed_certificate_timestamps":[{"log_id":"u9nfvB+KcbWTlCOXqpJ7RzhXlQqrUugakJZkNo4e0YU=","signature":"BAMARzBFAiAFcXHm9u5Uer8z8ULseL5dp0K2UX8Czs0U+mHl/CqCbAIhALSCWazZEZuPulQFycLhrGNAXlDM8xEpg6bcSgz1crdk","timestamp":"1565393823","version":"0"},{"log_id":"h3W/51l8+IxDmV+9827/Vo1HVjb/SrVgwbTq/16ggw8=","signature":"BAMARjBEAiBnsZqqRYhNXGdjQrGmelmsfJCg0ge1ALRvMFOr7rYJfgIgGVdOMbH66VZnbrdHnOsBRaHLrWvorSYRWOlnJO1kQns=","timestamp":"1565393823","version":"0"}],"subject_alt_name":{"dns_names":["www.richters.com"]},"subject_key_id":"b985e6ef968abc0cd59468219e668cab05a9f6da"},"fingerprint_md5":"3eb175978404de9f769049b7b266c1c9","fingerprint_sha1":"7b0f7bf10026f98f5e8b06fec44e19fe17be1c7d","fingerprint_sha256":"b8705fe5013fbf34ecc6abd69b272596ad08c11cfd545c956799fd1c70bba70a","issuer":{"common_name":["DigiCert SHA2 High Assurance Server CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA","names":["www.richters.com"],"redacted":false,"serial_number":"6726605748088405591857274925989151943","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"eBPt2LwJ/rTv+xFh9B3Em+YeflJzMfdcmMNTFFLnNfNJ8EFL5kVu0fmfWETFPhUGxdTyhJDO19foVyqkp95YbmwCLOEPAytLQURpiUZOBX22VhZByZb0l/UfXSRIt9sWLtEC75oPTqnXG1oKGbHj1yw2yirplMWr3fpPPwJXv8IOFeCgc50PbyfBpblyqA3dNOk7ROIYw8l9y3SjPAkDkdQrH+2gyBVOH1wgbc1LEfduKnKrK8tGj3GNWpXiI/C2dHxzpLE+SGXg75l+hvToU7MPjzU7B0R/sSduOk8J0fJAHNNuepAB0lb8V8EqvV4VsviGmoIw8xLnhTL3GnEKeQ=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"a657c58663b0db25a170190df159d2986ff692965d069633371928c149709ed4","subject":{"common_name":["www.richters.com"],"country":["CA"],"locality":["Goodwood"],"organization":["Otto Richter and Sons Limited"],"province":["ON"]},"subject_dn":"C=CA, ST=ON, L=Goodwood, O=Otto Richter and Sons Limited, CN=www.richters.com","subject_key_info":{"fingerprint_sha256":"b3b12562137a280adf3df8e212f68c0847b11a66d052573645477ae2e153c6f3","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"uj7Eh5eiI1mpXXizIbc+INBNjpbgo/1q1KU/ljICnq7SJ2Ag3o80fk6K5gAAecRE4hfZaUEBS6vm6XxkYt34ps/Lobqhl1xy7W10fOoZsNuyT/ViGjSKj5oB/geNeILLUYdTwsMk7lXX0RW7hlzpO0TQ5mpP/YFURULeZaGtrMnVR1mUYJQA1Dj0rUPKxlq9GUtcQoVBGVmMSDok2OKPed+VMjLqHzWLpgVLd53ZyvAHgDlOQSMcGurg4cInaw5/xAwNH2P3HD3HRQZyMHptV6xixGaSB3Px4l0Y7T2dfiXF4y7dQpGJInuf9+u0mNkP51bzldgRZQjluKEcuX8NIQ=="}},"tbs_fingerprint":"5d29e6353546d34b2db21bfd9fda214b815273ede640a788b74e53631805d2cd","tbs_noct_fingerprint":"a04e195908f6e46101513a5428ccc4c4619bb21a2539057deae8a4250873d7d2","validation_level":"OV","validity":{"end":"2020-09-09T12:00:00Z","length":"34344000","start":"2019-08-09T00:00:00Z"},"version":"3"}},"chain":[{"parsed":{"extensions":{"authority_info_access":{"ocsp_urls":["http://ocsp.digicert.com"]},"authority_key_id":"b13ec36903f8bf4701d498261a0802ef63642bc3","basic_constraints":{"is_ca":true,"max_path_len":"0"},"certificate_policies":[{"cps":["https://www.digicert.com/CPS"],"id":"2.5.29.32.0"}],"crl_distribution_points":["http://crl4.digicert.com/DigiCertHighAssuranceEVRootCA.crl"],"extended_key_usage":{"client_auth":true,"server_auth":true},"key_usage":{"certificate_sign":true,"crl_sign":true,"digital_signature":true,"value":"97"},"subject_key_id":"5168ff90af0207753cccd9656462a212b859723b"},"fingerprint_md5":"aaee5cf8b0d8596d2e0cbe67421cf7db","fingerprint_sha1":"a031c46782e6e6c662c2c87c76da9aa62ccabd8e","fingerprint_sha256":"19400be5b7a31fb733917700789d2f0a2471c0c9d506c0e504c06c16d7cb17c0","issuer":{"common_name":["DigiCert High Assurance EV Root CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"issuer_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA","redacted":false,"serial_number":"6489877074546166222510380951761917343","signature":{"self_signed":false,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":true,"value":"GIqViQPmbd9c/B1o6kqPg9ZRL41rRBaerGP10m5shJmLqoFxhFvtNE6wt3mSKcwtgGrwjiDheaT+A0cT6vWGyllxffQElmvTWVg9/tMxJVwYOISj5p+C/YxbmDFOzXieGv2Fy0mq8ieLmXL8PqrVQQva1TahvxxuR0l/XtlIfAPZ/YtJoJgmQkDr1pIRpGQKV1TE9R3WAl5rrO7EgJoScvpWk9f/vzCFBjC/C39O/1cFnSTthcMr+6Z1qKwtFu99eSey68KdCwfqqoXTAaMgKEFZQyjSgeOq9ux7O3e2QGKABUFFAe8XBj7ewDObZ9NhLnKH5Gn8EgBXQB5w9R7JtA=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"4d8f65901ef8a23b1210242a5dfc786708a0d4008e7cecd03d4145a1c0834095","subject":{"common_name":["DigiCert SHA2 High Assurance Server CA"],"country":["US"],"organization":["DigiCert Inc"],"organizational_unit":["www.digicert.com"]},"subject_dn":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA","subject_key_info":{"fingerprint_sha256":"936bfae7bc41b0e55ed4f411c0eb07b30ddbb064f657322acf92bee7db0d430b","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"tuAvwiQGyG0EX9fvCmQGsn0iJmUWrkJAm87cn592Bz7DMFWHGblPlA5alB9VVrTCAiqv0JjuC0DXxNA7csgUnu+QsRGprtLIuEM62QsL1dWV9UCvyB3tTZxfV7eGUGiZ9Yra0scFH6iXydyksYKELcatpZzHGYKmhQ9eRFgqN4/9NfELCCcyWvW7i56kvVHQJ+LdO0IzowUoxLsozJqsKyMNeMZ75l5xt0o+CPuBtxYWoZ0jEk3l15IIrHWknLrNF7IeRDVlf1MlOdEcCppjGxmSdGgKN8LCUkjLOVqituFdwd2gILghopMmbxRKIUHH7W2b8kgv8wP1omiSUy9e4w=="}},"tbs_fingerprint":"ac5d79b4a1e84b9ea1f7f72b022158540f37c8557fc99f0c08b37f670632a177","tbs_noct_fingerprint":"ac5d79b4a1e84b9ea1f7f72b022158540f37c8557fc99f0c08b37f670632a177","validation_level":"unknown","validity":{"end":"2028-10-22T12:00:00Z","length":"473385600","start":"2013-10-22T12:00:00Z"},"version":"3"}}],"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"192","lifetime_hint":"7200"},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_trusted":true},"version":"TLSv1.2","timestamp":"2020-07-09T18:01:08Z"},"heartbleed":{"heartbeat_enabled":true,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T04:17:05Z"},"get":{"body":"\n\n\nRichters Herbs - Medicinal, Culinary, Aromatic - Plants & Seeds\n\n\n\n\n\n\n\n\n\n\n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
            \n
            \n\t
            \n\t\t
            \n\t\t \t\n \t\t \t\t\n \t\t \t\t\t\t\t\n\t\t \t\t\n\t\t\t
            \n\t\t\t\t\tSEARCH
            CATALOG
            \n\t\t\t\t
            \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tSearch by item name, latin name, or catalog number.\n\t\t\t\t\n \t\t \t\t\t  \"Cart\"  \n \t\t \t\t
            \n\t\t
            \n\t
            \n\t
            \n\t\n\t\t\n \t \n \t \t\t\t \t\t\t \t\t\t\n\t\t\n\t
            \n \t\t\t
              \n \t\t\t
            • \n \t\t\t Main Menu\n \t\t\t
            • \n \t\t
            \n
            \n\t\t\t\t \n
            \t\n
            \n\t
            \n\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\t\n\t\t\t\n \t\t\n \t\t\n\t\t\t\n\t\t
            \n \t\t\t\t\n \t\t\n \t\t\t\t\n \t\t\n \t\t\t\n \t\t\n \t\t\t\t\n \t\t\n \t\t\t\t\n \t\t\n \t\t\t\n \t\t
            \t\n\t
            \n\t
            \n\t\t\"Richters\n\t
            \n
            \n
            \n\t
            \n\t\t\n\t
            \n\t
            \n\t\t

            Herbs, Veggies, Dried Herbs, Books, and More!
            \n\t\twww.Richters.com

            \t\n\t
            \n\t
            \n\t
            \n
            \n
            \n\t\n\t
            \n\t\n\t\t\n\t
            \n\t\t\t

            Yes we are open! Most plants are back in stock for personal shopping and for shipping. But please note that delivery is taking longer than normal due to COVID-19. We appreciate your patience.

            \t
            \t\t\t \t\t\t\t\t
            SHOP ONLINE
            \"richters
            \"richters
            \"richters
            \"richters
            \"richters
            \"richters
            \"Rubus
            \"richters
            \t\t\t \t\t\t \t\t\t \t\t\t
            \t\t\t
            \t\t\t \t\t\t
            \t\t\t
            \t\t\t

            Herb plants, seeds, books, dried herbs and more – Richters is your best source for everything herbal!

            \t\t\t\t\t\t\t\t\t\t\t\t\t\t


            If you grow your own herbs or make your own herbal products, or if you are in the business of herbs, make Richters your destination.

            Richters has been growing and selling herbs since 1969. Our first catalogue dedicated to herbs came out in 1970. We have lived, worked and breathed herbs ever since.

            If you are in the Toronto area, come and visit our greenhouses and gift shop.

            RICHTERS HERBS
            357 Highway 47
            Goodwood, ON L0C 1A0 Canada
            Tel. +1.905.640.6677  Fax. +1.905.640.6641
            \t \t \t\t\t \t\t\t\t\t \t \t\t\t\t\t\t\t\t\t \t\t\t \t\t\t\t\t \t\t\t \t\t\t\t\t \t\t\t \t\t\t\t\t \t\t\t\t\t\t\t\t\t \t\t\t \t\t\t\t\t \t\t\t \t\t\t\t\t \t\t\t \t\t\t\t\t \t\t\t\t\t\t\t\t\t \t\t\t \t\t\t\t\t
            \"Colosso
            \"SeedZoo
            \t\t\t\t\t\t\t\t\t\t \t\t\t\t\t\t\t\t\t
            \t\t\t\t\t\t\t\t\t\t \t\t\t\t\t\t\t\t\t
            \t\t\t\t\t\t\t\t\t\t \t\t\t\t\t\t\t\t\t
            \t\t\t\t\t
            \n\t\t
            \n\t
            \n\t
            \n
            \n\t \n
              \n \t
            • Copyright © 1997-2020 Otto Richter and Sons Limited. All rights reserved. \n \tUsage prohibited without expressed written consent.
            • \n\t
            \n
              \n \t
            • \n \t
            • \n \t
            • \n \t
            • \n\t
            \n
            \n
            Copyright © 1997-2020 Otto Richter and Sons Limited. All rights reserved.
            \n
            \n\n\n","body_sha256":"1ec1b071726e280fc646eae579dc66197ce0e93701f69f06b914b5ce630f0a52","headers":{"content_type":"text/html","server":"Apache/2.2.22 (Debian)","strict_transport_security":"max-age=15768000","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 17:37:57 GMT"}],"vary":"Accept-Encoding"},"metadata":{"description":"Apache httpd 2.2.22","manufacturer":"Apache","product":"httpd","version":"2.2.22"},"status_code":"200","status_line":"200 OK","title":"Richters Herbs - Medicinal, Culinary, Aromatic - Plants & Seeds","timestamp":"2020-07-13T17:37:57Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T10:04:20Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T11:50:57Z"},"dhe":{"support":false,"timestamp":"2020-07-12T03:09:45Z"}}},"ipint":"3639443402","updated_at":"2020-07-14T04:17:05Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"INFORTECH-001","routed_prefix":"216.237.127.0/24","asn":"32736","country_code":"US","name":"INFORTECH-001","path":["7018","174","32736"]},"protocols":["443/https","80/http"],"ipinteger":"-897585704"} +{"address":"93.178.40.245","ipint":"1571956981","updated_at":"2020-07-15T06:50:32Z","p7547":{"cwmp":{"get":{"headers":{"connection":"Keep-Alive","content_length":"0","www_authenticate":"Digest realm=\"HuaweiHomeGateway\",nonce=\"bb6c02a20c9d6fb7b9c58edf963a579d\", qop=\"auth\", algorithm=\"MD5\""},"status_code":"401","status_line":"401 Unauthorized","timestamp":"2020-07-15T06:50:32Z"}}},"ip":"93.178.40.245","location":{"country_code":"SA","continent":"Asia","city":"Riyadh","timezone":"Asia/Riyadh","province":"Riyadh Region","latitude":24.6537,"longitude":46.7152,"registered_country":"Saudi Arabia","registered_country_code":"SA","country":"Saudi Arabia"},"autonomous_system":{"description":"MTC-KSA-AS","routed_prefix":"93.178.32.0/20","asn":"43766","country_code":"SA","name":"MTC-KSA-AS","path":["7018","1299","59605","43766"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-181882275","version":"0","tags":["cwmp"]} +{"address":"109.151.128.135","ipint":"1838645383","updated_at":"2020-07-15T09:32:04Z","p7547":{"cwmp":{"get":{"headers":{"content_length":"0","server":"gSOAP/2.7"},"status_code":"404","status_line":"404 Not Found","timestamp":"2020-07-15T09:32:04Z"}}},"ip":"109.151.128.135","location":{"country_code":"GB","continent":"Europe","city":"Knaresborough","postal_code":"HG5","timezone":"Europe/London","province":"England","latitude":54.0441,"longitude":-1.4107,"registered_country":"United Kingdom","registered_country_code":"GB","country":"United Kingdom"},"autonomous_system":{"description":"BT-UK-AS BTnet UK Regional network","routed_prefix":"109.144.0.0/12","asn":"2856","country_code":"GB","name":"BT-UK-AS BTnet UK Regional network","path":["11164","5400","2856"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-2021615763","version":"0","tags":["cwmp"]} +{"address":"153.126.148.60","ip":"153.126.148.60","p80":{"http":{"get":{"body":"\n\n403 Forbidden\n\n

            Forbidden

            \n

            You don't have permission to access /\non this server.

            \n\n","body_sha256":"e6134491cb1cd3e211b94d20b48482caeec46813007e918bc824a06f102ff021","headers":{"content_type":"text/html; charset=iso-8859-1","server":"Apache","unknown":[{"key":"date","value":"Tue, 30 Jun 2020 15:46:46 GMT"}],"vary":"Accept-Encoding"},"metadata":{"description":"Apache httpd","manufacturer":"Apache","product":"httpd"},"status_code":"403","status_line":"403 Forbidden","title":"403 Forbidden","timestamp":"2020-06-30T15:46:45Z"}}},"ports":["80","465","993","995","25","443","587","110","143"],"version":"0","tags":["http","https","imap","imaps","pop3","pop3s","smtp"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"basic_constraints":{"is_ca":false},"key_usage":{"content_commitment":true,"digital_signature":true,"key_encipherment":true,"value":"7"}},"fingerprint_md5":"9b29ecc02f7ae02b752aed672b40a840","fingerprint_sha1":"f66395f114727c71daec03acf99d3de5e6b10766","fingerprint_sha256":"720bf95038fd667b7e958b6773d90b9dfb18b194725d364859ead4755e10e5ca","issuer":{"common_name":["otakukonkatsu.com"],"country":["--"],"email_address":["root@otakukonkatsu.com"],"locality":["SomeCity"],"organization":["SomeOrganization"],"organizational_unit":["SomeOrganizationalUnit"],"province":["SomeState"]},"issuer_dn":"C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com","names":["otakukonkatsu.com"],"redacted":false,"serial_number":"10308","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"Ybk9fBqSCCWOpnpa9KGvONfCzHaaM5NpebUHk1tuC2TF0jrMi6ba5S2uEsQfGybxEk0Iv2j8kQYwnUnST4+uWFUj2+nuj0dfjGwlBEtA3PL97WSyjbblaLChdJ7quGkzOohzO7lTdVKCv2iR7mEp9ac2ldPdPxTkOmzx8diFnHGotL2vcNP0sfEqkJzvFdpwJnQMoPx7erDyeVb/SE4lieIUpAdn7LUVsAAnJf0C7lIgs5bpOiGF9nbwIOxv5a5pJNtTalNOC0+kamK3KPTobxWhbmkl39HNqD6m3AhksBzSifvC0seVHpbWn6AEA8w4ITzY0eyxNTSt+TvO1/Mk5A=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d2f3b9238775b2ff36a5194d808c7b59892dcad94e4bddc8a83224a6a08aa83f","subject":{"common_name":["otakukonkatsu.com"],"country":["--"],"email_address":["root@otakukonkatsu.com"],"locality":["SomeCity"],"organization":["SomeOrganization"],"organizational_unit":["SomeOrganizationalUnit"],"province":["SomeState"]},"subject_dn":"C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com","subject_key_info":{"fingerprint_sha256":"f73b8fb390a439ec73a10655f9ae3fd5fcef470f3b141b9c5f1cc4e3bde10b40","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wVLn3KpwCaMbah5ScJpVaq9WvOAxzo1U/jv1Yg5iRrpACCszP7IPBe7pzSB/duhXwqUAMLRwebX5VR9oY96PZfOvjnidGvB8hSqLwmEdvTiA1q4H8kX8eYDhtz8fzle1qTtXb6nQnuRvhYKg0O3Cci2EPuSTOObJce4KYq+kKsuqqXto6wGgUe1zG4aHBN5C+J193laZcp+OV9ds94sl9dWqtXhB6x3TJDeXIEiGSo3lEwI8GewbxZW53ryRUqLjMg30rkCXfxvCAiGhDzYQTvwgm/cz8Lg0PSSPfK2NPaCuE/v0hF/hexDu9xKisEyacHLeY98VjKJXSXxfcMUPHQ=="}},"tbs_fingerprint":"e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6","tbs_noct_fingerprint":"e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6","validation_level":"unknown","validity":{"end":"2019-08-21T06:54:56Z","length":"31536000","start":"2018-08-21T06:54:56Z"},"version":"3"}},"cipher_suite":{"id":"0xC02F","name":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"session_ticket":{"length":"192","lifetime_hint":"300"},"signature":{"hash_algorithm":"sha512","signature_algorithm":"rsa","valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2","timestamp":"2020-07-09T23:00:58Z"},"heartbleed":{"heartbeat_enabled":true,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T11:48:41Z"},"get":{"body":"\n\n403 Forbidden\n\n

            Forbidden

            \n

            You don't have permission to access /\non this server.

            \n\n","body_sha256":"e6134491cb1cd3e211b94d20b48482caeec46813007e918bc824a06f102ff021","headers":{"content_type":"text/html; charset=iso-8859-1","server":"Apache","strict_transport_security":"max-age=15768000","unknown":[{"key":"date","value":"Mon, 13 Jul 2020 12:50:53 GMT"}],"vary":"Accept-Encoding"},"metadata":{"description":"Apache httpd","manufacturer":"Apache","product":"httpd"},"status_code":"403","status_line":"403 Forbidden","title":"403 Forbidden","timestamp":"2020-07-13T12:50:53Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T10:08:24Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T05:39:47Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"2048","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqsqmj//////////w=="}},"support":true,"timestamp":"2020-07-12T12:50:39Z"}}},"p465":{"smtp":{"tls":{"banner":"220 mail.otakukonkatsu.com ESMTP unknown","ehlo":"250-mail.otakukonkatsu.com\r\n250-PIPELINING\r\n250-SIZE 10240000\r\n250-ETRN\r\n250-AUTH PLAIN LOGIN\r\n250-ENHANCEDSTATUSCODES\r\n250-8BITMIME\r\n250 DSN","tls":{"certificate":{"parsed":{"extensions":{"basic_constraints":{"is_ca":false},"key_usage":{"content_commitment":true,"digital_signature":true,"key_encipherment":true,"value":"7"}},"fingerprint_md5":"9b29ecc02f7ae02b752aed672b40a840","fingerprint_sha1":"f66395f114727c71daec03acf99d3de5e6b10766","fingerprint_sha256":"720bf95038fd667b7e958b6773d90b9dfb18b194725d364859ead4755e10e5ca","issuer":{"common_name":["otakukonkatsu.com"],"country":["--"],"email_address":["root@otakukonkatsu.com"],"locality":["SomeCity"],"organization":["SomeOrganization"],"organizational_unit":["SomeOrganizationalUnit"],"province":["SomeState"]},"issuer_dn":"C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com","names":["otakukonkatsu.com"],"redacted":false,"serial_number":"10308","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"Ybk9fBqSCCWOpnpa9KGvONfCzHaaM5NpebUHk1tuC2TF0jrMi6ba5S2uEsQfGybxEk0Iv2j8kQYwnUnST4+uWFUj2+nuj0dfjGwlBEtA3PL97WSyjbblaLChdJ7quGkzOohzO7lTdVKCv2iR7mEp9ac2ldPdPxTkOmzx8diFnHGotL2vcNP0sfEqkJzvFdpwJnQMoPx7erDyeVb/SE4lieIUpAdn7LUVsAAnJf0C7lIgs5bpOiGF9nbwIOxv5a5pJNtTalNOC0+kamK3KPTobxWhbmkl39HNqD6m3AhksBzSifvC0seVHpbWn6AEA8w4ITzY0eyxNTSt+TvO1/Mk5A=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d2f3b9238775b2ff36a5194d808c7b59892dcad94e4bddc8a83224a6a08aa83f","subject":{"common_name":["otakukonkatsu.com"],"country":["--"],"email_address":["root@otakukonkatsu.com"],"locality":["SomeCity"],"organization":["SomeOrganization"],"organizational_unit":["SomeOrganizationalUnit"],"province":["SomeState"]},"subject_dn":"C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com","subject_key_info":{"fingerprint_sha256":"f73b8fb390a439ec73a10655f9ae3fd5fcef470f3b141b9c5f1cc4e3bde10b40","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wVLn3KpwCaMbah5ScJpVaq9WvOAxzo1U/jv1Yg5iRrpACCszP7IPBe7pzSB/duhXwqUAMLRwebX5VR9oY96PZfOvjnidGvB8hSqLwmEdvTiA1q4H8kX8eYDhtz8fzle1qTtXb6nQnuRvhYKg0O3Cci2EPuSTOObJce4KYq+kKsuqqXto6wGgUe1zG4aHBN5C+J193laZcp+OV9ds94sl9dWqtXhB6x3TJDeXIEiGSo3lEwI8GewbxZW53ryRUqLjMg30rkCXfxvCAiGhDzYQTvwgm/cz8Lg0PSSPfK2NPaCuE/v0hF/hexDu9xKisEyacHLeY98VjKJXSXxfcMUPHQ=="}},"tbs_fingerprint":"e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6","tbs_noct_fingerprint":"e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6","validation_level":"unknown","validity":{"end":"2019-08-21T06:54:56Z","length":"31536000","start":"2018-08-21T06:54:56Z"},"version":"3"}},"cipher_suite":{"id":"0x0005","name":"TLS_RSA_WITH_RC4_128_SHA"},"ocsp_stapling":false,"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-14T01:08:23Z"}}},"p993":{"imaps":{"tls":{"banner":"* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.","tls":{"certificate":{"parsed":{"fingerprint_md5":"75a9c8c50cd65b0d20ff590ec16720bc","fingerprint_sha1":"316f85e231f9e623dc746ec837f69ba21605efb9","fingerprint_sha256":"2fc1e7271275a9000cd30a120082532b8d5d829df0f43e424ea984283a8561ca","issuer":{"common_name":["imap.example.com"],"email_address":["postmaster@example.com"],"organizational_unit":["IMAP server"]},"issuer_dn":"OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com","names":["imap.example.com"],"redacted":false,"serial_number":"17014858658541463133","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"X1y1HOlbWb/UCb1ZiUveVit1/onKvvGC88Lu7uUeHAG0Kyg0a+vCGNeUc5p2LhjHDvps+hqXsUgj6Pc5xAxG1Z+t/SjGgMQfW0TXRZyHz1dcBsZgUcdS8n1MCfYnqTkOK4xM9VJ9s0fCexcEPNJZm8CCc7c/7pidUYb9mhjBn0I="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"f0bbae564b9009140c3a7dee962721b20183b0ce08302b96925f5ca40aa6ec0a","subject":{"common_name":["imap.example.com"],"email_address":["postmaster@example.com"],"organizational_unit":["IMAP server"]},"subject_dn":"OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com","subject_key_info":{"fingerprint_sha256":"500cba1cd900964c5cf45caee7fd5b1d0d9f4bd4e2d6922b165000e871ee4f71","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"33h1UpbthpCviIeKbhn6og9sA1sRGVHTyq50Eqfj/4sJlybCgjg3XX3EsplRmqhoY6iFizMenXSgpb2rdcg0a4O0XLOUDOroUlwg1YuEhvWmykwKsmFpuY+1UpCnqspEHBxpbX10dk9BbUNO76eyk5jxAbVEOARonh5XHV/xiVU="}},"tbs_fingerprint":"61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d","tbs_noct_fingerprint":"61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGQA=="}],"validation_level":"unknown","validity":{"end":"2019-08-21T06:54:04Z","length":"31536000","start":"2018-08-21T06:54:04Z"},"version":"3"}},"cipher_suite":{"id":"0x0005","name":"TLS_RSA_WITH_RC4_128_SHA"},"ocsp_stapling":false,"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-15T04:50:02Z"}}},"p25":{"smtp":{"starttls":{"banner":"220 mail.otakukonkatsu.com ESMTP unknown","ehlo":"250-mail.otakukonkatsu.com\r\n250-PIPELINING\r\n250-SIZE 10240000\r\n250-ETRN\r\n250-STARTTLS\r\n250-AUTH PLAIN LOGIN\r\n250-ENHANCEDSTATUSCODES\r\n250-8BITMIME\r\n250 DSN","starttls":"220 2.0.0 Ready to start TLS","tls":{"certificate":{"parsed":{"extensions":{"basic_constraints":{"is_ca":false},"key_usage":{"content_commitment":true,"digital_signature":true,"key_encipherment":true,"value":"7"}},"fingerprint_md5":"9b29ecc02f7ae02b752aed672b40a840","fingerprint_sha1":"f66395f114727c71daec03acf99d3de5e6b10766","fingerprint_sha256":"720bf95038fd667b7e958b6773d90b9dfb18b194725d364859ead4755e10e5ca","issuer":{"common_name":["otakukonkatsu.com"],"country":["--"],"email_address":["root@otakukonkatsu.com"],"locality":["SomeCity"],"organization":["SomeOrganization"],"organizational_unit":["SomeOrganizationalUnit"],"province":["SomeState"]},"issuer_dn":"C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com","names":["otakukonkatsu.com"],"redacted":false,"serial_number":"10308","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"Ybk9fBqSCCWOpnpa9KGvONfCzHaaM5NpebUHk1tuC2TF0jrMi6ba5S2uEsQfGybxEk0Iv2j8kQYwnUnST4+uWFUj2+nuj0dfjGwlBEtA3PL97WSyjbblaLChdJ7quGkzOohzO7lTdVKCv2iR7mEp9ac2ldPdPxTkOmzx8diFnHGotL2vcNP0sfEqkJzvFdpwJnQMoPx7erDyeVb/SE4lieIUpAdn7LUVsAAnJf0C7lIgs5bpOiGF9nbwIOxv5a5pJNtTalNOC0+kamK3KPTobxWhbmkl39HNqD6m3AhksBzSifvC0seVHpbWn6AEA8w4ITzY0eyxNTSt+TvO1/Mk5A=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d2f3b9238775b2ff36a5194d808c7b59892dcad94e4bddc8a83224a6a08aa83f","subject":{"common_name":["otakukonkatsu.com"],"country":["--"],"email_address":["root@otakukonkatsu.com"],"locality":["SomeCity"],"organization":["SomeOrganization"],"organizational_unit":["SomeOrganizationalUnit"],"province":["SomeState"]},"subject_dn":"C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com","subject_key_info":{"fingerprint_sha256":"f73b8fb390a439ec73a10655f9ae3fd5fcef470f3b141b9c5f1cc4e3bde10b40","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wVLn3KpwCaMbah5ScJpVaq9WvOAxzo1U/jv1Yg5iRrpACCszP7IPBe7pzSB/duhXwqUAMLRwebX5VR9oY96PZfOvjnidGvB8hSqLwmEdvTiA1q4H8kX8eYDhtz8fzle1qTtXb6nQnuRvhYKg0O3Cci2EPuSTOObJce4KYq+kKsuqqXto6wGgUe1zG4aHBN5C+J193laZcp+OV9ds94sl9dWqtXhB6x3TJDeXIEiGSo3lEwI8GewbxZW53ryRUqLjMg30rkCXfxvCAiGhDzYQTvwgm/cz8Lg0PSSPfK2NPaCuE/v0hF/hexDu9xKisEyacHLeY98VjKJXSXxfcMUPHQ=="}},"tbs_fingerprint":"e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6","tbs_noct_fingerprint":"e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6","validation_level":"unknown","validity":{"end":"2019-08-21T06:54:56Z","length":"31536000","start":"2018-08-21T06:54:56Z"},"version":"3"}},"cipher_suite":{"id":"0x0005","name":"TLS_RSA_WITH_RC4_128_SHA"},"ocsp_stapling":false,"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-11T14:58:09Z"}}},"p110":{"pop3":{"starttls":{"banner":"+OK Dovecot ready.","metadata":{"description":"Dovecot","product":"Dovecot"},"starttls":"+OK Begin TLS negotiation now.","tls":{"certificate":{"parsed":{"fingerprint_md5":"75a9c8c50cd65b0d20ff590ec16720bc","fingerprint_sha1":"316f85e231f9e623dc746ec837f69ba21605efb9","fingerprint_sha256":"2fc1e7271275a9000cd30a120082532b8d5d829df0f43e424ea984283a8561ca","issuer":{"common_name":["imap.example.com"],"email_address":["postmaster@example.com"],"organizational_unit":["IMAP server"]},"issuer_dn":"OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com","names":["imap.example.com"],"redacted":false,"serial_number":"17014858658541463133","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"X1y1HOlbWb/UCb1ZiUveVit1/onKvvGC88Lu7uUeHAG0Kyg0a+vCGNeUc5p2LhjHDvps+hqXsUgj6Pc5xAxG1Z+t/SjGgMQfW0TXRZyHz1dcBsZgUcdS8n1MCfYnqTkOK4xM9VJ9s0fCexcEPNJZm8CCc7c/7pidUYb9mhjBn0I="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"f0bbae564b9009140c3a7dee962721b20183b0ce08302b96925f5ca40aa6ec0a","subject":{"common_name":["imap.example.com"],"email_address":["postmaster@example.com"],"organizational_unit":["IMAP server"]},"subject_dn":"OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com","subject_key_info":{"fingerprint_sha256":"500cba1cd900964c5cf45caee7fd5b1d0d9f4bd4e2d6922b165000e871ee4f71","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"33h1UpbthpCviIeKbhn6og9sA1sRGVHTyq50Eqfj/4sJlybCgjg3XX3EsplRmqhoY6iFizMenXSgpb2rdcg0a4O0XLOUDOroUlwg1YuEhvWmykwKsmFpuY+1UpCnqspEHBxpbX10dk9BbUNO76eyk5jxAbVEOARonh5XHV/xiVU="}},"tbs_fingerprint":"61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d","tbs_noct_fingerprint":"61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGQA=="}],"validation_level":"unknown","validity":{"end":"2019-08-21T06:54:04Z","length":"31536000","start":"2018-08-21T06:54:04Z"},"version":"3"}},"cipher_suite":{"id":"0x0005","name":"TLS_RSA_WITH_RC4_128_SHA"},"ocsp_stapling":false,"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-12T00:31:30Z"}}},"p143":{"imap":{"starttls":{"banner":"* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.","metadata":{"description":"Dovecot","product":"Dovecot"},"starttls":"a001 OK Begin TLS negotiation now.","tls":{"certificate":{"parsed":{"fingerprint_md5":"75a9c8c50cd65b0d20ff590ec16720bc","fingerprint_sha1":"316f85e231f9e623dc746ec837f69ba21605efb9","fingerprint_sha256":"2fc1e7271275a9000cd30a120082532b8d5d829df0f43e424ea984283a8561ca","issuer":{"common_name":["imap.example.com"],"email_address":["postmaster@example.com"],"organizational_unit":["IMAP server"]},"issuer_dn":"OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com","names":["imap.example.com"],"redacted":false,"serial_number":"17014858658541463133","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"X1y1HOlbWb/UCb1ZiUveVit1/onKvvGC88Lu7uUeHAG0Kyg0a+vCGNeUc5p2LhjHDvps+hqXsUgj6Pc5xAxG1Z+t/SjGgMQfW0TXRZyHz1dcBsZgUcdS8n1MCfYnqTkOK4xM9VJ9s0fCexcEPNJZm8CCc7c/7pidUYb9mhjBn0I="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"f0bbae564b9009140c3a7dee962721b20183b0ce08302b96925f5ca40aa6ec0a","subject":{"common_name":["imap.example.com"],"email_address":["postmaster@example.com"],"organizational_unit":["IMAP server"]},"subject_dn":"OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com","subject_key_info":{"fingerprint_sha256":"500cba1cd900964c5cf45caee7fd5b1d0d9f4bd4e2d6922b165000e871ee4f71","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"33h1UpbthpCviIeKbhn6og9sA1sRGVHTyq50Eqfj/4sJlybCgjg3XX3EsplRmqhoY6iFizMenXSgpb2rdcg0a4O0XLOUDOroUlwg1YuEhvWmykwKsmFpuY+1UpCnqspEHBxpbX10dk9BbUNO76eyk5jxAbVEOARonh5XHV/xiVU="}},"tbs_fingerprint":"61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d","tbs_noct_fingerprint":"61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGQA=="}],"validation_level":"unknown","validity":{"end":"2019-08-21T06:54:04Z","length":"31536000","start":"2018-08-21T06:54:04Z"},"version":"3"}},"cipher_suite":{"id":"0x0005","name":"TLS_RSA_WITH_RC4_128_SHA"},"ocsp_stapling":false,"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-12T06:54:10Z"}}},"ipint":"2575209532","updated_at":"2020-07-15T04:50:02Z","p995":{"pop3s":{"tls":{"banner":"+OK Dovecot ready.","tls":{"certificate":{"parsed":{"fingerprint_md5":"75a9c8c50cd65b0d20ff590ec16720bc","fingerprint_sha1":"316f85e231f9e623dc746ec837f69ba21605efb9","fingerprint_sha256":"2fc1e7271275a9000cd30a120082532b8d5d829df0f43e424ea984283a8561ca","issuer":{"common_name":["imap.example.com"],"email_address":["postmaster@example.com"],"organizational_unit":["IMAP server"]},"issuer_dn":"OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com","names":["imap.example.com"],"redacted":false,"serial_number":"17014858658541463133","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"X1y1HOlbWb/UCb1ZiUveVit1/onKvvGC88Lu7uUeHAG0Kyg0a+vCGNeUc5p2LhjHDvps+hqXsUgj6Pc5xAxG1Z+t/SjGgMQfW0TXRZyHz1dcBsZgUcdS8n1MCfYnqTkOK4xM9VJ9s0fCexcEPNJZm8CCc7c/7pidUYb9mhjBn0I="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"f0bbae564b9009140c3a7dee962721b20183b0ce08302b96925f5ca40aa6ec0a","subject":{"common_name":["imap.example.com"],"email_address":["postmaster@example.com"],"organizational_unit":["IMAP server"]},"subject_dn":"OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com","subject_key_info":{"fingerprint_sha256":"500cba1cd900964c5cf45caee7fd5b1d0d9f4bd4e2d6922b165000e871ee4f71","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"33h1UpbthpCviIeKbhn6og9sA1sRGVHTyq50Eqfj/4sJlybCgjg3XX3EsplRmqhoY6iFizMenXSgpb2rdcg0a4O0XLOUDOroUlwg1YuEhvWmykwKsmFpuY+1UpCnqspEHBxpbX10dk9BbUNO76eyk5jxAbVEOARonh5XHV/xiVU="}},"tbs_fingerprint":"61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d","tbs_noct_fingerprint":"61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d","unknown_extensions":[{"critical":false,"id":"2.16.840.1.113730.1.1","value":"AwIGQA=="}],"validation_level":"unknown","validity":{"end":"2019-08-21T06:54:04Z","length":"31536000","start":"2018-08-21T06:54:04Z"},"version":"3"}},"cipher_suite":{"id":"0x0005","name":"TLS_RSA_WITH_RC4_128_SHA"},"ocsp_stapling":false,"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-10T15:49:08Z"}}},"p587":{"smtp":{"starttls":{"banner":"220 mail.otakukonkatsu.com ESMTP unknown","ehlo":"250-mail.otakukonkatsu.com\r\n250-PIPELINING\r\n250-SIZE 10240000\r\n250-ETRN\r\n250-STARTTLS\r\n250-AUTH PLAIN LOGIN\r\n250-ENHANCEDSTATUSCODES\r\n250-8BITMIME\r\n250 DSN","starttls":"220 2.0.0 Ready to start TLS","tls":{"certificate":{"parsed":{"extensions":{"basic_constraints":{"is_ca":false},"key_usage":{"content_commitment":true,"digital_signature":true,"key_encipherment":true,"value":"7"}},"fingerprint_md5":"9b29ecc02f7ae02b752aed672b40a840","fingerprint_sha1":"f66395f114727c71daec03acf99d3de5e6b10766","fingerprint_sha256":"720bf95038fd667b7e958b6773d90b9dfb18b194725d364859ead4755e10e5ca","issuer":{"common_name":["otakukonkatsu.com"],"country":["--"],"email_address":["root@otakukonkatsu.com"],"locality":["SomeCity"],"organization":["SomeOrganization"],"organizational_unit":["SomeOrganizationalUnit"],"province":["SomeState"]},"issuer_dn":"C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com","names":["otakukonkatsu.com"],"redacted":false,"serial_number":"10308","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"valid":false,"value":"Ybk9fBqSCCWOpnpa9KGvONfCzHaaM5NpebUHk1tuC2TF0jrMi6ba5S2uEsQfGybxEk0Iv2j8kQYwnUnST4+uWFUj2+nuj0dfjGwlBEtA3PL97WSyjbblaLChdJ7quGkzOohzO7lTdVKCv2iR7mEp9ac2ldPdPxTkOmzx8diFnHGotL2vcNP0sfEqkJzvFdpwJnQMoPx7erDyeVb/SE4lieIUpAdn7LUVsAAnJf0C7lIgs5bpOiGF9nbwIOxv5a5pJNtTalNOC0+kamK3KPTobxWhbmkl39HNqD6m3AhksBzSifvC0seVHpbWn6AEA8w4ITzY0eyxNTSt+TvO1/Mk5A=="},"signature_algorithm":{"name":"SHA256WithRSA","oid":"1.2.840.113549.1.1.11"},"spki_subject_fingerprint":"d2f3b9238775b2ff36a5194d808c7b59892dcad94e4bddc8a83224a6a08aa83f","subject":{"common_name":["otakukonkatsu.com"],"country":["--"],"email_address":["root@otakukonkatsu.com"],"locality":["SomeCity"],"organization":["SomeOrganization"],"organizational_unit":["SomeOrganizationalUnit"],"province":["SomeState"]},"subject_dn":"C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com","subject_key_info":{"fingerprint_sha256":"f73b8fb390a439ec73a10655f9ae3fd5fcef470f3b141b9c5f1cc4e3bde10b40","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"wVLn3KpwCaMbah5ScJpVaq9WvOAxzo1U/jv1Yg5iRrpACCszP7IPBe7pzSB/duhXwqUAMLRwebX5VR9oY96PZfOvjnidGvB8hSqLwmEdvTiA1q4H8kX8eYDhtz8fzle1qTtXb6nQnuRvhYKg0O3Cci2EPuSTOObJce4KYq+kKsuqqXto6wGgUe1zG4aHBN5C+J193laZcp+OV9ds94sl9dWqtXhB6x3TJDeXIEiGSo3lEwI8GewbxZW53ryRUqLjMg30rkCXfxvCAiGhDzYQTvwgm/cz8Lg0PSSPfK2NPaCuE/v0hF/hexDu9xKisEyacHLeY98VjKJXSXxfcMUPHQ=="}},"tbs_fingerprint":"e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6","tbs_noct_fingerprint":"e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6","validation_level":"unknown","validity":{"end":"2019-08-21T06:54:56Z","length":"31536000","start":"2018-08-21T06:54:56Z"},"version":"3"}},"cipher_suite":{"id":"0x0005","name":"TLS_RSA_WITH_RC4_128_SHA"},"ocsp_stapling":false,"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.2"},"timestamp":"2020-07-11T09:50:03Z"}}},"location":{"country_code":"JP","continent":"Asia","timezone":"Asia/Tokyo","latitude":35.69,"longitude":139.69,"registered_country":"Japan","registered_country_code":"JP","country":"Japan"},"autonomous_system":{"description":"SAKURA-A SAKURA Internet Inc.","routed_prefix":"153.126.128.0/17","asn":"7684","country_code":"JP","name":"SAKURA-A SAKURA Internet Inc.","path":["11164","2497","9370","7684"]},"protocols":["110/pop3","143/imap","25/smtp","443/https","465/smtp","587/smtp","80/http","993/imaps","995/pop3s"],"ipinteger":"1016364697"} +{"metadata":{"os":"Debian"},"address":"31.134.10.156","ip":"31.134.10.156","p80":{"http":{"get":{"body":"\n\n404 Not Found\n\n

            Not Found

            \n

            The requested URL was not found on this server.

            \n
            \n
            Apache/2.4.38 (Debian) Server at 31.134.10.156 Port 80
            \n\n","body_sha256":"edcb45301d911b82b5e4594d875d9b57d8bfd805a6d280416a18c2b500391f32","headers":{"content_length":"275","content_type":"text/html; charset=iso-8859-1","server":"Apache/2.4.38 (Debian)","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 03:36:42 GMT"}]},"metadata":{"description":"Apache httpd 2.4.38","manufacturer":"Apache","product":"httpd","version":"2.4.38"},"status_code":"404","status_line":"404 Not Found","title":"404 Not Found","timestamp":"2020-07-14T03:36:43Z"}}},"ports":["80"],"version":"0","tags":["http"],"ipint":"528878236","updated_at":"2020-07-14T03:36:43Z","location":{"country_code":"RU","continent":"Europe","timezone":"Europe/Moscow","latitude":55.7386,"longitude":37.6068,"registered_country":"Russia","registered_country_code":"RU","country":"Russia"},"autonomous_system":{"description":"MTW-AS","routed_prefix":"31.134.0.0/20","asn":"48347","country_code":"RU","name":"MTW-AS","path":["7018","1299","20485","48347"]},"protocols":["80/http"],"ipinteger":"-1677031905"} +{"address":"181.215.157.155","ipint":"3050806683","updated_at":"2020-07-14T06:26:22Z","ip":"181.215.157.155","p80":{"http":{"get":{"body":"407 Proxy Authentication Required\r\n

            407 Proxy Authentication Required

            Access to requested resource disallowed by administrator or you need valid username/password to use this resource

            \r\n","body_sha256":"b94f66d4b3d5b38f8db430d510d06e4bf3926171758cadd9b5bdae615bab083d","headers":{"connection":"close","content_type":"text/html; charset=utf-8","proxy_authenticate":"Basic realm=\"login\""},"status_code":"407","status_line":"407 Proxy Authentication Required","title":"407 Proxy Authentication Required","timestamp":"2020-07-14T06:26:22Z"}}},"location":{"country_code":"US","continent":"North America","city":"Chicago","postal_code":"60605","timezone":"America/Chicago","province":"Illinois","latitude":41.871,"longitude":-87.6289,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"ASDETUK http://www.heficed.com","routed_prefix":"181.215.128.0/19","asn":"61317","country_code":"GB","name":"ASDETUK http://www.heficed.com","path":["7018","3257","23352","61317"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"-1684154443","version":"0","tags":["http"]} +{"metadata":{"product":"Cable Modem","description":"Motorola Cable Modem","device_type":"DSL/cable modem","manufacturer":"Motorola"},"address":"70.242.162.190","ip":"70.242.162.190","ports":["443"],"version":"0","tags":["DSL/cable modem","embedded","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"fingerprint_md5":"93fc34e486de9c3bf4e1b70e377a1361","fingerprint_sha1":"81d075440534da06c1ed5ac48351a9a4978648aa","fingerprint_sha256":"96421eda0168df9a44c9eadc7451cae578f3c42456bbef5c5b33e1791b88d20c","issuer":{"common_name":["BMS"],"country":["US"],"email_address":["support@motorola-mobility.com"],"locality":["SanDiego"],"organization":["Motorola-Mobility Corp."],"organizational_unit":["VIP"],"province":["California"]},"issuer_dn":"C=US, ST=California, L=SanDiego, O=Motorola-Mobility Corp., OU=VIP, CN=BMS, emailAddress=support@motorola-mobility.com","redacted":false,"serial_number":"17803741903183845083","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":true,"value":"AmUFQ4M+4tPJtPBQZ2zVkt9odOCK8a+y9WmKw0KETeXusOxkFp4y19Mha5Wzsz+mctUBaPbYyKBgrY8OBKEYwZo1beqA32bshnxIai66EKH7+l+7izhdNF9BqzXNUeBycGMuiIekwZj0wH/ErisHaA/q/YDyOzV5zLG5NxNBweg="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"f17a26729d959953b83347022097306b8eef3bd382adc13ee6902e02c0782e4c","subject":{"common_name":["BMS"],"country":["US"],"email_address":["support@motorola-mobility.com"],"locality":["SanDiego"],"organization":["Motorola-Mobility Corp."],"organizational_unit":["VIP"],"province":["California"]},"subject_dn":"C=US, ST=California, L=SanDiego, O=Motorola-Mobility Corp., OU=VIP, CN=BMS, emailAddress=support@motorola-mobility.com","subject_key_info":{"fingerprint_sha256":"a2182d758961316f33b3c548cc2d3c2a759d396de8a7b9321ab3a6d0c41eb8c4","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"1024","modulus":"ziexFL4LwXSCv58eEOhNFDUX7Y0PNsk4j/yNLyMZF73E83jxaECf/fDAc9WUigyyp0KO5Y93QzrYOCOoZ3xQTimj0zd0C4mwR5d7damIMPu15csex+xdsGkeuLPgjAFXxHVdFx9QdwdbefF3UMAmiP2kx7t+Rn5FhGayq/ooA0M="}},"tbs_fingerprint":"b58c056e0dfc087b6b76f78a61c509133416927ed155978f301516f7a3b0574f","tbs_noct_fingerprint":"41e91925f12a659ac668f72f4daf4948b2add61ae49772831a248da137294174","validation_level":"unknown","validity":{"end":"2022-04-15T18:08:25Z","length":"315360000","start":"2012-04-17T18:08:25Z"},"version":"2"}},"cipher_suite":{"id":"0x0035","name":"TLS_RSA_WITH_AES_256_CBC_SHA"},"ocsp_stapling":false,"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.0","timestamp":"2020-07-09T16:33:02Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T08:16:44Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T08:02:21Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T05:55:14Z"},"dhe":{"support":false,"timestamp":"2020-07-12T05:41:19Z"}}},"ipint":"1190306494","updated_at":"2020-07-14T08:16:44Z","location":{"country_code":"US","continent":"North America","city":"Spring","postal_code":"77379","timezone":"America/Chicago","province":"Texas","latitude":30.0409,"longitude":-95.5302,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"ATT-INTERNET4","routed_prefix":"70.242.0.0/15","asn":"7018","country_code":"US","name":"ATT-INTERNET4","path":["7018"]},"protocols":["443/https"],"ipinteger":"-1096617402"} +{"address":"52.231.184.246","p3389":{"rdp":{"banner":{"metadata":{"description":"Remote Desktop","product":"Remote Desktop"},"protocol_supported_flags":{"dynvc_graphics_pipeline":true,"extended_client_data_supported":true,"neg_resp_reserved":true,"restricted_admin_mode":true},"selected_security_protocol":{"raw_value":"4","rdstls":true},"supported":true,"timestamp":"2020-07-10T00:38:35Z"}}},"ipint":"887601398","updated_at":"2020-07-10T00:38:35Z","ip":"52.231.184.246","location":{"country_code":"KR","continent":"Asia","city":"Busan","postal_code":"48943","timezone":"Asia/Seoul","province":"Busan","latitude":35.1003,"longitude":129.0442,"registered_country":"United States","registered_country_code":"US","country":"South Korea"},"autonomous_system":{"description":"MICROSOFT-CORP-MSN-AS-BLOCK","routed_prefix":"52.224.0.0/11","asn":"8075","country_code":"US","name":"MICROSOFT-CORP-MSN-AS-BLOCK","path":["8075"]},"ports":["3389"],"protocols":["3389/rdp"],"ipinteger":"-155654348","version":"0","tags":["rdp","remote_display"]} +{"address":"85.24.146.152","ipint":"1427673752","updated_at":"2020-07-09T11:19:40Z","ip":"85.24.146.152","p5900":{"vnc":{"banner":{"security_types":[{"name":"Apple Inc.","value":"30"},{"name":"Apple Inc.","value":"33"},{"name":"Unknown","value":"36"},{"name":"Apple Inc.","value":"35"}],"server_protocol_version":{"version_major":"3","version_minor":"121","version_string":"RFB 003.889"},"supported":true,"timestamp":"2020-07-09T11:19:40Z"}}},"location":{"country_code":"SE","continent":"Europe","city":"Gothenburg","postal_code":"400 12","timezone":"Europe/Stockholm","province":"Västra Götaland County","latitude":57.7066,"longitude":11.9672,"registered_country":"Sweden","registered_country_code":"SE","country":"Sweden"},"autonomous_system":{"description":"BAHNHOF http://www.bahnhof.net/","routed_prefix":"85.24.128.0/17","asn":"8473","country_code":"SE","name":"BAHNHOF http://www.bahnhof.net/","path":["11164","2603","8473"]},"ports":["5900"],"protocols":["5900/vnc"],"ipinteger":"-1735255979","version":"0","tags":["remote_display","vnc"]} +{"address":"176.31.62.10","ipint":"2954837514","updated_at":"2020-06-30T06:42:32Z","ip":"176.31.62.10","p80":{"http":{"get":{"body":"\n\n
            \n\n

            Unauthorized User

            \n\n
            \nWhatsUp Gold 8.0 \nCopyright © 1996-2003\nIpswitch, Inc. \n2020/06/30 08:42\n\n\n","body_sha256":"75be22c4e7416c6cdf18fe4638bf5f219dedc2f6c92a4727e8e8cd41f7ab1dc4","headers":{"content_type":"text/html","server":"WhatsUp_Gold/8.0","unknown":[{"key":"date","value":"Tue, 30 Jun 2020 06:42:31 GMT"}],"www_authenticate":"Basic realm=\"WhatsUp Gold\""},"metadata":{"description":"WhatsUp_Gold 8.0","product":"WhatsUp_Gold","version":"8.0"},"status_code":"401","status_line":"401 Unauthorized","timestamp":"2020-06-30T06:42:32Z"}}},"location":{"country_code":"FR","continent":"Europe","timezone":"Europe/Paris","latitude":48.8582,"longitude":2.3387,"registered_country":"France","registered_country_code":"FR","country":"France"},"autonomous_system":{"description":"OVH","routed_prefix":"176.31.0.0/16","asn":"16276","country_code":"FR","name":"OVH","path":["16276"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"171843504","version":"0","tags":["http"]} +{"address":"81.155.115.80","ipint":"1369142096","updated_at":"2020-07-15T04:08:20Z","p7547":{"cwmp":{"get":{"headers":{"content_length":"0","server":"gSOAP/2.7"},"status_code":"404","status_line":"404 Not Found","timestamp":"2020-07-15T04:08:20Z"}}},"ip":"81.155.115.80","location":{"country_code":"GB","continent":"Europe","city":"Fulham","postal_code":"SW6","timezone":"Europe/London","province":"England","latitude":51.477,"longitude":-0.1959,"registered_country":"United Kingdom","registered_country_code":"GB","country":"United Kingdom"},"autonomous_system":{"description":"BT-UK-AS BTnet UK Regional network","routed_prefix":"81.128.0.0/11","asn":"2856","country_code":"GB","name":"BT-UK-AS BTnet UK Regional network","path":["11164","5400","2856"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"1349753681","version":"0","tags":["cwmp"]} +{"metadata":{"os":"Ubuntu,Ubuntu","os_version":"12.04"},"address":"54.84.202.137","ip":"54.84.202.137","p80":{"http":{"get":{"body":"

            prueba It works!

            \n

            This is the default web page for this server.

            \n

            The web server software is running but no content has been added, yet.

            \n\n","body_sha256":"d82ad7ec63c15e53bd391e5c11a565c2dbd3653f236c4feefd19597c290c8429","headers":{"accept_ranges":"bytes","content_type":"text/html","last_modified":"Mon, 30 May 2016 22:14:12 GMT","server":"Apache/2.2.22 (Ubuntu)","unknown":[{"key":"date","value":"Tue, 30 Jun 2020 16:17:24 GMT"},{"key":"etag","value":"\"60a58-b8-534169389254e\""}],"vary":"Accept-Encoding"},"metadata":{"description":"Apache httpd 2.2.22","manufacturer":"Apache","product":"httpd","version":"2.2.22"},"status_code":"200","status_line":"200 OK","timestamp":"2020-06-30T16:17:24Z"}}},"ports":["80","22"],"version":"0","tags":["http","ssh"],"p22":{"ssh":{"v2":{"banner":{"comment":"Debian-5ubuntu1.4","raw":"SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1.4","software":"OpenSSH_5.9p1","version":"2.0"},"key_exchange":{"ecdh_params":{"server_public":{"x":{"length":"256","value":"8zv7uY4A7b106iq73T7c+WZmdkSxdsbvuMiunbCc94w="},"y":{"length":"256","value":"AWRgUkGzQpOcDhzKviEG5yVfgKPsahVvfdBG5+ETmMc="}}}},"metadata":{"description":"OpenSSH 5.9p1","product":"OpenSSH","version":"5.9p1"},"selected":{"client_to_server":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"},"host_key_algorithm":"ecdsa-sha2-nistp256","kex_algorithm":"ecdh-sha2-nistp256","server_to_client":{"cipher":"aes128-ctr","compression":"none","mac":"hmac-sha2-256"}},"server_host_key":{"ecdsa_public_key":{"b":"WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=","curve":"P-256","gx":"axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=","gy":"T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=","length":"256","n":"/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=","p":"/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=","x":"Vr6huGnhy3sZJMihE9G6VMwlFLpEnHnREEzmTeydEo0=","y":"7hFfXfNy0uXKFU5Q3VYB7CXVexpZ/tE13t/sKzUkiJU="},"fingerprint_sha256":"65a13ae5ca13b8fc46feb67079d05e422588d45d8352e1a4919783c250d9cf25","key_algorithm":"ecdsa-sha2-nistp256"},"support":{"client_to_server":{"ciphers":["aes128-ctr","aes192-ctr","aes256-ctr","arcfour256","arcfour128","aes128-cbc","3des-cbc","blowfish-cbc","cast128-cbc","aes192-cbc","aes256-cbc","arcfour","rijndael-cbc@lysator.liu.se"],"compressions":["none","zlib@openssh.com"],"macs":["hmac-md5","hmac-sha1","umac-64@openssh.com","hmac-sha2-256","hmac-sha2-256-96","hmac-sha2-512","hmac-sha2-512-96","hmac-ripemd160","hmac-ripemd160@openssh.com","hmac-sha1-96","hmac-md5-96"]},"first_kex_follows":false,"host_key_algorithms":["ssh-rsa","ssh-dss","ecdsa-sha2-nistp256"],"kex_algorithms":["ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group-exchange-sha1","diffie-hellman-group14-sha1","diffie-hellman-group1-sha1"],"server_to_client":{"ciphers":["aes128-ctr","aes192-ctr","aes256-ctr","arcfour256","arcfour128","aes128-cbc","3des-cbc","blowfish-cbc","cast128-cbc","aes192-cbc","aes256-cbc","arcfour","rijndael-cbc@lysator.liu.se"],"compressions":["none","zlib@openssh.com"],"macs":["hmac-md5","hmac-sha1","umac-64@openssh.com","hmac-sha2-256","hmac-sha2-256-96","hmac-sha2-512","hmac-sha2-512-96","hmac-ripemd160","hmac-ripemd160@openssh.com","hmac-sha1-96","hmac-md5-96"]}},"timestamp":"2020-07-14T12:06:50Z"}}},"ipint":"911526537","updated_at":"2020-07-14T12:06:50Z","location":{"country_code":"US","continent":"North America","city":"Ashburn","postal_code":"20149","timezone":"America/New_York","province":"Virginia","latitude":39.0481,"longitude":-77.4728,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"AMAZON-AES","routed_prefix":"54.84.0.0/15","asn":"14618","country_code":"US","name":"AMAZON-AES","path":["16509","14618"]},"protocols":["22/ssh","80/http"],"ipinteger":"-1983228874"} +{"address":"45.79.207.117","ipint":"760205173","updated_at":"2020-07-07T18:56:35Z","ip":"45.79.207.117","p80":{"http":{"get":{"body":"\n \n \n \n \n \n Mindvalley\n \n \n
            \n
            \n \n \n \n \n \n

            Mindvalley

            \n \n

            Oops!, something went wrong

            \n \n
            \n
            \n

            \n \n Callback URL mismatch.
            \n The provided redirect_uri is not in the list of allowed callback URLs.
            \n Please go to the Application Settings page and make sure you are sending a valid callback url from your application.\n \n

            \n
            \n
            \n
            \n \n \n

            TECHNICAL DETAILS

            \n See details for this error\n
            \n \n

            SUPPORT

            \n \n \n Get Help\n \n \n support@mindvalley.com\n \n \n
            \n
            \n
            \n

            \n \n unauthorized_client: Callback URL mismatch. http://45.79.207.117/auth/mindvalley/callback?origin=http%3A%2F%2F45.79.207.117%2F is not in the list of allowed callback URLs\n \n

            \n \n VIEW LOG\n \n\n \n \n TRACKING ID: 54463be5f6a5f27cd315\n \n \n
            \n
            \n
            \n \n \n\n","body_sha256":"a8945680f53cd67ec1aef6fb34c40619f52bcc612049316502a3035a359e40fa","headers":{"cache_control":"private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0, no-transform","connection":"keep-alive","content_type":"text/html; charset=utf-8","server":"nginx","strict_transport_security":"max-age=15724800","unknown":[{"key":"ot_baggage_auth0_request_id","value":"3dc0790f280d5bfa47696ea9"},{"key":"x_ratelimit_reset","value":"1594148196"},{"key":"date","value":"Tue, 07 Jul 2020 18:56:35 GMT"},{"key":"ot_tracer_spanid","value":"5b7d921f3dcf0e9f"},{"key":"ot_tracer_sampled","value":"true"},{"key":"x_auth0_requestid","value":"54463be5f6a5f27cd315"},{"key":"etag","value":"W/\"b22-NrsYOetfnTxV0gk4kA0wrfSdRb8\""},{"key":"ot_tracer_traceid","value":"00a9a65275edf0ba"},{"key":"x_ratelimit_limit","value":"1000"},{"key":"x_ratelimit_remaining","value":"998"}],"vary":"Accept-Encoding"},"metadata":{"description":"nginx","product":"nginx"},"status_code":"403","status_line":"403 Forbidden","title":"Mindvalley","timestamp":"2020-07-07T18:56:35Z"}}},"location":{"country_code":"US","continent":"North America","city":"Atlanta","postal_code":"30301","timezone":"America/New_York","province":"Georgia","latitude":33.7485,"longitude":-84.3871,"registered_country":"United States","registered_country_code":"US","country":"United States"},"autonomous_system":{"description":"LINODE-AP Linode, LLC","routed_prefix":"45.79.192.0/20","asn":"63949","country_code":"US","name":"LINODE-AP Linode, LLC","path":["7018","174","63949"]},"ports":["80"],"protocols":["80/http"],"ipinteger":"1976520493","version":"0","tags":["http"]} +{"address":"156.225.27.68","ip":"156.225.27.68","p80":{"http":{"get":{"body":"当前域名或者端口未绑定,请到后台绑定,该消息可以在后台自定义!","body_sha256":"a5388a84d0a0fd2680581f672ad42a5994d52bbacb885fb591fc6d4ba02b9cfd","headers":{"content_type":"text/html; charset=UTF-8","server":"Nginx Microsoft-HTTPAPI/2.0","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 04:58:32 GMT"}],"x_powered_by":"Nginx"},"metadata":{"description":"Nginx","product":"Nginx"},"status_code":"200","status_line":"200 OK","timestamp":"2020-07-14T04:58:40Z"}}},"ports":["80","445"],"version":"0","tags":["http","smb"],"ipint":"2631998276","updated_at":"2020-07-15T03:37:28Z","p445":{"smb":{"banner":{"has_ntlm":true,"metadata":{"description":"SMB 2.1","version":"SMB 2.1"},"negotiation_log":{"authentication_types":["1.3.6.1.4.1.311.2.2.30","1.3.6.1.4.1.311.2.2.10"],"capabilities":"7","command":"0","credits":"1","dialect_revision":"528","flags":"1","protocol_id":"AAAAAP5TTUI=","security_mode":"1","server_guid":"AAAAAAAAAAAAAAAAAAAAAFc7vP5EOahOlp1VqZoZ2Tc=","server_start_time":"1592875883","status":"0","system_time":"1594784238"},"session_setup_log":{"command":"1","credits":"1","flags":"1","negotiate_flags":"2726953477","protocol_id":"AAAAAP5TTUI=","setup_flags":"0","status":"3221225494","target_name":"HKSRV2808"},"smb_capabilities":{"smb_dfs_support":true,"smb_leasing_support":true,"smb_multicredit_support":true},"smb_version":{"major":"2","minor":"1","revision":"0","version_string":"SMB 2.1"},"smbv1_support":false,"supported":true,"timestamp":"2020-07-15T03:37:28Z"}}},"location":{"country_code":"HK","continent":"Asia","timezone":"Asia/Hong_Kong","latitude":22.25,"longitude":114.1667,"registered_country":"South Africa","registered_country_code":"ZA","country":"Hong Kong"},"autonomous_system":{"description":"XIAOZHIYUN1-AS-AP ICIDC NETWORK","routed_prefix":"156.225.16.0/20","asn":"136800","country_code":"US","name":"XIAOZHIYUN1-AS-AP ICIDC NETWORK","path":["11164","3491","136800"]},"protocols":["445/smb","80/http"],"ipinteger":"1142677916"} +{"address":"24.65.82.187","ipint":"406934203","updated_at":"2020-07-15T12:26:55Z","p7547":{"cwmp":{"get":{"body":"401 Unauthorized

            Authorization Required

            This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required


            ","body_sha256":"721e96983952a29827a40e04ffddf6807212e81923bd0af4f1d90dcd482f504b","headers":{"connection":"Keep-Alive","content_length":"387","content_type":"text/html;charset=iso-8859-1","server":"Cisco-CcspCwmpTcpCR/1.0","www_authenticate":"Digest realm=\"Cisco_CCSP_CWMP_TCPCR\", nonce=\"fa43351e5566151bedff8552460bb608\", algorithm=\"MD5\", domain=\"/\", qop=\"auth\", stale=\"true\""},"status_code":"401","status_line":"401 Unauthorized","title":"401 Unauthorized","timestamp":"2020-07-15T12:26:55Z"}}},"ip":"24.65.82.187","location":{"country_code":"CA","continent":"North America","city":"Sherwood Park","postal_code":"T8A","timezone":"America/Edmonton","province":"Alberta","latitude":53.5294,"longitude":-113.2555,"registered_country":"Canada","registered_country_code":"CA","country":"Canada"},"autonomous_system":{"description":"SHAW","routed_prefix":"24.65.80.0/22","asn":"6327","country_code":"CA","name":"SHAW","path":["6327"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-1152237288","version":"0","tags":["cwmp"]} +{"address":"81.141.166.145","ipint":"1368237713","updated_at":"2020-07-15T04:07:26Z","p7547":{"cwmp":{"get":{"headers":{"content_length":"0","server":"gSOAP/2.7"},"status_code":"404","status_line":"404 Not Found","timestamp":"2020-07-15T04:07:26Z"}}},"ip":"81.141.166.145","location":{"country_code":"GB","continent":"Europe","city":"Boston","postal_code":"PE21","timezone":"Europe/London","province":"England","latitude":52.9791,"longitude":-0.0269,"registered_country":"United Kingdom","registered_country_code":"GB","country":"United Kingdom"},"autonomous_system":{"description":"BT-UK-AS BTnet UK Regional network","routed_prefix":"81.128.0.0/12","asn":"2856","country_code":"GB","name":"BT-UK-AS BTnet UK Regional network","path":["11164","5400","2856"]},"ports":["7547"],"protocols":["7547/cwmp"],"ipinteger":"-1851355823","version":"0","tags":["cwmp"]} +{"address":"221.10.15.220","ipint":"3708424156","updated_at":"2020-06-11T02:47:19Z","ip":"221.10.15.220","ports":["53"],"protocols":["53/dns"],"ipinteger":"-602993955","version":"0","p53":{"dns":{"lookup":{"answers":[{"name":"c.afekv.com","response":"221.10.58.54","type":"A"},{"name":"c.afekv.com","response":"192.150.186.1","type":"A"}],"errors":false,"open_resolver":true,"questions":[{"name":"c.afekv.com","type":"A"}],"resolves_correctly":true,"support":true,"timestamp":"2020-06-11T02:47:19Z"}}},"tags":["dns"]} +{"metadata":{"os":"Windows,Windows"},"address":"156.249.159.119","ip":"156.249.159.119","p80":{"http":{"get":{"body":"\r\n\r\n\r\n\r\nIIS7\r\n\r\n\r\n\r\n
            \r\n\"IIS7\"\r\n
            \r\n\r\n","body_sha256":"370be45f65276b3b8de42a29adfb1220fc44a5e018c37e3e9b62fa7d5b523fd0","headers":{"accept_ranges":"bytes","content_type":"text/html","last_modified":"Mon, 30 Jul 2018 12:41:17 GMT","server":"Microsoft-IIS/7.5","unknown":[{"key":"etag","value":"\"e5499c228d41:0\""},{"key":"date","value":"Tue, 07 Jul 2020 05:41:26 GMT"}],"vary":"Accept-Encoding","x_powered_by":"ASP.NET"},"metadata":{"description":"Microsoft IIS 7.5","manufacturer":"Microsoft","product":"IIS","version":"7.5"},"status_code":"200","status_line":"200 OK","title":"IIS7","timestamp":"2020-07-07T05:42:37Z"}}},"ports":["80","443"],"version":"0","tags":["http","https"],"p443":{"https":{"tls":{"certificate":{"parsed":{"extensions":{"extended_key_usage":{"server_auth":true},"key_usage":{"data_encipherment":true,"digital_signature":true,"key_encipherment":true,"value":"13"}},"fingerprint_md5":"355a2a4731bb4efffbce243be3d68948","fingerprint_sha1":"d840933627a82b2cfa55f2a05cac785682fceb25","fingerprint_sha256":"a0d25fa4744f969a60abc76efd41af91fce0a20857b05d95976a989fc429300a","issuer":{"common_name":["WMSvc-WIN-RRGUHN51BI0"]},"issuer_dn":"CN=WMSvc-WIN-RRGUHN51BI0","redacted":false,"serial_number":"98566262313343030001206653522675179984","signature":{"self_signed":true,"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"valid":false,"value":"Er/DFxqmv3i0bWvqnU4Fj8i6+XXW/xGeKEWmkzKe2VqnxBCUxLhmAxqCV6pnapC1O3dFMQUeVN5rkdXbZzZv94/7JzHzPSPPliV6S6cWUybXtIG/MEzJhsDLB04TPyEG0P7PF4lmzDhUfxUrO9nJGkIUOiXFCy0hzyDwyMwozX2xLZ+VMic2llEN/LPj3lfB7VJjTyjmxTJKTrPhjQEF2vYEJwQjWBfGC0T02ZTxMzqBYlOo7/ZuhN33P4k48KL41coIIbJmSxIi8FV7ibPPV58aDriZqvdwT1vRbPeWXPz2gyzBg0e44PsdFrfK4l+hkzvQ2mICcVyOf5mJsvl4iQ=="},"signature_algorithm":{"name":"SHA1WithRSA","oid":"1.2.840.113549.1.1.5"},"spki_subject_fingerprint":"4e3e776d0e6e3a4abea9909bfe86b2a35af9035e0a57a4ede060e43165e7ecd0","subject":{"common_name":["WMSvc-WIN-RRGUHN51BI0"]},"subject_dn":"CN=WMSvc-WIN-RRGUHN51BI0","subject_key_info":{"fingerprint_sha256":"9d4d893113a35101f1abf987f040d00a7649b2dd323b34fb574aa0d93324954b","key_algorithm":{"name":"RSA"},"rsa_public_key":{"exponent":"65537","length":"2048","modulus":"szfH8SHg0u2dEwTggR0kC1T3d7rKWfTCfnhsZPqGiUuk7KY2On24fNEy0ORmrfcqNqRY2IFHYooPYiheMpGjpfEXAUmt+YuCk5CgK6UBI5WJZCThVbVz1CHB3UJzyHwpDUZ8JpA8HV4ZfI6lhPeZcAKQhs6/1MftJoDo5cnEydtidQOMp7sYgQiOxCQG20VGHfyCkZ1bmzZKMSuVaGTJ2341gndX9ZFD4O+yq/YgzHy/1JU3EUpzwwKYa+d83vhvKFtwq7QCfwaKx2i4I54gxynQmODwAkuhZRbN268hmHBJPImimeeLjMNs6u1lnLAvAcmdCib7JKt1ziKAB/WEuQ=="}},"tbs_fingerprint":"3077ccc30b1f9d32a9e6aa3505ecf60f915dbe168cd9531c84b52eb4036eafdd","tbs_noct_fingerprint":"3077ccc30b1f9d32a9e6aa3505ecf60f915dbe168cd9531c84b52eb4036eafdd","validation_level":"unknown","validity":{"end":"2030-06-06T01:03:05Z","length":"315360000","start":"2020-06-08T01:03:05Z"},"version":"3"}},"cipher_suite":{"id":"0xC014","name":"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"},"ocsp_stapling":false,"server_key_exchange":{"ecdh_params":{"curve_id":{"id":"23","name":"secp256r1"}}},"signature":{"valid":true},"validation":{"browser_error":"x509: unknown error","browser_trusted":false},"version":"TLSv1.0","timestamp":"2020-07-09T13:34:36Z"},"heartbleed":{"heartbeat_enabled":false,"heartbleed_vulnerable":false,"timestamp":"2020-07-14T02:41:19Z"},"ssl_3":{"support":true,"timestamp":"2020-07-15T06:13:25Z"},"get":{"body":"\r\nNot Found\r\n\r\n

            Not Found

            \r\n

            HTTP Error 404. The requested resource is not found.

            \r\n\r\n","body_sha256":"ce7127c38e30e92a021ed2bd09287713c6a923db9ffdb43f126e8965d777fbf0","headers":{"content_length":"315","content_type":"text/html; charset=us-ascii","server":"Microsoft-HTTPAPI/2.0","unknown":[{"key":"date","value":"Tue, 14 Jul 2020 05:20:23 GMT"}]},"metadata":{"description":"Microsoft HTTPAPI 2.0","manufacturer":"Microsoft","product":"HTTPAPI","version":"2.0"},"status_code":"404","status_line":"404 Not Found","title":"Not Found","timestamp":"2020-07-14T05:22:24Z"},"rsa_export":{"support":false,"timestamp":"2020-07-09T06:44:25Z"},"dhe_export":{"support":false,"timestamp":"2020-07-09T11:32:14Z"},"dhe":{"dh_params":{"generator":{"length":"8","value":"Ag=="},"prime":{"length":"1024","value":"///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5lOB//////////8="}},"support":true,"timestamp":"2020-07-12T09:28:30Z"}}},"ipint":"2633604983","updated_at":"2020-07-15T06:13:25Z","location":{"country_code":"US","continent":"North America","timezone":"America/Chicago","latitude":37.751,"longitude":-97.822,"registered_country":"South Africa","registered_country_code":"ZA","country":"United States"},"autonomous_system":{"description":"IKGUL-26484","routed_prefix":"156.249.159.0/24","asn":"26484","country_code":"US","name":"IKGUL-26484","path":["11164","4134","26484","26484"]},"protocols":["443/https","80/http"],"ipinteger":"2006972828"} diff --git a/backend/src/tasks/helpers/__mocks__/getIps.ts b/backend/src/tasks/helpers/__mocks__/getIps.ts new file mode 100644 index 00000000..319ce437 --- /dev/null +++ b/backend/src/tasks/helpers/__mocks__/getIps.ts @@ -0,0 +1,19 @@ +import { plainToClass } from 'class-transformer'; +import { Domain } from '../../../models'; + +export default async () => { + return [ + plainToClass(Domain, { + name: 'www.cisa.gov', + ip: '104.84.119.215', + services: [ + { + port: 80 + }, + { + port: 443 + } + ] + }) + ]; +}; diff --git a/backend/src/tasks/helpers/__mocks__/getRootDomains.ts b/backend/src/tasks/helpers/__mocks__/getRootDomains.ts new file mode 100644 index 00000000..9aae1d9d --- /dev/null +++ b/backend/src/tasks/helpers/__mocks__/getRootDomains.ts @@ -0,0 +1,3 @@ +export default async () => { + return ['filedrop.cisa.gov']; +}; diff --git a/backend/src/tasks/helpers/__mocks__/saveDomainsToDb.ts b/backend/src/tasks/helpers/__mocks__/saveDomainsToDb.ts new file mode 100644 index 00000000..6c75db5d --- /dev/null +++ b/backend/src/tasks/helpers/__mocks__/saveDomainsToDb.ts @@ -0,0 +1,7 @@ +import { Domain } from '../../../models'; + +export default jest.fn(async (domains: Domain[]) => { + expect(domains.sort((a, b) => a.name.localeCompare(b.name))).toMatchSnapshot( + 'helpers.saveDomainsToDb' + ); +}); diff --git a/backend/src/tasks/helpers/__mocks__/saveServicesToDb.ts b/backend/src/tasks/helpers/__mocks__/saveServicesToDb.ts new file mode 100644 index 00000000..8245f4ee --- /dev/null +++ b/backend/src/tasks/helpers/__mocks__/saveServicesToDb.ts @@ -0,0 +1,9 @@ +import { Service } from '../../../models'; + +export default async (services: Service[]): Promise => { + services = services.sort((a, b) => + (a.service || '').localeCompare(b.service || '') + ); + expect(services).toMatchSnapshot('helpers.saveServicesToDb'); + return ['8831089d-f220-4bb5-893f-6b1ae5e7ca5a']; +}; diff --git a/backend/src/tasks/helpers/__mocks__/simple-wappalyzer.ts b/backend/src/tasks/helpers/__mocks__/simple-wappalyzer.ts new file mode 100644 index 00000000..8655975e --- /dev/null +++ b/backend/src/tasks/helpers/__mocks__/simple-wappalyzer.ts @@ -0,0 +1 @@ +export const wappalyzer = jest.fn(); diff --git a/backend/src/tasks/helpers/fetchPublicSuffixList.ts b/backend/src/tasks/helpers/fetchPublicSuffixList.ts new file mode 100644 index 00000000..07c8f1df --- /dev/null +++ b/backend/src/tasks/helpers/fetchPublicSuffixList.ts @@ -0,0 +1,43 @@ +import * as fs from 'fs'; +import fetch from 'node-fetch'; + +// Checks for PSL at ${path} and fetches a new one if missing or out of date +export default async (path = 'public_suffix_list.dat'): Promise => { + fs.open(path, 'wx', async (err, fd) => { + if (err) { + if (err.code === 'EEXIST') { + return await handleExistingPsl(path); + } else throw err; + } + try { + fs.writeFileSync(fd, await fetchPsl()); + } catch (e) { + console.error(e); + } finally { + fs.closeSync(fd); + } + }); +}; +async function handleExistingPsl(path) { + fs.open(path, 'r+', async (err, fd) => { + try { + const pslAge = (Date.now() - fs.fstatSync(fd).mtimeMs) / (1000 * 60 * 60); + if (pslAge > 24) { + fs.writeFileSync(fd, await fetchPsl()); + } + } catch (e) { + console.error(e); + } finally { + fs.closeSync(fd); + } + if (err) { + throw err; + } + }); +} + +async function fetchPsl() { + return await fetch('https://publicsuffix.org/list/public_suffix_list.dat', { + method: 'GET' + }).then((res) => res.text()); +} diff --git a/backend/src/tasks/helpers/getAllDomains.ts b/backend/src/tasks/helpers/getAllDomains.ts new file mode 100644 index 00000000..99404bae --- /dev/null +++ b/backend/src/tasks/helpers/getAllDomains.ts @@ -0,0 +1,13 @@ +import { In } from 'typeorm'; +import { Domain, connectToDatabase } from '../../models'; + +/** Helper function to fetch all domains */ +export default async (organizations?: string[]): Promise => { + await connectToDatabase(); + + return Domain.find({ + select: ['id', 'name', 'ip', 'organization'], + where: organizations ? { organization: In(organizations) } : {}, + relations: ['organization'] + }); +}; diff --git a/backend/src/tasks/helpers/getIps.ts b/backend/src/tasks/helpers/getIps.ts new file mode 100644 index 00000000..350bfde5 --- /dev/null +++ b/backend/src/tasks/helpers/getIps.ts @@ -0,0 +1,18 @@ +import { Domain, connectToDatabase } from '../../models'; + +/** Helper function to fetch all domains that have IPs set. */ +export default async (organizationId?: String): Promise => { + await connectToDatabase(); + + let domains = Domain.createQueryBuilder('domain') + .leftJoinAndSelect('domain.organization', 'organization') + .andWhere('ip IS NOT NULL'); + + if (organizationId) { + domains = domains.andWhere('domain.organization=:org', { + org: organizationId + }); + } + + return domains.getMany(); +}; diff --git a/backend/src/tasks/helpers/getLiveWebsites.ts b/backend/src/tasks/helpers/getLiveWebsites.ts new file mode 100644 index 00000000..798a16fa --- /dev/null +++ b/backend/src/tasks/helpers/getLiveWebsites.ts @@ -0,0 +1,54 @@ +import { plainToClass } from 'class-transformer'; +import { Domain, connectToDatabase, Service } from '../../models'; + +export class LiveDomain extends Domain { + url: string; + service: Service; +} + +/** Helper function to fetch all live websites (port 80 or 443) */ +export const getLiveWebsites = async ( + organizationId?: string, + organizationIds: string[] = [], + onlySSL: boolean = false +): Promise => { + await connectToDatabase(); + + if (organizationId) { + organizationIds = [organizationId]; + } + + if (organizationIds.length === 0) { + return []; + } + + const qs = Domain.createQueryBuilder('domain') + .leftJoinAndSelect('domain.services', 'services') + .leftJoinAndSelect('domain.organization', 'organization') + .andWhere('domain.organization IN (:...orgs)', { orgs: organizationIds }) + .groupBy('domain.id, domain.ip, domain.name, organization.id, services.id'); + + if (onlySSL) { + qs.andHaving("COUNT(CASE WHEN services.port = '443' THEN 1 END) >= 1"); + } else { + qs.andHaving( + "COUNT(CASE WHEN services.port = '443' OR services.port = '80' THEN 1 END) >= 1" + ); + } + + const websites = await qs.getMany(); + + return websites.map((domain) => { + const live = domain as LiveDomain; + const ports = domain.services.map((service) => service.port); + let service: Service; + if (ports.includes(443)) + service = domain.services.find((service) => service.port === 443)!; + else service = domain.services.find((service) => service.port === 80)!; + const url = + service.port === 443 ? `https://${domain.name}` : `http://${domain.name}`; + live.url = url; + live.service = service; + return live; + }); +}; diff --git a/backend/src/tasks/helpers/getRootDomains.ts b/backend/src/tasks/helpers/getRootDomains.ts new file mode 100644 index 00000000..10e396bf --- /dev/null +++ b/backend/src/tasks/helpers/getRootDomains.ts @@ -0,0 +1,8 @@ +import { Organization, connectToDatabase } from '../../models'; + +export default async (organizationId: string) => { + await connectToDatabase(); + + const organization = await Organization.findOne(organizationId); + return organization!.rootDomains; +}; diff --git a/backend/src/tasks/helpers/getScanOrganizations.ts b/backend/src/tasks/helpers/getScanOrganizations.ts new file mode 100644 index 00000000..99f14741 --- /dev/null +++ b/backend/src/tasks/helpers/getScanOrganizations.ts @@ -0,0 +1,19 @@ +import { Organization, Scan } from 'src/models'; + +/** + * Return the organizations that a scan should be run on. + * A scan should be run on an organization if the scan is + * enabled for that organization or for one of its tags. + */ +export default (scan: Scan) => { + const organizationsToRun: { [id: string]: Organization } = {}; + for (const tag of scan.tags) { + for (const organization of tag.organizations) { + organizationsToRun[organization.id] = organization; + } + } + for (const organization of scan.organizations) { + organizationsToRun[organization.id] = organization; + } + return Object.values(organizationsToRun); +}; diff --git a/backend/src/tasks/helpers/sanitizeChunkValues.ts b/backend/src/tasks/helpers/sanitizeChunkValues.ts new file mode 100644 index 00000000..78e72b86 --- /dev/null +++ b/backend/src/tasks/helpers/sanitizeChunkValues.ts @@ -0,0 +1,18 @@ +import { CommandOptions } from '../ecs-client'; + +export default async ( + commandOptions: CommandOptions +): Promise => { + const { chunkNumber, numChunks } = commandOptions; + const sanitizedOptions = commandOptions; + if (chunkNumber === undefined || numChunks === undefined) { + throw new Error('Chunks not specified.'); + } + + if (chunkNumber >= 100 || chunkNumber >= numChunks) { + throw new Error('Invalid chunk number.'); + } + sanitizedOptions.numChunks = numChunks > 100 ? 100 : numChunks; + + return sanitizedOptions; +}; diff --git a/backend/src/tasks/helpers/saveCpesToDb.ts b/backend/src/tasks/helpers/saveCpesToDb.ts new file mode 100644 index 00000000..999fecdf --- /dev/null +++ b/backend/src/tasks/helpers/saveCpesToDb.ts @@ -0,0 +1,26 @@ +import { connectToDatabase, Cpe } from '../../models'; + +export default async (cpes: Cpe[]): Promise => { + await connectToDatabase(); + console.log('Saving CPEs to database'); + const ids: string[] = []; + for (const cpe of cpes) { + try { + const id: string = ( + await Cpe.createQueryBuilder() + .insert() + .values(cpe) + .returning('id') + .onConflict( + `("name", "version", "vendor")DO UPDATE SET "lastSeenAt" = now()` + ) + .execute() + ).identifiers[0].id; + ids.push(id); + } catch (error) { + console.log(`Error saving CPE to database: ${error}`); + console.log(`CPE: ${cpe.name} ${cpe.version} ${cpe.vendor}`); + } + } + return ids; +}; diff --git a/backend/src/tasks/helpers/saveCvesToDb.ts b/backend/src/tasks/helpers/saveCvesToDb.ts new file mode 100644 index 00000000..dd9eba9b --- /dev/null +++ b/backend/src/tasks/helpers/saveCvesToDb.ts @@ -0,0 +1,60 @@ +import { connectToDatabase, Cpe, Cve } from '../../models'; + +export default async (cve: Cve, cpeIds: string[]): Promise => { + await connectToDatabase(); + console.log(`Saving ${cve.name} to database`); + try { + const id: string = ( + await Cve.createQueryBuilder() + .insert() + .values(cve) + .returning('id') + .orUpdate(cveFieldsToUpdate, ['name'], { + skipUpdateIfNoValuesChanged: true + }) + .execute() + ).identifiers[0].id; + if (id) { + await Cpe.createQueryBuilder().relation(Cve, 'cpes').of(id).add(cpeIds); + return id; + } + console.log(`${cve.name} is already up to date.`); + return ''; + } catch (error) { + console.log(`Error saving ${cve.name} to database: ${error}`); + return ''; + } +}; + +const cveFieldsToUpdate = [ + 'publishedAt', + 'modifiedAt', + 'status', + 'description', + 'cvssV2Source', + 'cvssV2Type', + 'cvssV2Version', + 'cvssV2VectorString', + 'cvssV2BaseScore', + 'cvssV2BaseSeverity', + 'cvssV2ExploitabilityScore', + 'cvssV2ImpactScore', + 'cvssV3Source', + 'cvssV3Type', + 'cvssV3Version', + 'cvssV3VectorString', + 'cvssV3BaseScore', + 'cvssV3BaseSeverity', + 'cvssV3ExploitabilityScore', + 'cvssV3ImpactScore', + 'cvssV4Source', + 'cvssV4Type', + 'cvssV4Version', + 'cvssV4VectorString', + 'cvssV4BaseScore', + 'cvssV4BaseSeverity', + 'cvssV4ExploitabilityScore', + 'cvssV4ImpactScore', + 'weaknesses', + 'references' +]; diff --git a/backend/src/tasks/helpers/saveDomainsReturn.ts b/backend/src/tasks/helpers/saveDomainsReturn.ts new file mode 100644 index 00000000..dd344a6b --- /dev/null +++ b/backend/src/tasks/helpers/saveDomainsReturn.ts @@ -0,0 +1,35 @@ +import { Domain, connectToDatabase } from '../../models'; + +export default async (domains: Domain[]) => { + await connectToDatabase(); + + const ids: string[] = []; + for (const domain of domains) { + const updatedValues = Object.keys(domain) + .map((key) => { + if (['name', 'fromRootDomain', 'discoveredBy'].indexOf(key) > -1) + return ''; + else if (key === 'organization') return 'organizationId'; + return domain[key] !== null ? key : ''; + }) + .filter((key) => key !== ''); + const id: string = ( + await Domain.createQueryBuilder() + .insert() + .values(domain) + .onConflict( + ` + ("name", "organizationId") DO UPDATE + SET ${updatedValues + .map((val) => `"${val}" = excluded."${val}",`) + .join('\n')} + "updatedAt" = now() + ` + ) + .returning('id') + .execute() + ).identifiers[0].id; + ids.push(id); + } + return ids; +}; diff --git a/backend/src/tasks/helpers/saveDomainsToDb.ts b/backend/src/tasks/helpers/saveDomainsToDb.ts new file mode 100644 index 00000000..0cc126c7 --- /dev/null +++ b/backend/src/tasks/helpers/saveDomainsToDb.ts @@ -0,0 +1,30 @@ +import { Domain, connectToDatabase } from '../../models'; + +export default async (domains: Domain[]): Promise => { + await connectToDatabase(); + + for (const domain of domains) { + const updatedValues = Object.keys(domain) + .map((key) => { + if (['name', 'fromRootDomain', 'discoveredBy'].indexOf(key) > -1) + return ''; + else if (key === 'organization') return 'organizationId'; + return domain[key] !== null ? key : ''; + }) + .filter((key) => key !== ''); + const { generatedMaps } = await Domain.createQueryBuilder() + .insert() + .values(domain) + .onConflict( + ` + ("name", "organizationId") DO UPDATE + SET ${updatedValues + .map((val) => `"${val}" = excluded."${val}",`) + .join('\n')} + "updatedAt" = now() + ` + ) + .execute(); + // return generatedMaps[0] as Domain; + } +}; diff --git a/backend/src/tasks/helpers/saveServicesToDb.ts b/backend/src/tasks/helpers/saveServicesToDb.ts new file mode 100644 index 00000000..2f7a72e7 --- /dev/null +++ b/backend/src/tasks/helpers/saveServicesToDb.ts @@ -0,0 +1,33 @@ +import { connectToDatabase, Service } from '../../models'; + +export default async (services: Service[]): Promise => { + await connectToDatabase(); + + const ids: string[] = []; + for (const service of services) { + const updatedValues = Object.keys(service) + .map((key) => { + if (['port', 'domain', 'discoveredBy'].indexOf(key) > -1) return ''; + return service[key] !== null ? key : ''; + }) + .filter((key) => key !== ''); + + const id: string = ( + await Service.createQueryBuilder() + .insert() + .values(service) + .onConflict( + ` + ("domainId","port") DO UPDATE + SET ${updatedValues + .map((val) => `"${val}" = excluded."${val}",`) + .join('\n')} + "updatedAt" = now()` + ) + .returning('id') + .execute() + ).identifiers[0].id; + ids.push(id); + } + return ids; +}; diff --git a/backend/src/tasks/helpers/saveTrustymailResultsToDb.ts b/backend/src/tasks/helpers/saveTrustymailResultsToDb.ts new file mode 100644 index 00000000..2377469e --- /dev/null +++ b/backend/src/tasks/helpers/saveTrustymailResultsToDb.ts @@ -0,0 +1,21 @@ +import { connectToDatabase, Domain } from '../../models'; +import * as fs from 'fs'; + +// TODO: Find a way to only send one query to the db +export default async (path: string): Promise => { + const jsonData = await fs.promises.readFile(path, 'utf8'); + const jsonObject = JSON.parse(jsonData)[0]; + jsonObject.updatedAt = new Date(); + const domainId = path.split('/')[path.split('/').length - 1].split('.')[0]; + await connectToDatabase(); + await Domain.createQueryBuilder() + .update(Domain) + .set({ + trustymailResults: () => `'${JSON.stringify(jsonObject)}'` + }) + .where('id = :id', { id: domainId }) + .execute(); + fs.unlink(path, (err) => { + if (err) throw err; + }); +}; diff --git a/backend/src/tasks/helpers/saveVulnerabilitiesToDb.ts b/backend/src/tasks/helpers/saveVulnerabilitiesToDb.ts new file mode 100644 index 00000000..e9c15f60 --- /dev/null +++ b/backend/src/tasks/helpers/saveVulnerabilitiesToDb.ts @@ -0,0 +1,40 @@ +import { connectToDatabase, Vulnerability } from '../../models'; + +export default async ( + vulnerabilities: Vulnerability[], + updateState: boolean +): Promise => { + await connectToDatabase(); + for (const vulnerability of vulnerabilities) { + const updatedValues = Object.keys(vulnerability).filter((key) => { + const allowedFields = [ + 'lastSeen', + 'cvss', + 'severity', + 'cve', + 'cwe', + 'cpe', + 'serviceId', + 'description', + 'structuredData', + ...(updateState ? ['state', 'substate'] : []) + ]; + return ( + vulnerability[key] !== undefined && allowedFields.indexOf(key) > -1 + ); + }); + await Vulnerability.createQueryBuilder() + .insert() + .values(vulnerability) + .onConflict( + ` + ("domainId", "title") DO UPDATE + SET ${updatedValues + .map((val) => `"${val}" = excluded."${val}",`) + .join('\n')} + "updatedAt" = now() + ` + ) + .execute(); + } +}; diff --git a/backend/src/tasks/helpers/saveWebpagesToDb.ts b/backend/src/tasks/helpers/saveWebpagesToDb.ts new file mode 100644 index 00000000..43fbc4bc --- /dev/null +++ b/backend/src/tasks/helpers/saveWebpagesToDb.ts @@ -0,0 +1,79 @@ +import { plainToClass } from 'class-transformer'; +import pRetry from 'p-retry'; +import { connectToDatabase, Webpage } from '../../models'; +import ESClient, { WebpageRecord } from '../es-client'; +import { ScraperItem } from '../webscraper'; + +/** Saves scraped webpages to the database, and also syncs them + * with Elasticsearch. + */ +export default async (scrapedWebpages: ScraperItem[]): Promise => { + await connectToDatabase(); + + const urlToInsertedWebpage: { [x: string]: Webpage } = {}; + for (const scrapedWebpage of scrapedWebpages) { + const result = await Webpage.createQueryBuilder() + .insert() + .values( + plainToClass(Webpage, { + lastSeen: new Date(Date.now()), + syncedAt: new Date(Date.now()), + domain: scrapedWebpage.domain, + discoveredBy: scrapedWebpage.discoveredBy, + url: scrapedWebpage.url, + status: scrapedWebpage.status, + responseSize: scrapedWebpage.response_size, + headers: [] + }) + ) + .onConflict( + ` + ("domainId","url") DO UPDATE + SET "lastSeen" = excluded."lastSeen", + "syncedAt" = excluded."syncedAt", + "status" = excluded."status", + "responseSize" = excluded."responseSize", + "headers" = excluded."headers", + "updatedAt" = now() + ` + ) + .returning('*') + .execute(); + urlToInsertedWebpage[scrapedWebpage.url] = result + .generatedMaps[0] as Webpage; + } + console.log('Saving webpages to elasticsearch...'); + const client = new ESClient(); + await pRetry( + () => + client.updateWebpages( + scrapedWebpages + .map((e) => { + const insertedWebpage = urlToInsertedWebpage[e.url]; + if (!insertedWebpage) { + console.log(`Inserted webpage not found for URL: ${e.url}`); + return undefined; + } + return { + webpage_id: insertedWebpage.id, + webpage_createdAt: insertedWebpage.createdAt, + webpage_updatedAt: insertedWebpage.updatedAt, + webpage_syncedAt: insertedWebpage.syncedAt, + webpage_lastSeen: insertedWebpage.lastSeen, + webpage_url: insertedWebpage.url, + webpage_status: insertedWebpage.status, + webpage_domainId: e.domain!.id, + webpage_discoveredById: e.discoveredBy!.id, + webpage_responseSize: insertedWebpage.responseSize, + webpage_headers: e.headers || [], + webpage_body: e.body + }; + }) + .filter((e) => e) as WebpageRecord[] + ), + { + retries: 10, + randomize: true + } + ); +}; diff --git a/backend/src/tasks/helpers/simple-wappalyzer.ts b/backend/src/tasks/helpers/simple-wappalyzer.ts new file mode 100644 index 00000000..f6b92280 --- /dev/null +++ b/backend/src/tasks/helpers/simple-wappalyzer.ts @@ -0,0 +1,169 @@ +// Based on https://github.com/Kikobeats/simple-wappalyzer. This is a forked +// version of this library so that it uses additional, custom technologies. +// The original library is based on the following license: + +// The MIT License (MIT) + +// Copyright © 2020 Kiko Beats (kikobeats.com) + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import { + setTechnologies, + setCategories, + analyze, + resolve +} from 'wappalyzer-core'; +import { chain, mapValues } from 'lodash'; +import { JSDOM, VirtualConsole } from 'jsdom'; +import { Cookie } from 'tough-cookie'; +import * as categories from 'wappalyzer/categories.json'; +import * as _ from 'wappalyzer/technologies/_.json'; +import * as a from 'wappalyzer/technologies/a.json'; +import * as b from 'wappalyzer/technologies/b.json'; +import * as c from 'wappalyzer/technologies/c.json'; +import * as d from 'wappalyzer/technologies/d.json'; +import * as e from 'wappalyzer/technologies/e.json'; +import * as f from 'wappalyzer/technologies/f.json'; +import * as g from 'wappalyzer/technologies/g.json'; +import * as h from 'wappalyzer/technologies/h.json'; +import * as i from 'wappalyzer/technologies/i.json'; +import * as j from 'wappalyzer/technologies/j.json'; +import * as k from 'wappalyzer/technologies/k.json'; +import * as l from 'wappalyzer/technologies/l.json'; +import * as m from 'wappalyzer/technologies/m.json'; +import * as n from 'wappalyzer/technologies/n.json'; +import * as o from 'wappalyzer/technologies/o.json'; +import * as p from 'wappalyzer/technologies/p.json'; +import * as q from 'wappalyzer/technologies/q.json'; +import * as r from 'wappalyzer/technologies/r.json'; +import * as s from 'wappalyzer/technologies/s.json'; +import * as t from 'wappalyzer/technologies/t.json'; +import * as u from 'wappalyzer/technologies/u.json'; +import * as v from 'wappalyzer/technologies/v.json'; +import * as w from 'wappalyzer/technologies/w.json'; +import * as x from 'wappalyzer/technologies/x.json'; +import * as y from 'wappalyzer/technologies/y.json'; +import * as z from 'wappalyzer/technologies/z.json'; +import * as customTechnologies from './technologies.json'; + +const fs = require('fs'); +const path = require('path'); + +const outOfTheBoxTechnologies = { + ..._, + ...a, + ...b, + ...c, + ...d, + ...e, + ...f, + ...g, + ...h, + ...i, + ...j, + ...k, + ...l, + ...m, + ...n, + ...o, + ...p, + ...q, + ...r, + ...s, + ...t, + ...u, + ...v, + ...w, + ...x, + ...y, + ...z +}; + +const parseCookie = (str) => { + if (str) { + const parsed = Cookie.parse(str); + if (parsed) { + return parsed.toJSON(); + } + } + return JSON.stringify(''); +}; + +const getCookies = (str) => + chain(str) + .castArray() + .compact() + .map(parseCookie) + .map(({ key: name, ...props }) => ({ name, ...props })) + .value(); + +const getHeaders = (headers) => mapValues(headers, (value) => [value]); + +const getScripts = (scripts) => + chain(scripts).map('src').compact().uniq().value(); + +const getMeta = (document) => + Array.from(document.querySelectorAll('meta')).reduce( + (acc: any, meta: any) => { + const key = meta.getAttribute('name') || meta.getAttribute('property'); + if (key) acc[key.toLowerCase()] = [meta.getAttribute('content')]; + return acc; + }, + {} + ); + +export const technologies = { + ...customTechnologies, + ...outOfTheBoxTechnologies +}; + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +for (const technology of Object.values(technologies)) { + // Handles various regex errors with wappalyzer -- we get errors such as the following: + // SyntaxError: Invalid regular expression: /link[href*='\/wp-content\/plugins\/amp\/']/: Range out of order in character class + if ((technology as any).dom && typeof (technology as any).dom === 'string') { + (technology as any).dom = escapeRegExp((technology as any).dom); + } + if ((technology as any).dom && Array.isArray((technology as any).dom)) { + (technology as any).dom = (technology as any).dom.map(escapeRegExp); + } +} + +setTechnologies(technologies); +setCategories(categories); + +export const wappalyzer = ({ data = '', url = '', headers = {} }) => { + const dom = new JSDOM(data, { + url: url, + virtualConsole: new VirtualConsole() + }); + + return analyze({ + url: url, + meta: getMeta(dom.window.document), + headers: getHeaders(headers), + scripts: getScripts(dom.window.document.scripts), + cookies: getCookies(headers['set-cookie']), + html: dom.serialize() + }); +}; diff --git a/backend/src/tasks/helpers/technologies.json b/backend/src/tasks/helpers/technologies.json new file mode 100644 index 00000000..9c555950 --- /dev/null +++ b/backend/src/tasks/helpers/technologies.json @@ -0,0 +1,93 @@ +{ + "Sitefinity": { + "cats": [ + 1 + ], + "icon": "Sitefinity.svg", + "cpe": "cpe:/a:progress:sitefinity", + "implies": "Microsoft ASP.NET", + "js": { + "Telerik.Sitefinity": "" + }, + "meta": { + "generator": "^Sitefinity (\\S+)\\;version:\\1" + }, + "website": "https://www.progress.com/sitefinity-cms", + "examples": [ + { + "name": "with version and suffix", + "html": "Oracle WebLogic Server Administration Console", + "

            WebLogic Server Version: (.*?)

            \\;version:\\1" + ], + "icon": "Oracle.png", + "website": "http://www.oracle.com/technetwork/middleware/ias/overview/index.html", + "examples": [ + { + "name": "with version", + "html": "

            WebLogic Server Version: 10.3.6.0

            ", + "version": "10.3.6.0" + } + ] + }, + "Microsoft Exchange Server": { + "cats": [ + 30 + ], + "cpe": "cpe:/a:microsoft:exchange_server", + "html": [ + "", + "", + "version": "3.7.0" + } + ] + }, + "Oracle PeopleSoft": { + "cats": [ + 61 + ], + "cookies": { + "PS_TOKEN": "" + }, + "cpe": "cpe:/a:oracle:peoplesoft_enterprise", + "html": [ + "Oracle PeopleSoft Sign-in" + ], + "website": "https://www.oracle.com/applications/peoplesoft/" + } +} \ No newline at end of file diff --git a/backend/src/tasks/helpers/technologies_backup.json b/backend/src/tasks/helpers/technologies_backup.json new file mode 100644 index 00000000..645f025c --- /dev/null +++ b/backend/src/tasks/helpers/technologies_backup.json @@ -0,0 +1,35 @@ +{ + "Telerik UI for ASP.NET AJAX": { + "__comments__":"TODO: this needs to be added back to the main file once we fix the test", + "cats": [ + 59 + ], + "cpe": "cpe:/a:telerik:ui_for_asp.net_ajax", + "js": { + "Telerik": "" + }, + "html": [ + "[\\;version:\\1" + ], + "website": "https://www.telerik.com/products/aspnet-ajax.aspx", + "examples": [ + { + "name": "with version", + "html": "", + "version": "2014.2.724.40" + }, + { + "name": "with no version", + "html": "", + "version": "" + }, + { + "name": "with version in comment", + "html": "\t { + await connectToDatabase(); + + let domains = Domain.createQueryBuilder('domain') + .leftJoinAndSelect('domain.organization', 'organization') + .andWhere('ip IS NOT NULL') + .andWhere('domain.name LIKE :gov', { gov: '%.gov' }) + .andWhere('domain.ipOnly=:bool', { bool: false }); + + if (organizationId) { + domains = domains.andWhere('domain.organization=:org', { + org: organizationId + }); + } + + return domains.getMany(); +} + +async function lookupEmails( + breachesDict: { [key: string]: breachResults }, + domain: Domain +) { + try { + const { data } = await axios.get( + 'https://haveibeenpwned.com/api/v2/enterprisesubscriber/domainsearch/' + + domain.name, + { + headers: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + } + ); + + const addressResults = {}; + const breachResults = {}; + const finalResults = {}; + + const shouldCountBreach = (breach) => + breach.IsVerified === true && breach.BreachDate > '2016-01-01'; + + for (const email in data) { + const filtered = (data[email] || []).filter((e) => + shouldCountBreach(breachesDict[e]) + ); + if (filtered.length > 0) { + addressResults[email + '@' + domain.name] = filtered; + for (const breach of filtered) { + if (!(breach in breachResults)) { + breachResults[breach] = breachesDict[breach]; + breachResults[breach].passwordIncluded = + breachResults[breach].DataClasses.indexOf('Passwords') > -1; + } + } + } + } + + finalResults['Emails'] = addressResults; + finalResults['Breaches'] = breachResults; + return finalResults; + } catch (error) { + console.error( + `An error occured when trying to access the HIPB API using the domain: ${domain.name}: ${error} ` + ); + return null; + } +} + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName } = commandOptions; + + console.log('Running hibp on organization', organizationName); + const domainsWithIPs = await getIps(organizationId); + const { data } = await axios.get( + 'https://haveibeenpwned.com/api/v2/breaches', + { + headers: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + } + ); + const breachesDict: { [key: string]: breachResults } = {}; + for (const breach of data) { + breachesDict[breach.Name] = breach; + } + + const services: Service[] = []; + const vulns: Vulnerability[] = []; + for (const domain of domainsWithIPs) { + const results = await lookupEmails(breachesDict, domain); + + if (results) { + console.log( + `Got ${Object.keys(results['Emails']).length} emails for domain ${ + domain.name + }` + ); + + if (Object.keys(results['Emails']).length !== 0) { + vulns.push( + plainToClass(Vulnerability, { + domain: domain, + lastSeen: new Date(Date.now()), + title: 'Exposed Emails', + state: 'open', + source: 'hibp', + severity: 'Low', + needsPopulation: false, + structuredData: { + emails: results['Emails'], + breaches: results['Breaches'] + }, + description: `Emails associated with ${domain.name} have been exposed in a breach.` + }) + ); + await saveVulnerabilitiesToDb(vulns, false); + } + } + } +}; diff --git a/backend/src/tasks/intrigue-ident.ts b/backend/src/tasks/intrigue-ident.ts new file mode 100644 index 00000000..fc074d3d --- /dev/null +++ b/backend/src/tasks/intrigue-ident.ts @@ -0,0 +1,48 @@ +import { CommandOptions } from './ecs-client'; +import { getLiveWebsites, LiveDomain } from './helpers/getLiveWebsites'; +import PQueue from 'p-queue'; +import * as buffer from 'buffer'; +import { spawnSync } from 'child_process'; + +const intrigueIdent = async (domain: LiveDomain): Promise => { + console.log('Domain', domain.name); + const { stdout, stderr, status } = spawnSync( + 'intrigue-ident', + ['--uri', domain.url, '--json'], + { + env: { + ...process.env, + HTTP_PROXY: process.env.GLOBAL_AGENT_HTTP_PROXY, + HTTPS_PROXY: process.env.GLOBAL_AGENT_HTTP_PROXY + }, + maxBuffer: buffer.constants.MAX_LENGTH + } + ); + if (stderr?.toString()) { + console.error('stderr', stderr.toString()); + } + if (status !== 0) { + console.error('IntrigueIdent failed'); + return; + } + const output = stdout.toString(); + const { fingerprint, content } = JSON.parse( + output.substring(output.indexOf('{')) + ); + domain.service.intrigueIdentResults = { fingerprint, content }; + await domain.service.save(); +}; + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName } = commandOptions; + + console.log('Running intrigueIdent on organization', organizationName); + + const liveWebsites = await getLiveWebsites(organizationId!); + const queue = new PQueue({ concurrency: 5 }); + await Promise.all( + liveWebsites.map((site) => queue.add(() => intrigueIdent(site))) + ); + + console.log(`IntrigueIdent finished for ${liveWebsites.length} domains`); +}; diff --git a/backend/src/tasks/lambda-client.ts b/backend/src/tasks/lambda-client.ts new file mode 100644 index 00000000..81e727ec --- /dev/null +++ b/backend/src/tasks/lambda-client.ts @@ -0,0 +1,44 @@ +import { Lambda } from 'aws-sdk'; +import { handler as scheduler } from './scheduler'; + +/** + * Lambda Client used to invoke lambda functions. + */ +class LambdaClient { + lambda: Lambda; + isLocal: boolean; + + constructor() { + this.isLocal = + process.env.IS_OFFLINE || process.env.IS_LOCAL ? true : false; + if (!this.isLocal) { + this.lambda = new Lambda(); + } + } + + /** + * Invokes a lambda function with the given name. + */ + async runCommand({ + name + }: { + name: string; + }): Promise { + console.log('Invoking lambda function ', name); + if (this.isLocal) { + scheduler({}, {} as any, () => null); + return { StatusCode: 202, Payload: '' }; + } else { + // Invoke lambda asynchronously + return this.lambda + .invoke({ + FunctionName: name, + InvocationType: 'Event', + Payload: '' + }) + .promise(); + } + } +} + +export default LambdaClient; diff --git a/backend/src/tasks/lookingGlass.ts b/backend/src/tasks/lookingGlass.ts new file mode 100644 index 00000000..da37636b --- /dev/null +++ b/backend/src/tasks/lookingGlass.ts @@ -0,0 +1,297 @@ +import { + Organization, + Domain, + Vulnerability, + connectToDatabase +} from '../models'; +import { CommandOptions } from './ecs-client'; +import got from 'got'; +import { plainToClass } from 'class-transformer'; +import saveVulnerabilitiesToDb from './helpers/saveVulnerabilitiesToDb'; +import { exit } from 'process'; +import saveDomainsToDb from './helpers/saveDomainsToDb'; + +interface LGCollectionsResponse { + children: any[]; + createdAt: string; + createdBy: string; + id: string; + name: string; + ticScore: number; + updatedAt: string; + updatedBy: string; +} + +interface LGThreatResponse { + totalHits: number; + results: { + firstSeen: number; + lastSeen: number; + sources: string[]; + right: { + ticClassificationScores: number[]; + threatId: string; + classifications: string[]; + ticScore: number; + ticCriticality: number; + ticSourceScore: number; + ticObsInfluence: number; + ref: { + type: string; + id: string; + }; + threatCategories: string[]; + name: string; + type: string; + threatName: string; + }; + left: { + collectionIds: string[]; + classifications: string[]; + ticScore: number; + owners: string[]; + ref: { + type: string; + id: number; + }; + name: string; + type: string; + threatNames: string[]; + locations: { + city: string; + country: string; + region: string; + geoPoint: { + long: number; + lat: number; + }; + countryName: string; + sources: string[]; + country2Digit: string; + lastSeen: number; + }[]; + ipv4: number; + asns: number[]; + threatIds: string[]; + cidrv4s: string[]; + }; + ref: { + type: string; + right: { + type: string; + id: string; + }; + left: { + type: string; + id: string; + }; + }; + }[]; +} + +interface ParsedLGResponse { + firstSeen: Date; + lastSeen: Date; + sources: string[]; + ref_type: string; + ref_right_type: string; + ref_right_id: string; + ref_left_type: string; + ref_left_id: string; + + right_ticScore: number; + right_classifications: string[]; + right_name: string; + + left_type: string; + left_ticScore: number; + left_name: string; + vulnOrMal: string; +} + +async function getCollectionForCurrentWorkspace() { + const resource = + 'https://delta.lookingglasscyber.com/api/v1/workspaces/' + + process.env.LG_WORKSPACE_NAME + + '/collections'; + return (await got(resource, { + headers: { Authorization: 'Bearer ' + process.env.LG_API_KEY } + }).json()) as LGCollectionsResponse[]; +} + +function validateIPAddress(ipAddress) { + return /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/.test(ipAddress); +} + +/** + * Gets threat information from the LookingGlass API + * for the collection with the given ID. + */ +async function getThreatInfo(collectionID) { + const resource = 'https://delta.lookingglasscyber.com/api/graph/query'; + const modifier = { + period: 'all', + query: [ + 'and', + ['=', 'type', ['associated-with']], + ['or', ['=', 'right.type', 'threat'], ['=', 'left.type', 'ipv4']], + ['=', 'left.collectionIds', collectionID] + ], + fields: ['firstSeen', 'lastSeen', 'sources', 'right', 'left'], + limit: 100000, + workspaceIds: [] + }; + + return got + .post(resource, { + json: modifier, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer ' + process.env.LG_API_KEY + } + }) + .json() as unknown as LGThreatResponse; +} + +/** + * Save domains from LookingGlass API response, and retrieve + * domains for the given organization. + */ +async function saveAndPullDomains( + response: LGThreatResponse, + organizationId: string, + scanId: string +) { + const domains: Domain[] = []; + for (const l of response.results) { + if (validateIPAddress(l.left.name)) { + // If l.left.name is an IP address, the domain has no associated + // domain name, so mark it as an ip-only domain. + const currentDomain = plainToClass(Domain, { + name: l.left.name, + ip: l.left.name, + organization: { id: organizationId }, + fromRootDomain: '', + ipOnly: true, + discoveredBy: { id: scanId } + }); + domains.push(currentDomain); + } else { + const currentDomain = plainToClass(Domain, { + name: l.left.name, + ip: '', + organization: { id: organizationId }, + fromRootDomain: '', + ipOnly: false, + discoveredBy: { id: scanId } + }); + domains.push(currentDomain); + } + } + await saveDomainsToDb(domains); + + const pulledDomains = Domain.createQueryBuilder('domain') + .leftJoinAndSelect('domain.organization', 'organization') + .andWhere('ip IS NOT NULL') + .andWhere('domain.organization=:org', { org: organizationId }); + + return pulledDomains.getMany(); +} + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName, scanId } = commandOptions; + + console.log('Running lookingGlass on organization', organizationName); + + const collections: LGCollectionsResponse[] = + await getCollectionForCurrentWorkspace(); + const vulnerabilities: Vulnerability[] = []; + const domainDict: {} = {}; + + for (const line of collections) { + // Match the organization to the LookingGlass Collection + if (organizationName === line.name) { + const collectionID = line.id; + + // Query LookingGlass for the threat info + const data: LGThreatResponse = await getThreatInfo(collectionID); + const responseDomains: Domain[] = await saveAndPullDomains( + data, + organizationId!, + scanId + ); + // Only pull domains that have been seen in the last two months. + const twoMonthsAgo = new Date(); + twoMonthsAgo.setMonth(twoMonthsAgo.getMonth() - 2); + console.log(`Pulling domains seen since ${twoMonthsAgo}`); + for (const l of data.results) { + // Create a dictionary of relevant fields from the API request. + const lastSeen = new Date(l.lastSeen); + if (lastSeen > twoMonthsAgo) { + const val: ParsedLGResponse = { + firstSeen: new Date(l.firstSeen), + lastSeen: lastSeen, + sources: l.sources, + ref_type: l.ref.type, + ref_right_type: l.ref.right.type, + ref_right_id: l.ref.right.id, + ref_left_type: l.ref.left.type, + ref_left_id: l.ref.left.id, + + right_ticScore: l.right.ticScore, + right_classifications: l.right.classifications, + right_name: l.right.name, + + left_type: l.left.type, + left_ticScore: l.left.ticScore, + left_name: l.left.name, + vulnOrMal: + l.right.classifications[0] === 'Vulnerable Service' + ? 'Vulnerability' + : 'Malware' + }; + + // If we havn't seen this domain yet, create a empty dictionary under the domain + if (!domainDict[l.left.name]) { + domainDict[l.left.name] = {}; + } + // If we have seen this domain and this threat, merge the two by taking the most recent lastSeen and oldest firstSeen + if (domainDict[l.left.name][l.right.name]) { + if (lastSeen > domainDict[l.left.name][l.right.name].lastSeen) { + domainDict[l.left.name][l.right.name].lastSeen = val.lastSeen; + } + if (l.firstSeen < domainDict[l.left.name][l.right.name].firstSeen) { + domainDict[l.left.name][l.right.name].firstSeen = val.firstSeen; + } + } + // If we have seen this domain but not this threat, add the val under the domain and threat + else { + domainDict[l.left.name][l.right.name] = val; + } + + for (const domain of responseDomains) { + if (domainDict[domain.name]) { + const vulnerability = { + domain: domain, + lastSeen: new Date(Date.now()), + title: 'Looking Glass Data', + state: 'open', + severity: 'Low', + source: 'lookingGlass', + needsPopulation: false, + structuredData: { + lookingGlassData: Object.values(domainDict[domain.name]) + }, + description: `Vulnerabilities / malware found by LookingGlass.` + }; + vulnerabilities.push(plainToClass(Vulnerability, vulnerability)); + } + } + } + } + + await saveVulnerabilitiesToDb(vulnerabilities, false); + console.log('Vulnerabilities saved to db'); + } + } +}; diff --git a/backend/src/tasks/makeGlobalAdmin.ts b/backend/src/tasks/makeGlobalAdmin.ts new file mode 100644 index 00000000..b1067311 --- /dev/null +++ b/backend/src/tasks/makeGlobalAdmin.ts @@ -0,0 +1,15 @@ +import { Handler } from 'aws-lambda'; +import { connectToDatabase, User, UserType } from '../models'; + +export const handler: Handler = async (event) => { + await connectToDatabase(true); + if (event.email) { + const user = await User.findOne({ + email: event.email + }); + if (user) { + user.userType = event.role || UserType.GLOBAL_ADMIN; + await User.save(user); + } + } +}; diff --git a/backend/src/tasks/pesyncdb.ts b/backend/src/tasks/pesyncdb.ts new file mode 100644 index 00000000..aa22c078 --- /dev/null +++ b/backend/src/tasks/pesyncdb.ts @@ -0,0 +1,6642 @@ +import { Client } from 'pg'; +import { Handler } from 'aws-lambda'; +import { connectToDatabase } from '../models'; + +/* + * Generates initial P&E database. + */ + +const PE_DATA_SCHEMA = ` +-- From: https://github.com/cisagov/pe-reports/blob/8b0f0bcac64f0306ce804fad25d73efaa943fe93/src/pe_reports/data/data_schema.sql +-- +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.16 +-- Dumped by pg_dump version 12.14 (Ubuntu 12.14-0ubuntu0.20.04.1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public; + + +-- +-- Name: EXTENSION pgcrypto; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions'; + + +-- +-- Name: uuid-ossp; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public; + + +-- +-- Name: EXTENSION "uuid-ossp"; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)'; + + +-- +-- Name: get_cred_metrics(date, date); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.get_cred_metrics(start_date date, end_date date) RETURNS TABLE(organizations_uid uuid, password_creds bigint, total_creds bigint, num_breaches bigint) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + SELECT + cred_metrics.organizations_uid, + cred_metrics.password_creds, + cred_metrics.total_creds, + breach_metrics.num_breaches + FROM + ( + SELECT + reported_orgs.organizations_uid, + CAST(COALESCE(creds.password_included, 0) as bigint) password_creds, + CAST(COALESCE(creds.no_password + creds.password_included, 0) as bigint) total_creds + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + vw_breachcomp_credsbydate.organizations_uid, + SUM(no_password) as no_password, + SUM(password_included) as password_included + FROM + public.vw_breachcomp_credsbydate + WHERE + mod_date BETWEEN start_date AND end_date + GROUP BY + vw_breachcomp_credsbydate.organizations_uid + ) creds + ON reported_orgs.organizations_uid = creds.organizations_uid + ) cred_metrics + INNER JOIN + ( + SELECT + reported_orgs.organizations_uid, + COALESCE(breaches.num_breaches, 0) num_breaches + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + vw_breachcomp.organizations_uid, + COUNT(DISTINCT breach_name) as num_breaches + FROM + public.vw_breachcomp + WHERE + modified_date BETWEEN start_date AND end_date + GROUP BY + vw_breachcomp.organizations_uid + ) breaches + ON reported_orgs.organizations_uid = breaches.organizations_uid + ) breach_metrics + ON + cred_metrics.organizations_uid = breach_metrics.organizations_uid; +END; $$; + + +ALTER FUNCTION public.get_cred_metrics(start_date date, end_date date) OWNER TO pe; + +-- +-- Name: get_darkweb_metrics(date, date); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.get_darkweb_metrics(start_date date, end_date date) RETURNS TABLE(organizations_uid uuid, num_dw_alerts bigint, num_dw_mentions bigint, num_dw_threats bigint, num_dw_invites bigint) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + SELECT + dw_alert_metrics.organizations_uid, + dw_alert_metrics.num_dw_alerts, + CAST(dw_mention_metrics.num_dw_mentions as bigint) AS num_dw_mentions, + dw_threat_metrics.num_dw_threats, + dw_invite_metrics.num_dw_invites + FROM + ( + SELECT + reported_orgs.organizations_uid, + COALESCE(alerts.num_dw_alerts, 0) AS num_dw_alerts + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + /* Get count of dark web alerts for the report period*/ + SELECT + alerts.organizations_uid, + COUNT(*) num_dw_alerts + FROM + public.alerts + WHERE + date BETWEEN start_date AND end_date + GROUP BY + alerts.organizations_uid + ) alerts + ON reported_orgs.organizations_uid = alerts.organizations_uid + ) dw_alert_metrics + INNER JOIN + ( + SELECT + reported_orgs.organizations_uid, + COALESCE(mentions.num_dw_mentions, 0) AS num_dw_mentions + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + vw_darkweb_mentionsbydate.organizations_uid, + SUM(public.vw_darkweb_mentionsbydate."Count") as num_dw_mentions + FROM + public.vw_darkweb_mentionsbydate + WHERE + date BETWEEN start_date AND end_date + GROUP BY + vw_darkweb_mentionsbydate.organizations_uid + ) mentions + ON reported_orgs.organizations_uid = mentions.organizations_uid + ) dw_mention_metrics + ON + dw_alert_metrics.organizations_uid = dw_mention_metrics.organizations_uid + INNER JOIN + ( + SELECT + reported_orgs.organizations_uid, + COALESCE(threats.num_dw_threats, 0) AS num_dw_threats + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + vw_darkweb_potentialthreats.organizations_uid, + COUNT(*) as num_dw_threats + FROM + public.vw_darkweb_potentialthreats + WHERE + date BETWEEN start_date AND end_date + GROUP BY + vw_darkweb_potentialthreats.organizations_uid + ) threats + ON reported_orgs.organizations_uid = threats.organizations_uid + ) dw_threat_metrics + ON + dw_alert_metrics.organizations_uid = dw_threat_metrics.organizations_uid + INNER JOIN + ( + SELECT + reported_orgs.organizations_uid, + COALESCE(invites.num_dw_invites, 0) AS num_dw_invites + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + vw_darkweb_inviteonlymarkets.organizations_uid, + COUNT(*) as num_dw_invites + FROM + public.vw_darkweb_inviteonlymarkets + WHERE + date BETWEEN start_date AND end_date + GROUP BY + vw_darkweb_inviteonlymarkets.organizations_uid + ) invites + ON reported_orgs.organizations_uid = invites.organizations_uid + ) dw_invite_metrics + ON + dw_alert_metrics.organizations_uid = dw_invite_metrics.organizations_uid; +END; $$; + + +ALTER FUNCTION public.get_darkweb_metrics(start_date date, end_date date) OWNER TO pe; + +-- +-- Name: get_domain_metrics(date, date); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.get_domain_metrics(start_date date, end_date date) RETURNS TABLE(organizations_uid uuid, num_sus_domain bigint, num_alert_domain bigint) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + SELECT + domain_sus_metrics.organizations_uid, + domain_sus_metrics.num_sus_domain, + domain_alert_metrics.num_alert_domain + FROM + ( + SELECT + reported_orgs.organizations_uid, + COALESCE(domain_sus.num_sus_domain, 0) num_sus_domain + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + domain_permutations.organizations_uid, + COUNT(*) as num_sus_domain + FROM + public.domain_permutations + WHERE + date_active BETWEEN start_date AND end_date + AND + malicious = True + GROUP BY + domain_permutations.organizations_uid + ) domain_sus + ON reported_orgs.organizations_uid = domain_sus.organizations_uid + ) domain_sus_metrics + INNER JOIN + ( + SELECT + reported_orgs.organizations_uid, + COALESCE(domain_alerts.num_alert_domain, 0) num_alert_domain + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + domain_alerts.organizations_uid, + COUNT(*) as num_alert_domain + FROM + public.domain_alerts + WHERE + date BETWEEN start_date AND end_date + GROUP BY + domain_alerts.organizations_uid + ) domain_alerts + ON reported_orgs.organizations_uid = domain_alerts.organizations_uid + ) domain_alert_metrics + ON + domain_sus_metrics.organizations_uid = domain_alert_metrics.organizations_uid; +END; $$; + + +ALTER FUNCTION public.get_domain_metrics(start_date date, end_date date) OWNER TO pe; + +-- +-- Name: get_vuln_metrics(date, date); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.get_vuln_metrics(start_date date, end_date date) RETURNS TABLE(organizations_uid uuid, num_verif_vulns bigint, num_assets_unverif_vulns bigint, num_insecure_ports bigint) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + SELECT + verif_vuln_metrics.organizations_uid, + verif_vuln_metrics.num_verif_vulns, + assets_unverif_vuln_metrics.num_assets_unverif_vulns, + insecure_port_metrics.num_insecure_ports + FROM + ( + SELECT + reported_orgs.organizations_uid, + COALESCE(verif_vulns.num_verif_vulns, 0) AS num_verif_vulns + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + cve_ip_combos.organizations_uid, + COUNT(*) as num_verif_vulns + FROM + ( + SELECT DISTINCT + vw_shodanvulns_verified.organizations_uid, + cve, + ip + FROM + public.vw_shodanvulns_verified + WHERE + timestamp BETWEEN start_date AND end_date + ) cve_ip_combos + GROUP BY + cve_ip_combos.organizations_uid + ) verif_vulns + ON + reported_orgs.organizations_uid = verif_vulns.organizations_uid + ) verif_vuln_metrics + INNER JOIN + ( + SELECT + reported_orgs.organizations_uid, + COALESCE(assets_unverif_vulns.num_assets_unverif_vuln, 0) AS num_assets_unverif_vulns + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + cve_ip_combos.organizations_uid, + COUNT(*) as num_assets_unverif_vuln + FROM + ( + SELECT DISTINCT + vw_shodanvulns_suspected.organizations_uid, + potential_vulns, + ip + FROM + public.vw_shodanvulns_suspected + WHERE + timestamp BETWEEN start_date AND end_date + AND + vw_shodanvulns_suspected.type != 'Insecure Protocol' + ) cve_ip_combos + GROUP BY + cve_ip_combos.organizations_uid + ) assets_unverif_vulns + ON + reported_orgs.organizations_uid = assets_unverif_vulns.organizations_uid + ) assets_unverif_vuln_metrics + ON + verif_vuln_metrics.organizations_uid = assets_unverif_vuln_metrics.organizations_uid + INNER JOIN + ( + SELECT + reported_orgs.organizations_uid, + COALESCE(insecure_ports.num_risky_port, 0) AS num_insecure_ports + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + risky_ports.organizations_uid, + COUNT(port) as num_risky_port + FROM + ( + SELECT DISTINCT + vw_shodanvulns_suspected.organizations_uid, + protocol, + ip, + port + FROM + public.vw_shodanvulns_suspected + WHERE + vw_shodanvulns_suspected.type = 'Insecure Protocol' + AND + (protocol != 'http' AND protocol != 'smtp') + AND + timestamp BETWEEN start_date AND end_date + ) risky_ports + GROUP BY + risky_ports.organizations_uid + ) insecure_ports + ON + reported_orgs.organizations_uid = insecure_ports.organizations_uid + ) insecure_port_metrics + ON + verif_vuln_metrics.organizations_uid = insecure_port_metrics.organizations_uid; +END; $$; + + +ALTER FUNCTION public.get_vuln_metrics(start_date date, end_date date) OWNER TO pe; + +-- +-- Name: insert_cidr(inet, uuid, text, date, date); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.insert_cidr(arg_net inet, arg_org_uid uuid, arg_data_src text, arg_first_seen date, arg_last_seen date) RETURNS uuid + LANGUAGE plpgsql + AS $$ +declare + parent_uid uuid := null; + comp_cidr_uid uuid := null; + comp_net cidr; + comp_uid uuid := null; + comp_parent_uid uuid := null; + comp_cyhy_id text := null; + save_to_db boolean := true; + ds_uid uuid := null; + new_cidr_uid uuid := null; + in_cidrs record; + cidrs_in record; +begin + select o.parent_org_uid into parent_uid from organizations o where o.organizations_uid = arg_org_uid; + select ds.data_source_uid into ds_uid from data_source ds where ds.name = arg_data_src; + -- Check if any cidrs equal the provided cidr + select ct.cidr_uid, o.organizations_uid , ct.network, o.parent_org_uid, o."cyhy_db_name" as parent_id from cidrs ct + join organizations o on ct.organizations_uid = o.organizations_uid + where ct.network = arg_net into comp_cidr_uid, comp_uid, comp_net, comp_parent_uid, comp_cyhy_id; + if (comp_net is not null) then + --if the already saved cidr's org is the given cidr's parent org + if (comp_uid = parent_uid) then + -- point given cidr to the new child org + update cidrs set organizations_uid = arg_org_uid, last_seen = arg_last_seen + where organizations_uid = comp_uid and network = arg_net; + new_cidr_uid := comp_cidr_uid; + save_to_db := false; + --if the given cidr is the parent to the already saved cidr. + --(the cidr exists in the db and has already been assigned to a + --child org. We know this is true if the provided cidr's org_uid is equal + --to the already existing cidr's parent_org_uid) + elseif (arg_org_uid = comp_parent_uid) then + -- update last_seen + update cidrs set last_seen = arg_last_seen + where network = arg_net; + raise notice 'This cidr already exists in a child organization'; + save_to_db := false; + --return comp_cidr_uid; + -- if the cidr already exists and the same org + elseif (arg_org_uid = comp_uid) then + update cidrs set last_seen = arg_last_seen + where organizations_uid = comp_uid and network = arg_net; + new_cidr_uid := comp_cidr_uid; + save_to_db :=false; + --if the orgs are not related + else + insert into cidrs (network, organizations_uid, insert_alert, data_source_uid, first_seen, last_seen) + values (arg_net, arg_org_uid, 'Cidr duplicate between unrelated org. This cidr is also found in the following org. org_cyhy_id:' || comp_cyhy_id || ' org_uid: ' || comp_uid , ds_uid, arg_first_seen, arg_last_seen) + on conflict (organizations_uid, network ) + do update set last_seen = excluded.last_seen + returning cidr_uid into new_cidr_uid; + save_to_db := false; + end if; + end if; + -- Check if the cidr is contained in an existing cidr block + if exists(select ct.network from cidrs ct where arg_net << ct.network) then + for in_cidrs in select o.organizations_uid , tct.network, o.parent_org_uid, tct.cidr_uid from cidrs tct + join organizations o on o.organizations_uid = tct.organizations_uid where arg_net << tct.network loop + -- Our cidr is found in an existing cidr for the same org + --do nothing + if (in_cidrs.organizations_uid = arg_org_uid) then + raise notice 'This cidr is containeed in another cidr for the same organization'; + save_to_db := false; + -- Our cidr is found in an existing cidr related to our parent org + -- add cidr + elseif (in_cidrs.organizations_uid = parent_uid) then + if (new_cidr_uid is null) then + insert into cidrs (network, organizations_uid , data_source_uid, first_seen, last_seen) + values (arg_net, arg_org_uid, ds_uid, arg_first_seen, arg_last_seen) + on conflict (organizations_uid, network ) + do update set last_seen = excluded.last_seen + returning cidr_uid into new_cidr_uid; + save_to_db := false; + end if; + --UPDATE IPS THAT BELONG TO THIS CIDR TO POINT HERE ******************************************* + update ips + set origin_cidr = new_cidr_uid + where ip << arg_net + and origin_cidr = in_cidrs.cidr_uid; + -- Our cidr is found in an existing cidr related to our child org + -- don't add cidr + elseif (arg_org_uid = in_cidrs.parent_org_uid) then + save_to_db := false; + --Our cidr is found in an existing cidr unrelated to our org + -- insert with an insert warning + else + insert into cidrs (network, organizations_uid, insert_alert, data_source_uid, first_seen, last_seen) + values (arg_net, arg_org_uid, 'This cidr range is contained in another cidr owned by the following unrelated org. org_uid:' || in_cidrs.organizations_uid , ds_uid, arg_first_seen, arg_last_seen) + on conflict (organizations_uid, network) + DO UPDATE SET insert_alert = cidrs.insert_alert || ', ' || in_cidrs.organizations_uid, + last_seen = excluded.last_seen + returning cidr_uid into new_cidr_uid; + save_to_db := false; + end if; + end loop; + end if; + -- Check if any cidrs are contained within it + if exists(select ct.network from cidrs ct where ct.network << arg_net ) then + for cidrs_in in select cidr_uid, o.organizations_uid , tct.network, o.parent_org_uid, tct.cidr_uid from cidrs tct + join organizations o on o.organizations_uid = tct.organizations_uid where tct.network << arg_net loop + -- an existing cidr is found in our cidr for the same org + -- update existing cidr to current cidr + if (cidrs_in.organizations_uid = arg_org_uid) then + if (new_cidr_uid is null) then + insert into cidrs (network, organizations_uid , data_source_uid, first_seen, last_seen) + values (arg_net, arg_org_uid, ds_uid, arg_first_seen, arg_last_seen) + on conflict (organizations_uid, network ) + do update set last_seen = excluded.last_seen + returning cidr_uid into new_cidr_uid; + save_to_db := false; + end if; + --update all ips to point to this new cidr block + update ips + set origin_cidr = new_cidr_uid + where ip << arg_net + and origin_cidr = cidrs_in.cidr_uid; + --delete the old cidr + DELETE FROM cidrs + WHERE network = cidrs_in.network + and organizations_uid = arg_org_uid; + -- an existing cidr related to our parent org is found in our cidr + -- update existing cidr to our org and cidr + elseif (cidrs_in.organizations_uid = parent_uid) then + if (new_cidr_uid is null) then + insert into cidrs (network, organizations_uid , data_source_uid, first_seen, last_seen) + values (arg_net, arg_org_uid, ds_uid, arg_first_seen, arg_last_seen) + on conflict (organizations_uid, network ) + do update set last_seen = excluded.last_seen + returning cidr_uid into new_cidr_uid; + save_to_db := false; + end if; + --update all ips to point to this new cidr block + update ips + set origin_cidr = new_cidr_uid + where ip << arg_net + and origin_cidr = cidrs_in.cidr_uid; + --delete the old cidr + DELETE FROM cidrs + WHERE network = cidrs_in.network + and organizations_uid = arg_org_uid; + -- an existing cidr is found in our cidr related to our child org + -- add new cidr to our org + elseif (arg_org_uid = cidrs_in.parent_org_uid) then + if (new_cidr_uid is null) then + insert into cidrs (network, organizations_uid , data_source_uid, first_seen, last_seen) + values (arg_net, arg_org_uid, ds_uid, arg_first_seen, arg_last_seen) + on conflict (organizations_uid, network ) + do update set last_seen = excluded.last_seen + returning cidr_uid into new_cidr_uid; + save_to_db := false; + end if; + update ips + set origin_cidr = cidrs_in.cidr_uid + where ip << cidrs_in.network + and origin_cidr = arg_net; + --an existing cidr unrelated to our org is found in our cidr + -- insert with an insert warning + else + insert into cidrs (network, organizations_uid, insert_alert, data_source_uid, first_seen, last_seen) + values (arg_net, arg_org_uid, 'another cidr owned by the following unrelated org is contained in this cidr range . org_uid:' || cidrs_in.organizations_uid , ds_uid, arg_first_seen, arg_last_seen) + on conflict (organizations_uid, network) + DO UPDATE SET insert_alert = cidrs.insert_alert || ', ' || cidrs_in.organizations_uid, + last_seen = excluded.last_seen + returning cidr_uid into new_cidr_uid; + save_to_db := false; + end if; + end loop; + save_to_db := false; + end if; + if (save_to_db = true) then + insert into cidrs (network, organizations_uid , data_source_uid, first_seen, last_seen) + values (arg_net, arg_org_uid, ds_uid, arg_first_seen, arg_last_seen) + on conflict (organizations_uid, network ) + do update set last_seen = excluded.last_seen + returning cidr_uid into new_cidr_uid; + end if; + return new_cidr_uid; +end; +$$; + + +ALTER FUNCTION public.insert_cidr(arg_net inet, arg_org_uid uuid, arg_data_src text, arg_first_seen date, arg_last_seen date) OWNER TO pe; + +-- +-- Name: insert_sub_domain(boolean, date, text, uuid, text, text, uuid); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.insert_sub_domain(arg_identified boolean, arg_date date, sub_d text, org_uid uuid, data_src text, root_d text DEFAULT NULL::text, root_d_uid uuid DEFAULT NULL::uuid) RETURNS uuid + LANGUAGE plpgsql + AS $$ +declare + sub_id uuid; + ds_uid uuid := null; +begin + -- Try to fetch the domain + select sub_domain_uid into sub_id from sub_domains sd + join root_domains rd on rd.root_domain_uid = sd.root_domain_uid + where sd.sub_domain = sub_d + and rd.organizations_uid = org_uid; + + -- If the domain does not exist in the databse + if (sub_id is null) then + -- If the root_domain_uid is not provided, look it up + if (root_d_uid is null and root_d is not null) then + begin + select rd.root_domain_uid into root_d_uid + from root_domains rd + where rd.root_domain = root_d and rd.organizations_uid = org_uid; + raise notice 'uid found: %', root_d_uid; + end; + else + raise notice 'uid provided: %', root_d_uid; + end if; + + -- Query the data_source_uid based on the provided data source name + select ds.data_source_uid into ds_uid from data_source ds where ds.name = data_src; + + -- If the root_domain_uid is still null create a new root domain and return the root_domain_uid + if (root_d_uid is null) then + begin + insert into root_domains (organizations_uid, root_domain, data_source_uid, enumerate_subs) + values (org_uid, root_d, ds_uid, false) + on conflict (organizations_uid, root_domain) do nothing; + -- Get newly created root domain's uid + select rd.root_domain_uid into root_d_uid from root_domains rd where rd.root_domain = root_d; + end; + end if; + + -- Create sub_domain and return uid + insert into sub_domains (sub_domain, root_domain_uid, data_source_uid, first_seen, last_seen, identified) + values (sub_d, root_d_uid, ds_uid, arg_date, arg_date, arg_identified) + on conflict (sub_domain, root_domain_uid) + do update set last_seen = excluded.last_seen, identified = EXCLUDED.identified + returning sub_domain_uid into sub_id; + raise notice 'uid out of if: %', root_d_uid; + end if; + return sub_id; +end; +$$; + + +ALTER FUNCTION public.insert_sub_domain(arg_identified boolean, arg_date date, sub_d text, org_uid uuid, data_src text, root_d text, root_d_uid uuid) OWNER TO pe; + +-- +-- Name: link_ips_and_subs(date, text, inet, uuid, text, text, uuid, text); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.link_ips_and_subs(arg_date date, arg_ip_hash text, arg_ip inet, arg_org_uid uuid, arg_sub_domain text, arg_data_src text, arg_root_uid uuid DEFAULT NULL::uuid, arg_root text DEFAULT NULL::text) RETURNS uuid + LANGUAGE plpgsql + AS $$ +declare + sub_id uuid; + ip_hash_return text; + ds_uid uuid := null; + i_s_uid uuid := null; +begin + + -- Insert ip, if exists then update last_seen + insert into ips (ip_hash, ip, first_seen, last_seen) + values (arg_ip_hash, arg_ip, arg_date, arg_date) + on conflict (ip) + do update set + last_seen = EXCLUDED.last_seen; + + + + -- Get sub domain uid (add it if it doesn't exist) + -- If root is null, don't pass root domain to insert subs + if (arg_root is null) then + select insert_sub_domain(arg_identified => true, arg_date=> arg_date, sub_d=> arg_sub_domain, org_uid => arg_org_uid, data_src => arg_data_src,root_d_uid => arg_root_uid) + into sub_id; + -- Else, pass root domain to insert subs + else + select insert_sub_domain(arg_identified => true, arg_date=> arg_date, sub_d=> arg_sub_domain, org_uid => arg_org_uid, data_src => arg_data_src, root_d => arg_root) + into sub_id; + end if; + + + -- Insert into ip_subs table + insert into ips_subs (ip_hash, sub_domain_uid, first_seen, last_seen) + values (arg_ip_hash, sub_id, arg_date, arg_date) + on conflict(ip_hash, sub_domain_uid) + do update set + last_seen = EXCLUDED.last_seen + returning ips_subs_uid into i_s_uid; -- insert both fk ids into the product_order table + + return i_s_uid; +end; +$$; + + +ALTER FUNCTION public.link_ips_and_subs(arg_date date, arg_ip_hash text, arg_ip inet, arg_org_uid uuid, arg_sub_domain text, arg_data_src text, arg_root_uid uuid, arg_root text) OWNER TO pe; + +-- +-- Name: pes_base_metrics(date, date); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.pes_base_metrics(start_date date, end_date date) RETURNS TABLE(organizations_uid uuid, cyhy_db_name text, num_breaches bigint, num_total_creds bigint, num_pass_creds bigint, num_alert_domain bigint, num_sus_domain bigint, num_insecure_ports bigint, num_verif_vulns bigint, num_assets_unverif_vulns bigint, num_dw_alerts bigint, num_dw_mentions bigint, num_dw_threats bigint, num_dw_invites bigint, num_ports bigint, num_root_domain bigint, num_sub_domain bigint, num_ips bigint) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + SELECT + cred_metrics.organizations_uid, + attacksurface_metrics.cyhy_db_name, + cred_metrics.num_breaches, + cred_metrics.total_creds AS num_total_creds, + cred_metrics.password_creds AS num_pass_creds, + domain_metrics.num_alert_domain, + domain_metrics.num_sus_domain, + vuln_metrics.num_insecure_ports, + vuln_metrics.num_verif_vulns, + vuln_metrics.num_assets_unverif_vulns, + darkweb_metrics.num_dw_alerts, + darkweb_metrics.num_dw_mentions, + darkweb_metrics.num_dw_threats, + darkweb_metrics.num_dw_invites, + attacksurface_metrics.num_ports, + attacksurface_metrics.num_root_domain, + attacksurface_metrics.num_sub_domain, + attacksurface_metrics.num_ips + FROM + ( + SELECT + * + FROM + get_cred_metrics(start_date, end_date) + ) cred_metrics + INNER JOIN + ( + SELECT + * + FROM + get_domain_metrics(start_date, end_date) + ) domain_metrics + ON + cred_metrics.organizations_uid = domain_metrics.organizations_uid + INNER JOIN + ( + SELECT + * + FROM + get_vuln_metrics(start_date, end_date) + ) vuln_metrics + ON + cred_metrics.organizations_uid = vuln_metrics.organizations_uid + INNER JOIN + ( + SELECT + * + FROM + get_darkweb_metrics(start_date, end_date) + ) darkweb_metrics + ON + cred_metrics.organizations_uid = darkweb_metrics.organizations_uid + INNER JOIN + ( + SELECT + * + FROM + public.vw_orgs_attacksurface + ) attacksurface_metrics + ON + cred_metrics.organizations_uid = attacksurface_metrics.organizations_uid + ORDER BY + attacksurface_metrics.cyhy_db_name ASC; +END; $$; + + +ALTER FUNCTION public.pes_base_metrics(start_date date, end_date date) OWNER TO pe; + +-- +-- Name: pes_check_new_cve(date, date); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.pes_check_new_cve(start_date date, end_date date) RETURNS TABLE(cve_name text) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + SELECT + current_cves.cve_name + FROM + ( + /* Select unverified CVEs */ + SELECT + reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + unverif_cve_list.unverif_cve as cve_name + FROM + ( + SELECT + organizations.organizations_uid, + organizations.cyhy_db_name + FROM + public.organizations + WHERE + organizations.report_on = True + ) reported_orgs + INNER JOIN + ( + SELECT DISTINCT + vss.organizations_uid, + UNNEST(vss.potential_vulns) as unverif_cve + FROM + public.vw_shodanvulns_suspected vss + WHERE + vss."type" != 'Insecure Protocol' + AND + vss.timestamp BETWEEN start_date AND end_date + ) unverif_cve_list + ON + reported_orgs.organizations_uid = unverif_cve_list.organizations_uid + UNION + /* Select verified CVEs */ + SELECT + reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + verif_cve_list.cve as cve_name + FROM + ( + SELECT + organizations.organizations_uid, + organizations.cyhy_db_name + FROM + public.organizations + WHERE + organizations.report_on = True + ) reported_orgs + INNER JOIN + ( + SELECT DISTINCT + shodan_vulns.organizations_uid, + shodan_vulns.cve + FROM + public.shodan_vulns + WHERE + shodan_vulns.timestamp BETWEEN start_date AND end_date + AND + shodan_vulns.is_verified = true + ) verif_cve_list + ON + reported_orgs.organizations_uid = verif_cve_list.organizations_uid + ) current_cves + LEFT JOIN + public.cve_info + ON + current_cves.cve_name = cve_info.cve_name + WHERE + cve_info.cve_name IS NULL; +END; $$; + + +ALTER FUNCTION public.pes_check_new_cve(start_date date, end_date date) OWNER TO pe; + +-- +-- Name: pes_cve_metrics(date, date); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.pes_cve_metrics(start_date date, end_date date) RETURNS TABLE(organizations_uid uuid, cyhy_db_name text, num_verif_cve bigint, num_verif_low bigint, num_verif_med bigint, num_verif_high bigint, num_verif_crit bigint, max_verif_cvss numeric, num_unverif_cve bigint, num_unverif_low bigint, num_unverif_med bigint, num_unverif_high bigint, num_unverif_crit bigint, max_unverif_cvss numeric) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + SELECT + reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + COALESCE(verif.num_verif_cves, 0) as num_verif_cve, + COALESCE(verif.num_verif_low, 0) as num_verif_low, + COALESCE(verif.num_verif_med, 0) as num_verif_med, + COALESCE(verif.num_verif_high, 0) as num_verif_high, + COALESCE(verif.num_verif_crit, 0) as num_verif_crit, + COALESCE(verif.max_verif_cvss, 0) as max_verif_cvss, + COALESCE(unverif.num_unverif_cves, 0) as num_unverif_cve, + COALESCE(unverif.num_unverif_low, 0) as num_unverif_low, + COALESCE(unverif.num_unverif_med, 0) as num_unverif_med, + COALESCE(unverif.num_unverif_high, 0) as num_unverif_high, + COALESCE(unverif.num_unverif_crit, 0) as num_unverif_crit, + COALESCE(unverif.max_unverif_cvss, 0) as max_unverif_cvss + FROM + ( + SELECT + organizations.organizations_uid, + organizations.cyhy_db_name + FROM + public.organizations + WHERE + organizations.report_on = True + ) reported_orgs + LEFT JOIN + ( + /* Aggregated counts for verified CVEs */ + SELECT + verif_cves.organizations_uid, + verif_cves.cyhy_db_name, + COUNT(*) as num_verif_cves, + COUNT(*) FILTER (WHERE verif_cves.cvss_score < 4) as num_verif_low, + COUNT(*) FILTER (WHERE verif_cves.cvss_score >= 4 AND verif_cves.cvss_score < 7) as num_verif_med, + COUNT(*) FILTER (WHERE verif_cves.cvss_score >= 7 AND verif_cves.cvss_score < 9) as num_verif_high, + COUNT(*) FILTER (WHERE verif_cves.cvss_score >= 9) as num_verif_crit, + MAX(verif_cves.cvss_score) as max_verif_cvss + FROM + ( + SELECT + reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + verif_cve_list.cve as cve_name, + COALESCE(cve_info.cvss_3_0, cve_info.cvss_2_0) as cvss_score, + cve_info.dve_score + FROM + ( + /* Orgs that PE reports on */ + SELECT + organizations.organizations_uid, + organizations.cyhy_db_name + FROM + public.organizations + WHERE + organizations.report_on = True + ) reported_orgs + INNER JOIN + ( + /* List of verified CVEs for this report period */ + SELECT DISTINCT + shodan_vulns.organizations_uid, + shodan_vulns.cve, + shodan_vulns.cvss, + shodan_vulns.severity + FROM + public.shodan_vulns + WHERE + shodan_vulns.timestamp BETWEEN start_date AND end_date + AND + shodan_vulns.is_verified = true + ) verif_cve_list + ON + reported_orgs.organizations_uid = verif_cve_list.organizations_uid + INNER JOIN + /* CVE information */ + public.cve_info + ON + verif_cve_list.cve = cve_info.cve_name + WHERE + /* Filter out CVEs that don't have CVSS 2.0 nor 3.0 scores */ + NOT (cve_info.cvss_2_0 IS NULL AND cve_info.cvss_3_0 IS NULL) + ORDER BY + reported_orgs.cyhy_db_name + ) verif_cves + GROUP BY + verif_cves.organizations_uid, + verif_cves.cyhy_db_name + ) verif + ON + reported_orgs.organizations_uid = verif.organizations_uid + LEFT JOIN + ( + /* Aggregated counts for unverified CVEs */ + SELECT + unverif_cves.organizations_uid, + unverif_cves.cyhy_db_name, + COUNT(*) as num_unverif_cves, + COUNT(*) FILTER (WHERE unverif_cves.cvss_score < 4) as num_unverif_low, + COUNT(*) FILTER (WHERE unverif_cves.cvss_score >= 4 AND unverif_cves.cvss_score < 7) as num_unverif_med, + COUNT(*) FILTER (WHERE unverif_cves.cvss_score >= 7 AND unverif_cves.cvss_score < 9) as num_unverif_high, + COUNT(*) FILTER (WHERE unverif_cves.cvss_score >= 9) as num_unverif_crit, + MAX(unverif_cves.cvss_score) as max_unverif_cvss + FROM + ( + SELECT + reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + unverif_cve_list.unverif_cve as cve_name, + COALESCE(cve_info.cvss_3_0, cve_info.cvss_2_0) as cvss_score, + cve_info.dve_score + FROM + ( + /* Orgs that PE reports on */ + SELECT + organizations.organizations_uid, + organizations.cyhy_db_name + FROM + public.organizations + WHERE + organizations.report_on = True + ) reported_orgs + INNER JOIN + ( + /* List of unverified CVEs for this report period */ + SELECT DISTINCT + vss.organizations_uid, + UNNEST(vss.potential_vulns) as unverif_cve + FROM + public.vw_shodanvulns_suspected vss + WHERE + vss."type" != 'Insecure Protocol' + AND + vss.timestamp BETWEEN start_date AND end_date + ) unverif_cve_list + ON + reported_orgs.organizations_uid = unverif_cve_list.organizations_uid + INNER JOIN + /* CVE information */ + public.cve_info + ON + unverif_cve_list.unverif_cve = cve_info.cve_name + WHERE + /* Filter out CVEs that don't have CVSS 2.0 nor 3.0 scores */ + NOT (cve_info.cvss_2_0 IS NULL AND cve_info.cvss_3_0 IS NULL) + ORDER BY + reported_orgs.cyhy_db_name + ) unverif_cves + GROUP BY + unverif_cves.organizations_uid, + unverif_cves.cyhy_db_name + ) unverif + ON + reported_orgs.organizations_uid = unverif.organizations_uid + ORDER BY + reported_orgs.cyhy_db_name; +END; $$; + + +ALTER FUNCTION public.pes_cve_metrics(start_date date, end_date date) OWNER TO pe; + +-- +-- Name: pes_hist_data_domalert(date, date); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.pes_hist_data_domalert(start_date date, end_date date) RETURNS TABLE(organizations_uid uuid, cyhy_db_name text, mod_date date) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + SELECT + reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + domain_alerts.date as mod_date + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid, + organizations.cyhy_db_name + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + domain_alerts.organizations_uid, + domain_alerts.date + FROM + public.domain_alerts + WHERE + domain_alerts.date BETWEEN start_date AND end_date + ) domain_alerts + ON reported_orgs.organizations_uid = domain_alerts.organizations_uid + ORDER BY + reported_orgs.cyhy_db_name, + domain_alerts.date; +END; $$; + + +ALTER FUNCTION public.pes_hist_data_domalert(start_date date, end_date date) OWNER TO pe; + +-- +-- Name: pes_hist_data_dwalert(date, date); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.pes_hist_data_dwalert(start_date date, end_date date) RETURNS TABLE(organizations_uid uuid, cyhy_db_name text, mod_date date) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + SELECT + reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + alerts.date AS mod_date + FROM + ( + /* Orgs we're reporting on */ + SELECT + organizations.organizations_uid, + organizations.cyhy_db_name + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + /* Get count of dark web alerts for the report period*/ + SELECT + alerts.organizations_uid, + alerts.date + FROM + public.alerts + WHERE + alerts.date BETWEEN start_date AND end_date + ) alerts + ON reported_orgs.organizations_uid = alerts.organizations_uid + ORDER BY + reported_orgs.cyhy_db_name, + alerts.date; +END; $$; + + +ALTER FUNCTION public.pes_hist_data_dwalert(start_date date, end_date date) OWNER TO pe; + +-- +-- Name: pes_hist_data_dwment(date, date); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.pes_hist_data_dwment(start_date date, end_date date) RETURNS TABLE(organizations_uid uuid, cyhy_db_name text, date date, num_mentions bigint) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + SELECT + reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + dw_mentions.date, + COALESCE(dw_mentions."Count", 0) as num_mentions + FROM + ( + SELECT + organizations.organizations_uid, + organizations.cyhy_db_name + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + * + FROM + public.vw_darkweb_mentionsbydate dwm + WHERE + dwm.date BETWEEN start_date AND end_date + ) dw_mentions + ON + reported_orgs.organizations_uid = dw_mentions.organizations_uid; +END; $$; + + +ALTER FUNCTION public.pes_hist_data_dwment(start_date date, end_date date) OWNER TO pe; + +-- +-- Name: pes_hist_data_totcred(date, date); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.pes_hist_data_totcred(start_date date, end_date date) RETURNS TABLE(organizations_uid uuid, cyhy_db_name text, mod_date date, no_password bigint, password_included bigint, total_creds bigint) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + SELECT + reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + cred_dat.mod_date, + COALESCE(cred_dat.no_password, 0) as no_password, + COALESCE(cred_dat.password_included, 0) as password_included, + COALESCE(cred_dat.total_creds, 0) as total_creds + FROM + ( + SELECT + organizations.organizations_uid, + organizations.cyhy_db_name + FROM + public.organizations + WHERE + report_on = True + ) reported_orgs + LEFT JOIN + ( + SELECT + *, + vw_breachcomp_credsbydate.no_password + vw_breachcomp_credsbydate.password_included as total_creds + FROM + public.vw_breachcomp_credsbydate + WHERE + vw_breachcomp_credsbydate.mod_date BETWEEN start_date AND end_date + ) cred_dat + ON + reported_orgs.organizations_uid = cred_dat.organizations_uid + ORDER BY + reported_orgs.cyhy_db_name, + cred_dat.mod_date; +END; $$; + + +ALTER FUNCTION public.pes_hist_data_totcred(start_date date, end_date date) OWNER TO pe; + +-- +-- Name: query_breach(text); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.query_breach(b_name text) RETURNS TABLE(breach_name text, description text, exposed_cred_count bigint, breach_date date, added_date timestamp without time zone, modified_date timestamp without time zone, data_classes text[], password_included boolean, is_verified boolean, data_source text) + LANGUAGE plpgsql + AS $$ +BEGIN + RETURN QUERY + SELECT cb.breach_name, cb.description, cb.exposed_cred_count, cb.breach_date, + cb.added_date , cb.modified_date, cb.data_classes, cb.password_included , + cb.is_verified , ds.name-- I added parentheses + FROM credential_breaches cb + join data_source ds on ds.data_source_uid = cb.data_source_uid + where lower(cb.breach_name) = lower(b_name); -- potential ambiguity +END +$$; + + +ALTER FUNCTION public.query_breach(b_name text) OWNER TO pe; + +-- +-- Name: query_emails(text, text); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.query_emails(b_name text, org_id text) RETURNS TABLE(email text, org_name text, org_cyhy_id text, data_source text, name text, login_id text, phone text, password text, hash_type text) + LANGUAGE plpgsql + AS $$ +BEGIN + RETURN QUERY + SELECT c.email, o.name, o.cyhy_db_name, d.name, c.name, c.login_id, c.phone, c.password, c.hash_type -- I added parentheses + FROM credential_exposures c + join organizations o on o.organizations_uid = c.organizations_uid + join data_source d on d.data_source_uid = c.data_source_uid + where lower(c.breach_name) = lower(b_name) + and o.cyhy_db_name = org_id; -- potential ambiguity +END +$$; + + +ALTER FUNCTION public.query_emails(b_name text, org_id text) OWNER TO pe; + +-- +-- Name: set_status_completed_and_week_ending(); Type: FUNCTION; Schema: public; Owner: pe +-- + +CREATE FUNCTION public.set_status_completed_and_week_ending() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN + NEW."statusComplete" := 1; + NEW.week_ending := date_trunc('week', CURRENT_DATE) + interval '4 days'; + RETURN NEW; +END; +$$; + + +ALTER FUNCTION public.set_status_completed_and_week_ending() OWNER TO pe; + +SET default_tablespace = ''; + +-- +-- Name: Users; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public."Users" ( + id uuid NOT NULL, + email character varying(64), + username character varying(64), + admin integer, + role integer, + password_hash character varying(128), + api_key character varying(128) +); + + +ALTER TABLE public."Users" OWNER TO pe; + +-- +-- Name: alembic_version; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.alembic_version ( + version_num character varying(32) NOT NULL +); + + +ALTER TABLE public.alembic_version OWNER TO pe; + +-- +-- Name: alerts; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.alerts ( + alerts_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + alert_name text, + content text, + date date, + sixgill_id text, + read text, + severity text, + site text, + threat_level text, + threats text, + title text, + user_id text, + category text, + lang text, + organizations_uid uuid NOT NULL, + data_source_uid uuid NOT NULL, + content_snip text, + asset_mentioned text, + asset_type text +); + + +ALTER TABLE public.alerts OWNER TO pe; + +-- +-- Name: alias; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.alias ( + alias_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + alias text NOT NULL +); + + +ALTER TABLE public.alias OWNER TO pe; + +-- +-- Name: asset_headers; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.asset_headers ( + _id uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + sub_url text NOT NULL, + tech_detected text[] NOT NULL, + interesting_header text[] NOT NULL, + ssl2 text[], + tls1 text[], + certificate json, + scanned boolean, + ssl_scanned boolean +); + + +ALTER TABLE public.asset_headers OWNER TO pe; + +-- +-- Name: auth_group; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.auth_group ( + id integer NOT NULL, + name character varying(150) NOT NULL +); + + +ALTER TABLE public.auth_group OWNER TO pe; + +-- +-- Name: auth_group_id_seq; Type: SEQUENCE; Schema: public; Owner: pe +-- + +ALTER TABLE public.auth_group ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.auth_group_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: auth_group_permissions; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.auth_group_permissions ( + id bigint NOT NULL, + group_id integer NOT NULL, + permission_id integer NOT NULL +); + + +ALTER TABLE public.auth_group_permissions OWNER TO pe; + +-- +-- Name: auth_group_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: pe +-- + +ALTER TABLE public.auth_group_permissions ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.auth_group_permissions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: auth_permission; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.auth_permission ( + id integer NOT NULL, + name character varying(255) NOT NULL, + content_type_id integer NOT NULL, + codename character varying(100) NOT NULL +); + + +ALTER TABLE public.auth_permission OWNER TO pe; + +-- +-- Name: auth_permission_id_seq; Type: SEQUENCE; Schema: public; Owner: pe +-- + +ALTER TABLE public.auth_permission ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.auth_permission_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: auth_user; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.auth_user ( + id integer NOT NULL, + password character varying(128) NOT NULL, + last_login timestamp with time zone, + is_superuser boolean NOT NULL, + username character varying(150) NOT NULL, + first_name character varying(150) NOT NULL, + last_name character varying(150) NOT NULL, + email character varying(254) NOT NULL, + is_staff boolean NOT NULL, + is_active boolean NOT NULL, + date_joined timestamp with time zone NOT NULL +); + + +ALTER TABLE public.auth_user OWNER TO pe; + +-- +-- Name: auth_user_groups; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.auth_user_groups ( + id bigint NOT NULL, + user_id integer NOT NULL, + group_id integer NOT NULL +); + + +ALTER TABLE public.auth_user_groups OWNER TO pe; + +-- +-- Name: auth_user_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: pe +-- + +ALTER TABLE public.auth_user_groups ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.auth_user_groups_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: auth_user_id_seq; Type: SEQUENCE; Schema: public; Owner: pe +-- + +ALTER TABLE public.auth_user ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.auth_user_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: auth_user_user_permissions; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.auth_user_user_permissions ( + id bigint NOT NULL, + user_id integer NOT NULL, + permission_id integer NOT NULL +); + + +ALTER TABLE public.auth_user_user_permissions OWNER TO pe; + +-- +-- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: pe +-- + +ALTER TABLE public.auth_user_user_permissions ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.auth_user_user_permissions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: cidrs; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cidrs ( + cidr_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + network cidr NOT NULL, + organizations_uid uuid, + data_source_uid uuid, + insert_alert text, + first_seen date, + last_seen date, + current boolean +); + + +ALTER TABLE public.cidrs OWNER TO pe; + +-- +-- Name: credential_breaches; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.credential_breaches ( + credential_breaches_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + breach_name text NOT NULL, + description text, + exposed_cred_count bigint, + breach_date date, + added_date timestamp without time zone, + modified_date timestamp without time zone, + data_classes text[], + password_included boolean, + is_verified boolean, + is_fabricated boolean, + is_sensitive boolean, + is_retired boolean, + is_spam_list boolean, + data_source_uid uuid NOT NULL +); + + +ALTER TABLE public.credential_breaches OWNER TO pe; + +-- +-- Name: credential_exposures; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.credential_exposures ( + credential_exposures_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + email text NOT NULL, + organizations_uid uuid NOT NULL, + root_domain text, + sub_domain text, + breach_name text, + modified_date timestamp without time zone, + credential_breaches_uid uuid NOT NULL, + data_source_uid uuid NOT NULL, + name text, + login_id text, + phone text, + password text, + hash_type text, + intelx_system_id text +); + + +ALTER TABLE public.credential_exposures OWNER TO pe; + +-- +-- Name: cve_info; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cve_info ( + cve_uuid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + cve_name text, + cvss_2_0 numeric, + cvss_2_0_severity text, + cvss_2_0_vector text, + cvss_3_0 numeric, + cvss_3_0_severity text, + cvss_3_0_vector text, + dve_score numeric +); + + +ALTER TABLE public.cve_info OWNER TO pe; + +-- +-- Name: TABLE cve_info; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON TABLE public.cve_info IS 'Table that holds all known CVEs and their associated CVSS 2.0/3.0/DVE info'; + + +-- +-- Name: cyhy_certs; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_certs ( + cyhy_certs_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + cyhy_id text, + serial text, + issuer text, + not_before timestamp without time zone, + not_after timestamp without time zone, + sct_or_not_before timestamp without time zone, + sct_exists boolean, + pem text, + subjects text, + trimmed_subjects text, + sub_domain_uid uuid, + organizations_uid uuid NOT NULL, + first_seen date, + last_seen date +); + + +ALTER TABLE public.cyhy_certs OWNER TO pe; + +-- +-- Name: cyhy_contacts; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_contacts ( + _id uuid DEFAULT public.uuid_generate_v1() NOT NULL, + org_id text NOT NULL, + org_name text NOT NULL, + phone text, + contact_type text NOT NULL, + email text, + name text, + date_pulled date +); + + +ALTER TABLE public.cyhy_contacts OWNER TO pe; + +-- +-- Name: cyhy_db_assets; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_db_assets ( + _id uuid DEFAULT public.uuid_generate_v1() NOT NULL, + org_id text, + org_name text, + contact text, + network inet, + type text, + first_seen date, + last_seen date, + currently_in_cyhy boolean +); + + +ALTER TABLE public.cyhy_db_assets OWNER TO pe; + +-- +-- Name: cyhy_domains; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_domains ( + cyhy_domains_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + domain text, + agency_id text, + agency_name text, + cyhy_stakeholder boolean, + scan_date timestamp without time zone, + first_seen date, + last_seen date +); + + +ALTER TABLE public.cyhy_domains OWNER TO pe; + +-- +-- Name: cyhy_https_scan; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_https_scan ( + cyhy_https_scan_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + cyhy_id text, + cyhy_latest boolean, + domain_supports_https boolean, + domain_enforces_https boolean, + domain_uses_strong_hsts boolean, + live boolean, + scan_date timestamp without time zone, + hsts_base_domain_preloaded boolean, + domain text, + base_domain text, + is_base_domain boolean, + first_seen date, + last_seen date, + https_full_connection boolean, + https_client_auth_required boolean +); + + +ALTER TABLE public.cyhy_https_scan OWNER TO pe; + +-- +-- Name: cyhy_kevs; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_kevs ( + cyhy_kevs_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + kev text, + first_seen date, + last_seen date +); + + +ALTER TABLE public.cyhy_kevs OWNER TO pe; + +-- +-- Name: cyhy_port_scans; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_port_scans ( + cyhy_port_scans_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + cyhy_id text, + cyhy_time timestamp without time zone, + service_name text, + port text, + product text, + cpe text, + first_seen date, + last_seen date, + ip text, + state text, + agency_type text +); + + +ALTER TABLE public.cyhy_port_scans OWNER TO pe; + +-- +-- Name: cyhy_port_scans_new; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_port_scans_new ( + cyhy_port_scans_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + cyhy_id text, + cyhy_time timestamp without time zone, + service_name text, + port text, + product text, + cpe text, + first_seen date, + last_seen date, + ip text, + state text, + agency_type text, + report_period timestamp without time zone +); + + +ALTER TABLE public.cyhy_port_scans_new OWNER TO pe; + +-- +-- Name: cyhy_snapshots; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_snapshots ( + cyhy_snapshots_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + cyhy_id text, + cyhy_last_change timestamp without time zone, + host_count integer, + vulnerable_host_count integer, + first_seen date, + last_seen date +); + + +ALTER TABLE public.cyhy_snapshots OWNER TO pe; + +-- +-- Name: cyhy_sslyze; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_sslyze ( + cyhy_sslyze_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + cyhy_id text, + cyhy_latest boolean, + scanned_port text, + domain text, + base_domain text, + is_base_domain boolean, + scanned_hostname text, + sslv2 boolean, + scan_date timestamp without time zone, + sslv3 boolean, + any_3des boolean, + any_rc4 boolean, + first_seen date, + last_seen date, + is_symantec_cert boolean +); + + +ALTER TABLE public.cyhy_sslyze OWNER TO pe; + +-- +-- Name: cyhy_tickets; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_tickets ( + cyhy_tickets_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + cyhy_id text, + false_positive boolean, + time_opened timestamp without time zone, + time_closed timestamp without time zone, + cvss_base_score double precision, + cve text, + first_seen date, + last_seen date, + source text +); + + +ALTER TABLE public.cyhy_tickets OWNER TO pe; + +-- +-- Name: cyhy_trustymail; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_trustymail ( + cyhy_trustymail_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + cyhy_id text, + cyhy_latest boolean, + base_domain text, + is_base_domain boolean, + domain text, + dmarc_record boolean, + valid_spf boolean, + scan_date timestamp without time zone, + live boolean, + spf_record boolean, + valid_dmarc boolean, + valid_dmarc_base_domain boolean, + dmarc_policy text, + dmarc_policy_percentage text, + aggregate_report_uris text, + domain_supports_smtp boolean, + first_seen date, + last_seen date, + dmarc_subdomain_policy text, + domain_supports_starttls boolean +); + + +ALTER TABLE public.cyhy_trustymail OWNER TO pe; + +-- +-- Name: cyhy_vuln_scans; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.cyhy_vuln_scans ( + cyhy_vuln_scans_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + cyhy_id text, + cyhy_time timestamp without time zone, + plugin_name text, + cvss_base_score double precision, + cve text, + first_seen date, + last_seen date, + ip text +); + + +ALTER TABLE public.cyhy_vuln_scans OWNER TO pe; + +-- +-- Name: dataAPI_apiuser; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public."dataAPI_apiuser" ( + id bigint NOT NULL, + "apiKey" character varying(200), + user_id integer NOT NULL, + refresh_token character varying(200) +); + + +ALTER TABLE public."dataAPI_apiuser" OWNER TO pe; + +-- +-- Name: dataAPI_apiuser_id_seq; Type: SEQUENCE; Schema: public; Owner: pe +-- + +ALTER TABLE public."dataAPI_apiuser" ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public."dataAPI_apiuser_id_seq" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: data_source; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.data_source ( + data_source_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + name text NOT NULL, + description text NOT NULL, + last_run date NOT NULL +); + + +ALTER TABLE public.data_source OWNER TO pe; + +-- +-- Name: django_admin_log; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.django_admin_log ( + id integer NOT NULL, + action_time timestamp with time zone NOT NULL, + object_id text, + object_repr character varying(200) NOT NULL, + action_flag smallint NOT NULL, + change_message text NOT NULL, + content_type_id integer, + user_id integer NOT NULL, + CONSTRAINT django_admin_log_action_flag_check CHECK ((action_flag >= 0)) +); + + +ALTER TABLE public.django_admin_log OWNER TO pe; + +-- +-- Name: django_admin_log_id_seq; Type: SEQUENCE; Schema: public; Owner: pe +-- + +ALTER TABLE public.django_admin_log ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.django_admin_log_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: django_content_type; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.django_content_type ( + id integer NOT NULL, + app_label character varying(100) NOT NULL, + model character varying(100) NOT NULL +); + + +ALTER TABLE public.django_content_type OWNER TO pe; + +-- +-- Name: django_content_type_id_seq; Type: SEQUENCE; Schema: public; Owner: pe +-- + +ALTER TABLE public.django_content_type ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.django_content_type_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: django_migrations; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.django_migrations ( + id bigint NOT NULL, + app character varying(255) NOT NULL, + name character varying(255) NOT NULL, + applied timestamp with time zone NOT NULL +); + + +ALTER TABLE public.django_migrations OWNER TO pe; + +-- +-- Name: django_migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: pe +-- + +ALTER TABLE public.django_migrations ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.django_migrations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: django_session; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.django_session ( + session_key character varying(40) NOT NULL, + session_data text NOT NULL, + expire_date timestamp with time zone NOT NULL +); + + +ALTER TABLE public.django_session OWNER TO pe; + +-- +-- Name: dns_records; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.dns_records ( + dns_record_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + domain_name text, + domain_type text, + created_date timestamp without time zone, + updated_date timestamp without time zone, + expiration_date timestamp without time zone, + name_servers text[], + whois_server text, + registrar_name text, + status text, + clean_text text, + raw_text text, + registrant_name text, + registrant_organization text, + registrant_street text, + registrant_city text, + registrant_state text, + registrant_post_code text, + registrant_country text, + registrant_email text, + registrant_phone text, + registrant_phone_ext text, + registrant_fax text, + registrant_fax_ext text, + registrant_raw_text text, + administrative_name text, + administrative_organization text, + administrative_street text, + administrative_city text, + administrative_state text, + administrative_post_code text, + administrative_country text, + administrative_email text, + administrative_phone text, + administrative_phone_ext text, + administrative_fax text, + administrative_fax_ext text, + administrative_raw_text text, + technical_name text, + technical_organization text, + technical_street text, + technical_city text, + technical_state text, + technical_post_code text, + technical_country text, + technical_email text, + technical_phone text, + technical_phone_ext text, + technical_fax text, + technical_fax_ext text, + technical_raw_text text, + billing_name text, + billing_organization text, + billing_street text, + billing_city text, + billing_state text, + billing_post_code text, + billing_country text, + billing_email text, + billing_phone text, + billing_phone_ext text, + billing_fax text, + billing_fax_ext text, + billing_raw_text text, + zone_name text, + zone_organization text, + zone_street text, + zone_city text, + zone_state text, + zone_post_code text, + zone_country text, + zone_email text, + zone_phone text, + zone_phone_ext text, + zone_fax text, + zone_fax_ext text, + zone_raw_text text +); + + +ALTER TABLE public.dns_records OWNER TO pe; + +-- +-- Name: domain_alerts; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.domain_alerts ( + domain_alert_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + sub_domain_uid uuid NOT NULL, + data_source_uid uuid NOT NULL, + organizations_uid uuid NOT NULL, + alert_type text, + message text, + previous_value text, + new_value text, + date date +); + + +ALTER TABLE public.domain_alerts OWNER TO pe; + +-- +-- Name: domain_permutations; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.domain_permutations ( + suspected_domain_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + domain_permutation text, + ipv4 text, + ipv6 text, + mail_server text, + name_server text, + fuzzer text, + date_observed date, + ssdeep_score text, + malicious boolean, + blocklist_attack_count integer, + blocklist_report_count integer, + data_source_uid uuid NOT NULL, + sub_domain_uid uuid, + dshield_record_count integer, + dshield_attack_count integer, + date_active date +); + + +ALTER TABLE public.domain_permutations OWNER TO pe; + +-- +-- Name: dotgov_domains; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.dotgov_domains ( + dotgov_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + domain_name text NOT NULL, + domain_type text, + agency text, + organization text, + city text, + state text, + security_contact_email text +); + + +ALTER TABLE public.dotgov_domains OWNER TO pe; + +-- +-- Name: executives; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.executives ( + executives_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + executives text NOT NULL +); + + +ALTER TABLE public.executives OWNER TO pe; + +-- +-- Name: ips; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.ips ( + ip_hash text NOT NULL, + ip inet NOT NULL, + origin_cidr uuid, + shodan_results boolean, + live boolean, + date_last_live timestamp without time zone, + last_reverse_lookup timestamp without time zone, + first_seen date, + last_seen date, + current boolean, + from_cidr character varying DEFAULT false NOT NULL +); + + +ALTER TABLE public.ips OWNER TO pe; + +-- +-- Name: ips_subs; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.ips_subs ( + ips_subs_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + ip_hash text NOT NULL, + sub_domain_uid uuid NOT NULL, + first_seen date, + last_seen date, + current boolean +); + + +ALTER TABLE public.ips_subs OWNER TO pe; + +-- +-- Name: mat_vw_breachcomp; Type: MATERIALIZED VIEW; Schema: public; Owner: pe +-- + +CREATE MATERIALIZED VIEW public.mat_vw_breachcomp AS + SELECT creds.credential_exposures_uid, + creds.email, + creds.breach_name, + creds.organizations_uid, + creds.root_domain, + creds.sub_domain, + creds.hash_type, + creds.name, + creds.login_id, + creds.password, + creds.phone, + creds.data_source_uid, + b.description, + b.breach_date, + b.added_date, + timezone('UTC'::text, ((b.modified_date)::date)::timestamp with time zone) AS modified_date, + b.data_classes, + b.password_included, + b.is_verified, + b.is_fabricated, + b.is_sensitive, + b.is_retired, + b.is_spam_list + FROM (public.credential_exposures creds + JOIN public.credential_breaches b ON ((creds.credential_breaches_uid = b.credential_breaches_uid))) + WHERE ((timezone('UTC'::text, ((b.modified_date)::date)::timestamp with time zone) >= '2023-03-30 00:00:00'::timestamp without time zone) AND (timezone('UTC'::text, ((b.modified_date)::date)::timestamp with time zone) <= '2023-05-18 00:00:00'::timestamp without time zone)) + WITH NO DATA; + + +ALTER TABLE public.mat_vw_breachcomp OWNER TO pe; + +-- +-- Name: vw_breachcomp; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_breachcomp AS + SELECT creds.credential_exposures_uid, + creds.email, + creds.breach_name, + creds.organizations_uid, + creds.root_domain, + creds.sub_domain, + creds.hash_type, + creds.name, + creds.login_id, + creds.password, + creds.phone, + creds.data_source_uid, + b.description, + b.breach_date, + b.added_date, + timezone('UTC'::text, ((b.modified_date)::date)::timestamp with time zone) AS modified_date, + b.data_classes, + b.password_included, + b.is_verified, + b.is_fabricated, + b.is_sensitive, + b.is_retired, + b.is_spam_list + FROM (public.credential_exposures creds + JOIN public.credential_breaches b ON ((creds.credential_breaches_uid = b.credential_breaches_uid))); + + +ALTER TABLE public.vw_breachcomp OWNER TO pe; + +-- +-- Name: mat_vw_breachcomp_breachdetails; Type: MATERIALIZED VIEW; Schema: public; Owner: pe +-- + +CREATE MATERIALIZED VIEW public.mat_vw_breachcomp_breachdetails AS + SELECT vb.organizations_uid, + vb.breach_name, + date(vb.modified_date) AS mod_date, + vb.description, + vb.breach_date, + vb.password_included, + count(vb.email) AS number_of_creds + FROM public.vw_breachcomp vb + GROUP BY vb.organizations_uid, vb.breach_name, (date(vb.modified_date)), vb.description, vb.breach_date, vb.password_included + ORDER BY (date(vb.modified_date)) DESC + WITH NO DATA; + + +ALTER TABLE public.mat_vw_breachcomp_breachdetails OWNER TO pe; + +-- +-- Name: mat_vw_breachcomp_credsbydate; Type: MATERIALIZED VIEW; Schema: public; Owner: pe +-- + +CREATE MATERIALIZED VIEW public.mat_vw_breachcomp_credsbydate AS + SELECT vw_breachcomp.organizations_uid, + date(vw_breachcomp.modified_date) AS mod_date, + sum( + CASE vw_breachcomp.password_included + WHEN false THEN 1 + ELSE 0 + END) AS no_password, + sum( + CASE vw_breachcomp.password_included + WHEN true THEN 1 + ELSE 0 + END) AS password_included + FROM public.vw_breachcomp + GROUP BY vw_breachcomp.organizations_uid, (date(vw_breachcomp.modified_date)) + ORDER BY (date(vw_breachcomp.modified_date)) DESC + WITH NO DATA; + + +ALTER TABLE public.mat_vw_breachcomp_credsbydate OWNER TO pe; + +-- +-- Name: organizations; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.organizations ( + organizations_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + name text NOT NULL, + cyhy_db_name text, + org_type_uid uuid, + report_on boolean DEFAULT false, + password text, + date_first_reported timestamp without time zone, + parent_org_uid uuid, + premium_report boolean, + agency_type text, + demo boolean DEFAULT false, + scorecard boolean DEFAULT false, + fceb boolean DEFAULT false, + receives_cyhy_report boolean DEFAULT false, + receives_bod_report boolean DEFAULT false, + receives_cybex_report boolean DEFAULT false, + run_scans boolean DEFAULT false, + is_parent boolean DEFAULT false, + ignore_roll_up boolean DEFAULT false, + retired boolean DEFAULT false, + cyhy_period_start timestamp without time zone, + fceb_child boolean DEFAULT false, + election boolean DEFAULT false, + scorecard_child boolean DEFAULT false +); + + +ALTER TABLE public.organizations OWNER TO pe; + +-- +-- Name: mat_vw_cyhy_port_counts; Type: MATERIALIZED VIEW; Schema: public; Owner: pe +-- + +CREATE MATERIALIZED VIEW public.mat_vw_cyhy_port_counts AS + SELECT p_i.report_period, + p_i.organizations_uid, + p_i.cyhy_db_name, + p_i.fceb, + p_i.fceb_child, + count(*) AS ports, + sum( + CASE + WHEN ((p_i.service_name = ANY (ARRAY['rdp'::text, 'telnet'::text, 'ftp'::text, 'rpc'::text, 'smb'::text, 'sql'::text, 'ldap'::text, 'irc'::text, 'netbios'::text, 'kerberos'::text])) AND (p_i.state = 'open'::text)) THEN 1 + ELSE 0 + END) AS risky_ports + FROM ( SELECT o.organizations_uid, + o.cyhy_db_name, + o.fceb, + o.fceb_child, + cps.report_period, + cps.port, + cps.ip, + cps.service_name, + cps.state + FROM (public.cyhy_port_scans_new cps + JOIN public.organizations o ON ((o.organizations_uid = cps.organizations_uid)))) p_i + GROUP BY p_i.report_period, p_i.organizations_uid, p_i.fceb, p_i.fceb_child, p_i.cyhy_db_name + WITH NO DATA; + + +ALTER TABLE public.mat_vw_cyhy_port_counts OWNER TO pe; + +-- +-- Name: mat_vw_cyhy_protocol_counts; Type: MATERIALIZED VIEW; Schema: public; Owner: pe +-- + +CREATE MATERIALIZED VIEW public.mat_vw_cyhy_protocol_counts AS + SELECT p_i.report_period, + p_i.organizations_uid, + p_i.cyhy_db_name, + p_i.fceb, + p_i.fceb_child, + count(*) AS protocols + FROM ( SELECT DISTINCT o.organizations_uid, + o.cyhy_db_name, + o.fceb, + o.fceb_child, + cps.report_period, + cps.port, + cps.service_name + FROM (public.cyhy_port_scans_new cps + JOIN public.organizations o ON ((o.organizations_uid = cps.organizations_uid)))) p_i + GROUP BY p_i.report_period, p_i.organizations_uid, p_i.cyhy_db_name, p_i.fceb, p_i.fceb_child + WITH NO DATA; + + +ALTER TABLE public.mat_vw_cyhy_protocol_counts OWNER TO pe; + +-- +-- Name: mat_vw_cyhy_risky_protocol_counts; Type: MATERIALIZED VIEW; Schema: public; Owner: pe +-- + +CREATE MATERIALIZED VIEW public.mat_vw_cyhy_risky_protocol_counts AS + SELECT p_i.report_period, + p_i.organizations_uid, + p_i.cyhy_db_name, + p_i.fceb, + p_i.fceb_child, + sum( + CASE + WHEN ((p_i.service_name = ANY (ARRAY['rdp'::text, 'telnet'::text, 'ftp'::text, 'rpc'::text, 'smb'::text, 'sql'::text, 'ldap'::text, 'irc'::text, 'netbios'::text, 'kerberos'::text])) AND (p_i.state = 'open'::text)) THEN 1 + ELSE 0 + END) AS risky_protocols + FROM ( SELECT DISTINCT o.organizations_uid, + o.cyhy_db_name, + o.fceb, + o.fceb_child, + cps.report_period, + cps.port, + cps.service_name, + cps.state + FROM (public.cyhy_port_scans_new cps + JOIN public.organizations o ON ((o.organizations_uid = cps.organizations_uid)))) p_i + GROUP BY p_i.report_period, p_i.organizations_uid, p_i.cyhy_db_name, p_i.fceb, p_i.fceb_child + WITH NO DATA; + + +ALTER TABLE public.mat_vw_cyhy_risky_protocol_counts OWNER TO pe; + +-- +-- Name: mat_vw_cyhy_services_counts; Type: MATERIALIZED VIEW; Schema: public; Owner: pe +-- + +CREATE MATERIALIZED VIEW public.mat_vw_cyhy_services_counts AS + SELECT p_i.report_period, + p_i.organizations_uid, + p_i.cyhy_db_name, + p_i.fceb, + p_i.fceb_child, + sum( + CASE + WHEN (p_i.service_name = ANY (ARRAY['http'::text, 'https'::text, 'http-proxy'::text])) THEN 1 + ELSE 0 + END) AS services + FROM ( SELECT DISTINCT o.organizations_uid, + o.cyhy_db_name, + o.fceb, + o.fceb_child, + cps.report_period, + cps.port, + cps.service_name + FROM (public.cyhy_port_scans_new cps + JOIN public.organizations o ON ((o.organizations_uid = cps.organizations_uid)))) p_i + GROUP BY p_i.report_period, p_i.organizations_uid, p_i.cyhy_db_name, p_i.fceb, p_i.fceb_child + WITH NO DATA; + + +ALTER TABLE public.mat_vw_cyhy_services_counts OWNER TO pe; + +-- +-- Name: root_domains; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.root_domains ( + root_domain_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + root_domain text NOT NULL, + ip_address text, + data_source_uid uuid NOT NULL, + enumerate_subs boolean DEFAULT true +); + + +ALTER TABLE public.root_domains OWNER TO pe; + +-- +-- Name: sub_domains; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.sub_domains ( + sub_domain_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + sub_domain text NOT NULL, + root_domain_uid uuid NOT NULL, + data_source_uid uuid NOT NULL, + dns_record_uid uuid, + status boolean DEFAULT false, + first_seen date, + last_seen date, + current boolean, + identified boolean DEFAULT false +); + + +ALTER TABLE public.sub_domains OWNER TO pe; + +-- +-- Name: mat_vw_fceb_total_ips; Type: MATERIALIZED VIEW; Schema: public; Owner: pe +-- + +CREATE MATERIALIZED VIEW public.mat_vw_fceb_total_ips AS + SELECT fceb_orgs.organizations_uid, + fceb_orgs.cyhy_db_name, + COALESCE(count(all_ips.ip), (0)::bigint) AS total_ips, + COALESCE(count( + CASE + WHEN ((all_ips.origin_cidr IS NULL) AND (all_ips.ip IS NOT NULL)) THEN 1 + ELSE NULL::integer + END), (0)::bigint) AS ip_discovered, + COALESCE(count( + CASE + WHEN (all_ips.origin_cidr IS NOT NULL) THEN 1 + ELSE NULL::integer + END), (0)::bigint) AS cidr_reported + FROM (( SELECT organizations.organizations_uid, + organizations.cyhy_db_name + FROM public.organizations + WHERE (((organizations.fceb = true) OR (organizations.fceb_child = true)) AND (organizations.retired IS FALSE))) fceb_orgs + LEFT JOIN ( SELECT cidrs_table.organizations_uid, + ips_table.ip, + ips_table.origin_cidr + FROM (public.ips ips_table + JOIN public.cidrs cidrs_table ON ((ips_table.origin_cidr = cidrs_table.cidr_uid))) + WHERE (ips_table.current IS TRUE) + UNION + SELECT rd.organizations_uid, + i.ip, + i.origin_cidr + FROM (((public.root_domains rd + JOIN public.sub_domains sd ON ((rd.root_domain_uid = sd.root_domain_uid))) + JOIN public.ips_subs si ON ((sd.sub_domain_uid = si.sub_domain_uid))) + JOIN public.ips i ON ((si.ip_hash = i.ip_hash))) + WHERE (sd.current IS TRUE)) all_ips ON ((fceb_orgs.organizations_uid = all_ips.organizations_uid))) + GROUP BY fceb_orgs.organizations_uid, fceb_orgs.cyhy_db_name + ORDER BY COALESCE(count(all_ips.ip), (0)::bigint) + WITH NO DATA; + + +ALTER TABLE public.mat_vw_fceb_total_ips OWNER TO pe; + +-- +-- Name: mat_vw_orgs_all_ips; Type: MATERIALIZED VIEW; Schema: public; Owner: pe +-- + +CREATE MATERIALIZED VIEW public.mat_vw_orgs_all_ips AS + SELECT reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + array_agg(all_ips.ip) AS ip_addresses + FROM (( SELECT organizations.organizations_uid, + organizations.cyhy_db_name + FROM public.organizations + WHERE (organizations.report_on = true)) reported_orgs + LEFT JOIN ( SELECT cidrs_table.organizations_uid, + ips_table.ip + FROM (public.ips ips_table + JOIN public.cidrs cidrs_table ON ((ips_table.origin_cidr = cidrs_table.cidr_uid))) + UNION + SELECT rd.organizations_uid, + i.ip + FROM (((public.root_domains rd + JOIN public.sub_domains sd ON ((rd.root_domain_uid = sd.root_domain_uid))) + JOIN public.ips_subs si ON ((sd.sub_domain_uid = si.sub_domain_uid))) + JOIN public.ips i ON ((si.ip_hash = i.ip_hash)))) all_ips ON ((reported_orgs.organizations_uid = all_ips.organizations_uid))) + GROUP BY reported_orgs.organizations_uid, reported_orgs.cyhy_db_name + ORDER BY reported_orgs.organizations_uid, reported_orgs.cyhy_db_name + WITH NO DATA; + + +ALTER TABLE public.mat_vw_orgs_all_ips OWNER TO pe; + +-- +-- Name: old_shodan_insecure_protocols_unverified_vulns; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.old_shodan_insecure_protocols_unverified_vulns ( + insecure_product_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + organization text, + ip text, + port integer, + protocol text, + type text, + name text, + potential_vulns text[], + mitigation text, + "timestamp" timestamp without time zone, + product text, + server text, + tags text[], + domains text[], + hostnames text[], + isn text, + asn integer, + data_source_uid uuid NOT NULL +); + + +ALTER TABLE public.old_shodan_insecure_protocols_unverified_vulns OWNER TO pe; + +-- +-- Name: shodan_assets; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.shodan_assets ( + shodan_asset_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + organization text, + ip text, + port integer, + protocol text, + "timestamp" timestamp without time zone, + product text, + server text, + tags text[], + domains text[], + hostnames text[], + isn text, + asn integer, + data_source_uid uuid NOT NULL, + country_code text, + location text +); + + +ALTER TABLE public.shodan_assets OWNER TO pe; + +-- +-- Name: shodan_vulns; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.shodan_vulns ( + shodan_vuln_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + organization text, + ip text, + port text, + protocol text, + "timestamp" timestamp without time zone, + cve text, + severity text, + cvss numeric, + summary text, + product text, + attack_vector text, + av_description text, + attack_complexity text, + ac_description text, + confidentiality_impact text, + ci_description text, + integrity_impact text, + ii_description text, + availability_impact text, + ai_description text, + tags text[], + domains text[], + hostnames text[], + isn text, + asn integer, + data_source_uid uuid NOT NULL, + type text, + name text, + potential_vulns text[], + mitigation text, + server text, + is_verified boolean DEFAULT true +); + + +ALTER TABLE public.shodan_vulns OWNER TO pe; + +-- +-- Name: vw_orgs_total_cidrs; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_orgs_total_cidrs AS + SELECT reported_orgs.organizations_uid, + COALESCE(cidr_counts.count, (0)::bigint) AS count + FROM (( SELECT organizations.organizations_uid + FROM public.organizations + WHERE (organizations.report_on = true)) reported_orgs + LEFT JOIN ( SELECT c.organizations_uid, + count(c.network) AS count + FROM public.cidrs c + GROUP BY c.organizations_uid) cidr_counts ON ((reported_orgs.organizations_uid = cidr_counts.organizations_uid))); + + +ALTER TABLE public.vw_orgs_total_cidrs OWNER TO pe; + +-- +-- Name: vw_orgs_total_domains; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_orgs_total_domains AS + SELECT root_table.organizations_uid, + root_table.cyhy_db_name, + root_table.num_root_domain, + sub_table.num_sub_domain + FROM (( SELECT reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + COALESCE(root_counts.num_root_domain, (0)::bigint) AS num_root_domain + FROM (( SELECT organizations.organizations_uid, + organizations.cyhy_db_name + FROM public.organizations + WHERE (organizations.report_on = true)) reported_orgs + LEFT JOIN ( SELECT root_table_1.organizations_uid, + count(DISTINCT root_table_1.root_domain) AS num_root_domain + FROM public.root_domains root_table_1 + GROUP BY root_table_1.organizations_uid) root_counts ON ((reported_orgs.organizations_uid = root_counts.organizations_uid)))) root_table + JOIN ( SELECT reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + COALESCE(sub_counts.num_sub_domain, (0)::bigint) AS num_sub_domain + FROM (( SELECT organizations.organizations_uid, + organizations.cyhy_db_name + FROM public.organizations + WHERE (organizations.report_on = true)) reported_orgs + LEFT JOIN ( SELECT root_table_1.organizations_uid, + count(DISTINCT sub_table_1.sub_domain) AS num_sub_domain + FROM (public.sub_domains sub_table_1 + JOIN public.root_domains root_table_1 ON ((sub_table_1.root_domain_uid = root_table_1.root_domain_uid))) + GROUP BY root_table_1.organizations_uid) sub_counts ON ((reported_orgs.organizations_uid = sub_counts.organizations_uid)))) sub_table ON ((root_table.organizations_uid = sub_table.organizations_uid))) + ORDER BY sub_table.num_sub_domain, root_table.num_root_domain; + + +ALTER TABLE public.vw_orgs_total_domains OWNER TO pe; + +-- +-- Name: VIEW vw_orgs_total_domains; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_orgs_total_domains IS 'Gets the total number of root and sub domains for all orgs.'; + + +-- +-- Name: vw_orgs_total_foreign_ips; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_orgs_total_foreign_ips AS + SELECT reported_orgs.organizations_uid, + COALESCE(foreign_ips.num_foreign_ips, (0)::bigint) AS num_foreign_ips + FROM (( SELECT organizations.organizations_uid + FROM public.organizations + WHERE (organizations.report_on = true)) reported_orgs + LEFT JOIN ( SELECT sa.organizations_uid, + count( + CASE + WHEN ((sa.country_code <> 'US'::text) AND (sa.country_code IS NOT NULL)) THEN 1 + ELSE NULL::integer + END) AS num_foreign_ips + FROM public.shodan_assets sa + GROUP BY sa.organizations_uid) foreign_ips ON ((reported_orgs.organizations_uid = foreign_ips.organizations_uid))); + + +ALTER TABLE public.vw_orgs_total_foreign_ips OWNER TO pe; + +-- +-- Name: vw_orgs_total_ips; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_orgs_total_ips AS + SELECT reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + COALESCE(count(all_ips.ip), (0)::bigint) AS num_ips + FROM (( SELECT organizations.organizations_uid, + organizations.cyhy_db_name + FROM public.organizations + WHERE (organizations.report_on = true)) reported_orgs + LEFT JOIN ( SELECT cidrs_table.organizations_uid, + ips_table.ip + FROM (public.ips ips_table + JOIN public.cidrs cidrs_table ON ((ips_table.origin_cidr = cidrs_table.cidr_uid))) + UNION + SELECT rd.organizations_uid, + i.ip + FROM (((public.root_domains rd + JOIN public.sub_domains sd ON ((rd.root_domain_uid = sd.root_domain_uid))) + JOIN public.ips_subs si ON ((sd.sub_domain_uid = si.sub_domain_uid))) + JOIN public.ips i ON ((si.ip_hash = i.ip_hash)))) all_ips ON ((reported_orgs.organizations_uid = all_ips.organizations_uid))) + GROUP BY reported_orgs.organizations_uid, reported_orgs.cyhy_db_name + ORDER BY COALESCE(count(all_ips.ip), (0)::bigint); + + +ALTER TABLE public.vw_orgs_total_ips OWNER TO pe; + +-- +-- Name: VIEW vw_orgs_total_ips; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_orgs_total_ips IS 'Gets the total number of ips associated with each organization.'; + + +-- +-- Name: vw_orgs_total_ports; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_orgs_total_ports AS + SELECT reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + COALESCE(count(all_ports.port), (0)::bigint) AS num_ports + FROM (( SELECT organizations.organizations_uid, + organizations.cyhy_db_name + FROM public.organizations + WHERE (organizations.report_on = true)) reported_orgs + LEFT JOIN ( SELECT DISTINCT assets.organizations_uid, + assets.ip, + assets.port + FROM public.shodan_assets assets + UNION + SELECT DISTINCT vulns.organizations_uid, + vulns.ip, + (vulns.port)::integer AS port + FROM public.shodan_vulns vulns + UNION + SELECT DISTINCT unverif_vulns.organizations_uid, + unverif_vulns.ip, + unverif_vulns.port + FROM public.old_shodan_insecure_protocols_unverified_vulns unverif_vulns) all_ports ON ((reported_orgs.organizations_uid = all_ports.organizations_uid))) + GROUP BY reported_orgs.organizations_uid, reported_orgs.cyhy_db_name + ORDER BY COALESCE(count(all_ports.port), (0)::bigint); + + +ALTER TABLE public.vw_orgs_total_ports OWNER TO pe; + +-- +-- Name: VIEW vw_orgs_total_ports; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_orgs_total_ports IS 'Gets the total number of unique ports for every organization P&E reports on'; + + +-- +-- Name: vw_orgs_total_ports_protocols; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_orgs_total_ports_protocols AS + SELECT reported_orgs.organizations_uid, + COALESCE(protocols.port_protocol, (0)::bigint) AS port_protocol + FROM (( SELECT organizations.organizations_uid + FROM public.organizations + WHERE (organizations.report_on = true)) reported_orgs + LEFT JOIN ( SELECT t.organizations_uid, + count(*) AS port_protocol + FROM ( SELECT DISTINCT sa.port, + sa.protocol, + sa.organizations_uid + FROM public.shodan_assets sa) t + GROUP BY t.organizations_uid) protocols ON ((reported_orgs.organizations_uid = protocols.organizations_uid))); + + +ALTER TABLE public.vw_orgs_total_ports_protocols OWNER TO pe; + +-- +-- Name: vw_orgs_total_software; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_orgs_total_software AS + SELECT reported_orgs.organizations_uid, + COALESCE(software.num_software, (0)::bigint) AS num_software + FROM (( SELECT organizations.organizations_uid + FROM public.organizations + WHERE (organizations.report_on = true)) reported_orgs + LEFT JOIN ( SELECT t.organizations_uid, + count(*) AS num_software + FROM ( SELECT DISTINCT sa.product, + sa.organizations_uid + FROM public.shodan_assets sa) t + GROUP BY t.organizations_uid) software ON ((reported_orgs.organizations_uid = software.organizations_uid))); + + +ALTER TABLE public.vw_orgs_total_software OWNER TO pe; + +-- +-- Name: mat_vw_orgs_attacksurface; Type: MATERIALIZED VIEW; Schema: public; Owner: pe +-- + +CREATE MATERIALIZED VIEW public.mat_vw_orgs_attacksurface AS + SELECT domains_view.organizations_uid, + domains_view.cyhy_db_name, + ports_view.num_ports, + domains_view.num_root_domain, + domains_view.num_sub_domain, + ips_view.num_ips, + cidrs_view.count AS num_cidrs, + port_prot_view.port_protocol AS num_ports_protocols, + soft_view.num_software, + for_ips_view.num_foreign_ips + FROM ((((((public.vw_orgs_total_domains domains_view + JOIN public.vw_orgs_total_ips ips_view ON ((domains_view.organizations_uid = ips_view.organizations_uid))) + JOIN public.vw_orgs_total_ports ports_view ON ((ips_view.organizations_uid = ports_view.organizations_uid))) + JOIN public.vw_orgs_total_cidrs cidrs_view ON ((cidrs_view.organizations_uid = ips_view.organizations_uid))) + JOIN public.vw_orgs_total_ports_protocols port_prot_view ON ((port_prot_view.organizations_uid = ports_view.organizations_uid))) + JOIN public.vw_orgs_total_software soft_view ON ((soft_view.organizations_uid = port_prot_view.organizations_uid))) + JOIN public.vw_orgs_total_foreign_ips for_ips_view ON ((for_ips_view.organizations_uid = soft_view.organizations_uid))) + ORDER BY ips_view.num_ips, domains_view.num_sub_domain, domains_view.num_root_domain, ports_view.num_ports + WITH NO DATA; + + +ALTER TABLE public.mat_vw_orgs_attacksurface OWNER TO pe; + +-- +-- Name: mentions; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.mentions ( + mentions_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + category text, + collection_date text, + content text, + creator text, + date date, + sixgill_mention_id text, + post_id text, + lang text, + rep_grade text, + site text, + site_grade text, + title text, + type text, + url text, + comments_count text, + sub_category text, + tags text, + organizations_uid uuid NOT NULL, + data_source_uid uuid NOT NULL, + title_translated text, + content_translated text, + detected_lang text +); + + +ALTER TABLE public.mentions OWNER TO pe; + +-- +-- Name: org_id_map; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.org_id_map ( + cyhy_id text, + pe_org_id text, + merge_orgs boolean DEFAULT false +); + + +ALTER TABLE public.org_id_map OWNER TO pe; + +-- +-- Name: org_type; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.org_type ( + org_type_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + org_type text +); + + +ALTER TABLE public.org_type OWNER TO pe; + +-- +-- Name: outdated_vw_breach_complete; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.outdated_vw_breach_complete AS + SELECT creds.credential_exposures_uid AS hibp_exposed_credentials_uid, + creds.email, + creds.breach_name, + creds.organizations_uid, + creds.root_domain, + creds.sub_domain, + b.description, + b.breach_date, + b.added_date, + b.modified_date, + b.data_classes, + b.password_included, + b.is_verified, + b.is_fabricated, + b.is_sensitive, + b.is_retired, + b.is_spam_list + FROM (public.credential_exposures creds + JOIN public.credential_breaches b ON ((creds.credential_breaches_uid = b.credential_breaches_uid))); + + +ALTER TABLE public.outdated_vw_breach_complete OWNER TO pe; + +-- +-- Name: pshtt_results; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.pshtt_results ( + pshtt_results_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + sub_domain_uid uuid NOT NULL, + data_source_uid uuid NOT NULL, + sub_domain text NOT NULL, + scanned boolean, + base_domain text, + base_domain_hsts_preloaded boolean, + canonical_url text, + defaults_to_https boolean, + domain text, + domain_enforces_https boolean, + domain_supports_https boolean, + domain_uses_strong_hsts boolean, + downgrades_https boolean, + htss boolean, + hsts_entire_domain boolean, + hsts_header text, + hsts_max_age numeric, + hsts_preload_pending boolean, + hsts_preload_ready boolean, + hsts_preloaded boolean, + https_bad_chain boolean, + https_bad_hostname boolean, + https_cert_chain_length integer, + https_client_auth_required boolean, + https_custom_truststore_trusted boolean, + https_expired_cert boolean, + https_full_connection boolean, + https_live boolean, + https_probably_missing_intermediate_cert boolean, + https_publicly_trusted boolean, + https_self_signed_cert boolean, + ip inet, + live boolean, + notes text, + redirect boolean, + redirect_to text, + server_header text, + server_version text, + strictly_forces_https boolean, + unknown_error boolean, + valid_https boolean, + ep_http_headers json, + ep_http_ip inet, + ep_http_live boolean, + ep_http_notes text, + ep_http_redirect boolean, + ep_http_redirect_eventually_to text, + ep_http_redirect_eventually_to_external boolean, + ep_http_redirect_eventually_to_http boolean, + ep_http_redirect_eventually_to_https boolean, + ep_http_redirect_eventually_to_subdomain boolean, + ep_http_redirect_immediately_to text, + ep_http_redirect_immediately_to_external boolean, + ep_http_redirect_immediately_to_http boolean, + ep_http_redirect_immediately_to_https boolean, + ep_http_redirect_immediately_to_subdomain boolean, + ep_http_redirect_immediately_to_www boolean, + ep_http_server_header text, + ep_http_server_version text, + ep_http_status integer, + ep_http_unknown_error boolean, + ep_http_url text, + ep_https_headers json, + ep_https_hsts boolean, + ep_https_hsts_all_subdomains boolean, + ep_https_hsts_header text, + ep_https_hsts_max_age numeric, + ep_https_hsts_preload boolean, + ep_https_https_bad_chain boolean, + ep_https_https_bad_hostname boolean, + ep_https_https_cert_chain_len integer, + ep_https_https_client_auth_required boolean, + ep_https_https_custom_trusted boolean, + ep_https_https_expired_cert boolean, + ep_https_https_vull_connection boolean, + ep_https_https_missing_intermediate_cert boolean, + ep_https_https_public_trusted boolean, + ep_https_https_self_signed_cert boolean, + ep_https_https_valid boolean, + ep_https_ip inet, + ep_https_live boolean, + ep_https_notes text, + ep_https_redirect boolean, + ep_https_redireect_eventually_to text, + ep_https_redirect_eventually_to_external boolean, + ep_https_redirect_eventually_to_http boolean, + ep_https_redirect_eventually_to_https boolean, + ep_https_redirect_eventually_to_subdomain boolean, + ep_https_redirect_immediately_to text, + ep_https_redirect_immediately_to_external boolean, + ep_https_redirect_immediately_to_http boolean, + ep_https_redirect_immediately_to_https boolean, + ep_https_redirect_immediately_to_subdomain boolean, + ep_https_redirect_immediately_to_www boolean, + ep_https_server_header text, + ep_https_server_version text, + ep_https_status integer, + ep_https_unknown_error boolean, + ep_https_url text, + ep_httpswww_headers json, + ep_httpswww_hsts boolean, + ep_httpswww_hsts_all_subdomains boolean, + ep_httpswww_hsts_header text, + ep_httpswww_hsts_max_age numeric, + ep_httpswww_hsts_preload boolean, + ep_httpswww_https_bad_chain boolean, + ep_httpswww_https_bad_hostname boolean, + ep_httpswww_https_cert_chain_len integer, + ep_httpswww_https_client_auth_required boolean, + ep_httpswww_https_custom_trusted boolean, + ep_httpswww_https_expired_cert boolean, + ep_httpswww_https_full_connection boolean, + ep_httpswww_https_missing_intermediate_cert boolean, + ep_httpswww_https_public_trusted boolean, + ep_httpswww_https_self_signed_cert boolean, + ep_httpswww_https_valid boolean, + ep_httpswww_ip inet, + ep_httpswww_live boolean, + ep_httpswww_notes text, + ep_httpswww_redirect boolean, + ep_httpswww_redirect_eventually_to text, + ep_httpswww_redirect_eventually_to_external boolean, + ep_httpswww_redirect_eventually_to_http boolean, + ep_httpswww_redirect_eventually_to_https boolean, + ep_httpswww_redirect_eventually_to_subdomain boolean, + ep_httpswww_redirect_immediately_to text, + ep_httpswww_redirect_immediately_to_external boolean, + ep_httpswww_redirect_immediately_to_http boolean, + ep_httpswww_redirect_immediately_to_https boolean, + ep_httpswww_redirect_immediately_to_subdomain boolean, + ep_httpswww_redirect_immediately_to_www boolean, + ep_httpswww_server_header text, + ep_httpswww_server_version text, + ep_httpswww_status integer, + ep_httpswww_unknown_error boolean, + ep_httpswww_url text, + ep_httpwww_headers json, + ep_httpwww_ip inet, + ep_httpwww_live boolean, + ep_httpwww_notes text, + ep_httpwww_redirect boolean, + ep_httpwww_redirect_eventually_to text, + ep_httpwww_redirect_eventually_to_external boolean, + ep_httpwww_redirect_eventually_to_http boolean, + ep_httpwww_redirect_eventually_to_https boolean, + ep_httpwww_redirect_eventually_to_subdomain boolean, + ep_httpwww_redirect_immediately_to text, + ep_httpwww_redirect_immediately_to_external boolean, + ep_httpwww_redirect_immediately_to_http boolean, + ep_httpwww_redirect_immediately_to_https boolean, + ep_httpwww_redirect_immediately_to_subdomain boolean, + ep_httpwww_redirect_immediately_to_www boolean, + ep_httpwww_server_header text, + ep_httpwww_server_version text, + ep_httpwww_status integer, + ep_httpwww_unknown_error boolean, + ep_httpwww_url text +); + + +ALTER TABLE public.pshtt_results OWNER TO pe; + +-- +-- Name: report_summary_stats; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.report_summary_stats ( + report_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + start_date date NOT NULL, + end_date date, + ip_count integer, + root_count integer, + sub_count integer, + ports_count integer, + creds_count integer, + breach_count integer, + cred_password_count integer, + domain_alert_count integer, + suspected_domain_count integer, + insecure_port_count integer, + verified_vuln_count integer, + suspected_vuln_count integer, + suspected_vuln_addrs_count integer, + threat_actor_count integer, + dark_web_alerts_count integer, + dark_web_mentions_count integer, + dark_web_executive_alerts_count integer, + dark_web_asset_alerts_count integer, + pe_number_score text, + pe_letter_grade text, + pe_percent_score numeric, + cidr_count integer, + port_protocol_count integer, + software_count integer, + foreign_ips_count integer +); + + +ALTER TABLE public.report_summary_stats OWNER TO pe; + +-- +-- Name: scorecard_summary_stats; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.scorecard_summary_stats ( + scorecard_summary_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + start_date date NOT NULL, + end_date date, + score text, + discovery_score double precision, + profiling_score double precision, + identification_score double precision, + tracking_score double precision, + ips_self_reported integer, + ips_discovered integer, + ips_monitored integer, + domains_self_reported integer, + domains_discovered integer, + domains_monitored integer, + web_apps_self_reported integer, + web_apps_discovered integer, + web_apps_monitored integer, + certs_self_reported integer, + certs_discovered integer, + certs_monitored integer, + total_ports integer, + risky_ports integer, + protocols integer, + insecure_protocols integer, + total_services integer, + unsupported_software integer, + ext_host_kev integer, + ext_host_vuln_critical integer, + ext_host_vuln_high integer, + web_apps_kev integer, + web_apps_vuln_critical integer, + web_apps_vuln_high integer, + total_kev integer, + total_vuln_critical integer, + total_vuln_high integer, + org_avg_days_remediate_kev integer, + org_avg_days_remediate_critical integer, + org_avg_days_remediate_high integer, + sect_avg_days_remediate_kev integer, + sect_avg_days_remediate_critical integer, + sect_avg_days_remediate_high integer, + bod_22_01 boolean, + bod_19_02_critical boolean, + bod_19_02_high boolean, + org_web_avg_days_remediate_critical integer, + org_web_avg_days_remediate_high integer, + sect_web_avg_days_remediate_critical integer, + sect_web_avg_days_remediate_high integer, + email_compliance_pct double precision, + https_compliance_pct double precision, + sector_name text +); + + +ALTER TABLE public.scorecard_summary_stats OWNER TO pe; + +-- +-- Name: sectors; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.sectors ( + sector_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + id text NOT NULL, + acronym text, + name text, + email text, + contact_name text, + retired boolean DEFAULT false, + first_seen date, + last_seen date, + run_scorecards boolean, + password text, + parent_sector_uid uuid +); + + +ALTER TABLE public.sectors OWNER TO pe; + +-- +-- Name: sectors_orgs; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.sectors_orgs ( + sector_org_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + sector_uid uuid NOT NULL, + organizations_uid uuid NOT NULL, + first_seen date, + last_seen date +); + + +ALTER TABLE public.sectors_orgs OWNER TO pe; + +-- +-- Name: team_members; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.team_members ( + team_member_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + team_member_fname text NOT NULL, + team_member_lname text NOT NULL, + team_member_email text NOT NULL, + "team_member_ghID" text NOT NULL, + team_member_phone text, + team_member_role text, + team_member_notes text +); + + +ALTER TABLE public.team_members OWNER TO pe; + +-- +-- Name: top_cves; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.top_cves ( + top_cves_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + cve_id text, + dynamic_rating text, + nvd_base_score text, + date date, + summary text, + data_source_uid uuid NOT NULL +); + + +ALTER TABLE public.top_cves OWNER TO pe; + +-- +-- Name: topic_totals; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.topic_totals ( + cound_uuid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + organizations_uid uuid NOT NULL, + content_count integer NOT NULL, + count_date text DEFAULT to_char((CURRENT_DATE)::timestamp with time zone, 'YYYY-MM-DD'::text) +); + + +ALTER TABLE public.topic_totals OWNER TO pe; + +-- +-- Name: unique_software; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.unique_software ( + _id uuid DEFAULT public.uuid_generate_v1() NOT NULL, + software_name text NOT NULL +); + + +ALTER TABLE public.unique_software OWNER TO pe; + +-- +-- Name: vw_breachcomp_breachdetails; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_breachcomp_breachdetails AS + SELECT vb.organizations_uid, + vb.breach_name, + date(vb.modified_date) AS mod_date, + vb.description, + vb.breach_date, + vb.password_included, + count(vb.email) AS number_of_creds + FROM public.vw_breachcomp vb + GROUP BY vb.organizations_uid, vb.breach_name, (date(vb.modified_date)), vb.description, vb.breach_date, vb.password_included + ORDER BY (date(vb.modified_date)) DESC; + + +ALTER TABLE public.vw_breachcomp_breachdetails OWNER TO pe; + +-- +-- Name: vw_breachcomp_credsbydate; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_breachcomp_credsbydate AS + SELECT vw_breachcomp.organizations_uid, + date(vw_breachcomp.modified_date) AS mod_date, + sum( + CASE vw_breachcomp.password_included + WHEN false THEN 1 + ELSE 0 + END) AS no_password, + sum( + CASE vw_breachcomp.password_included + WHEN true THEN 1 + ELSE 0 + END) AS password_included + FROM public.vw_breachcomp + GROUP BY vw_breachcomp.organizations_uid, (date(vw_breachcomp.modified_date)) + ORDER BY (date(vw_breachcomp.modified_date)) DESC; + + +ALTER TABLE public.vw_breachcomp_credsbydate OWNER TO pe; + +-- +-- Name: vw_cidrs; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_cidrs AS + SELECT cidrs.cidr_uid, + cidrs.network, + cidrs.organizations_uid, + cidrs.data_source_uid, + cidrs.insert_alert + FROM public.cidrs; + + +ALTER TABLE public.vw_cidrs OWNER TO pe; + +-- +-- Name: vw_cyhy_port_counts; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_cyhy_port_counts AS + SELECT p_i.report_period, + p_i.organizations_uid, + p_i.cyhy_db_name, + p_i.fceb, + p_i.fceb_child, + count(*) AS ports, + sum( + CASE + WHEN ((p_i.service_name = ANY (ARRAY['rdp'::text, 'telnet'::text, 'ftp'::text, 'rpc'::text, 'smb'::text, 'sql'::text, 'ldap'::text, 'irc'::text, 'netbios'::text, 'kerberos'::text])) AND (p_i.state = 'open'::text)) THEN 1 + ELSE 0 + END) AS risky_ports + FROM ( SELECT o.organizations_uid, + o.cyhy_db_name, + o.fceb, + o.fceb_child, + cps.report_period, + cps.port, + cps.ip, + cps.service_name, + cps.state + FROM (public.cyhy_port_scans_new cps + JOIN public.organizations o ON ((o.organizations_uid = cps.organizations_uid)))) p_i + GROUP BY p_i.report_period, p_i.organizations_uid, p_i.fceb, p_i.fceb_child, p_i.cyhy_db_name; + + +ALTER TABLE public.vw_cyhy_port_counts OWNER TO pe; + +-- +-- Name: vw_cyhy_protocol_counts; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_cyhy_protocol_counts AS + SELECT p_i.report_period, + p_i.organizations_uid, + p_i.cyhy_db_name, + p_i.fceb, + p_i.fceb_child, + count(*) AS protocols + FROM ( SELECT DISTINCT o.organizations_uid, + o.cyhy_db_name, + o.fceb, + o.fceb_child, + cps.report_period, + cps.port, + cps.service_name + FROM (public.cyhy_port_scans_new cps + JOIN public.organizations o ON ((o.organizations_uid = cps.organizations_uid)))) p_i + GROUP BY p_i.report_period, p_i.organizations_uid, p_i.cyhy_db_name, p_i.fceb, p_i.fceb_child; + + +ALTER TABLE public.vw_cyhy_protocol_counts OWNER TO pe; + +-- +-- Name: vw_cyhy_risky_protocol_counts; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_cyhy_risky_protocol_counts AS + SELECT p_i.report_period, + p_i.organizations_uid, + p_i.cyhy_db_name, + p_i.fceb, + p_i.fceb_child, + sum( + CASE + WHEN ((p_i.service_name = ANY (ARRAY['rdp'::text, 'telnet'::text, 'ftp'::text, 'rpc'::text, 'smb'::text, 'sql'::text, 'ldap'::text, 'irc'::text, 'netbios'::text, 'kerberos'::text])) AND (p_i.state = 'open'::text)) THEN 1 + ELSE 0 + END) AS risky_protocols + FROM ( SELECT DISTINCT o.organizations_uid, + o.cyhy_db_name, + o.fceb, + o.fceb_child, + cps.report_period, + cps.port, + cps.service_name, + cps.state + FROM (public.cyhy_port_scans_new cps + JOIN public.organizations o ON ((o.organizations_uid = cps.organizations_uid)))) p_i + GROUP BY p_i.report_period, p_i.organizations_uid, p_i.cyhy_db_name, p_i.fceb, p_i.fceb_child; + + +ALTER TABLE public.vw_cyhy_risky_protocol_counts OWNER TO pe; + +-- +-- Name: vw_cyhy_services_counts; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_cyhy_services_counts AS + SELECT p_i.report_period, + p_i.organizations_uid, + p_i.cyhy_db_name, + p_i.fceb, + p_i.fceb_child, + sum( + CASE + WHEN (p_i.service_name = ANY (ARRAY['http'::text, 'https'::text, 'http-proxy'::text])) THEN 1 + ELSE 0 + END) AS services + FROM ( SELECT DISTINCT o.organizations_uid, + o.cyhy_db_name, + o.fceb, + o.fceb_child, + cps.report_period, + cps.port, + cps.service_name + FROM (public.cyhy_port_scans_new cps + JOIN public.organizations o ON ((o.organizations_uid = cps.organizations_uid)))) p_i + GROUP BY p_i.report_period, p_i.organizations_uid, p_i.cyhy_db_name, p_i.fceb, p_i.fceb_child; + + +ALTER TABLE public.vw_cyhy_services_counts OWNER TO pe; + +-- +-- Name: vw_darkweb_assetalerts; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_darkweb_assetalerts AS + SELECT a.organizations_uid, + max(a.date) AS date, + a.site AS "Site", + a.title AS "Title", + count(*) AS "Events" + FROM public.alerts a + WHERE ((a.alert_name !~~ '%executive%'::text) AND (a.site IS NOT NULL) AND (a.site <> 'NaN'::text)) + GROUP BY a.site, a.title, a.organizations_uid + ORDER BY (count(*)) DESC; + + +ALTER TABLE public.vw_darkweb_assetalerts OWNER TO pe; + +-- +-- Name: vw_darkweb_execalerts; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_darkweb_execalerts AS + SELECT a.organizations_uid, + max(a.date) AS date, + a.site AS "Site", + a.title AS "Title", + count(*) AS "Events" + FROM public.alerts a + WHERE ((a.alert_name ~~ '%executive%'::text) AND (a.site IS NOT NULL) AND (a.site <> 'NaN'::text)) + GROUP BY a.site, a.title, a.organizations_uid + ORDER BY (count(*)) DESC; + + +ALTER TABLE public.vw_darkweb_execalerts OWNER TO pe; + +-- +-- Name: vw_darkweb_inviteonlymarkets; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_darkweb_inviteonlymarkets AS + SELECT a.organizations_uid, + a.date, + a.site AS "Site" + FROM public.alerts a + WHERE ((a.site ~~ 'market%'::text) AND (a.site IS NOT NULL) AND (a.site <> 'NaN'::text) AND (a.site <> ''::text)); + + +ALTER TABLE public.vw_darkweb_inviteonlymarkets OWNER TO pe; + +-- +-- Name: vw_darkweb_mentionsbydate; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_darkweb_mentionsbydate AS + SELECT m.organizations_uid, + m.date, + count(*) AS "Count" + FROM public.mentions m + GROUP BY m.organizations_uid, m.date + ORDER BY m.date DESC; + + +ALTER TABLE public.vw_darkweb_mentionsbydate OWNER TO pe; + +-- +-- Name: vw_darkweb_mostactposts; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_darkweb_mostactposts AS + SELECT m.organizations_uid, + m.date, + m.title AS "Title", + CASE + WHEN (m.comments_count = 'NaN'::text) THEN 1 + WHEN (m.comments_count = '0.0'::text) THEN 1 + WHEN (m.comments_count IS NULL) THEN 1 + ELSE ((m.comments_count)::numeric)::integer + END AS "Comments Count" + FROM public.mentions m + WHERE ((m.site ~~ 'forum%'::text) OR (m.site ~~ 'market%'::text)) + ORDER BY + CASE + WHEN (m.comments_count = 'NaN'::text) THEN 1 + WHEN (m.comments_count = '0.0'::text) THEN 1 + WHEN (m.comments_count IS NULL) THEN 1 + ELSE ((m.comments_count)::numeric)::integer + END DESC; + + +ALTER TABLE public.vw_darkweb_mostactposts OWNER TO pe; + +-- +-- Name: vw_darkweb_potentialthreats; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_darkweb_potentialthreats AS + SELECT a.organizations_uid, + a.date, + a.site AS "Site", + btrim(a.threats, '{}'::text) AS "Threats" + FROM public.alerts a + WHERE ((a.site IS NOT NULL) AND (a.site <> 'NaN'::text) AND (a.site <> ''::text)); + + +ALTER TABLE public.vw_darkweb_potentialthreats OWNER TO pe; + +-- +-- Name: vw_darkweb_sites; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_darkweb_sites AS + SELECT m.organizations_uid, + m.date, + m.site AS "Site" + FROM public.mentions m; + + +ALTER TABLE public.vw_darkweb_sites OWNER TO pe; + +-- +-- Name: vw_darkweb_socmedia_mostactposts; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_darkweb_socmedia_mostactposts AS + SELECT m.organizations_uid, + m.date, + m.title AS "Title", + CASE + WHEN (m.comments_count = 'NaN'::text) THEN 1 + WHEN (m.comments_count = '0.0'::text) THEN 1 + ELSE ((m.comments_count)::numeric)::integer + END AS "Comments Count" + FROM public.mentions m + WHERE ((m.site !~~ 'forum%'::text) AND (m.site !~~ 'market%'::text)) + ORDER BY + CASE + WHEN (m.comments_count = 'NaN'::text) THEN 1 + WHEN (m.comments_count = '0.0'::text) THEN 1 + ELSE ((m.comments_count)::numeric)::integer + END DESC; + + +ALTER TABLE public.vw_darkweb_socmedia_mostactposts OWNER TO pe; + +-- +-- Name: vw_darkweb_threatactors; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_darkweb_threatactors AS + SELECT m.organizations_uid, + m.date, + m.creator AS "Creator", + round((m.rep_grade)::numeric, 3) AS "Grade" + FROM public.mentions m + ORDER BY (round((m.rep_grade)::numeric, 3)) DESC; + + +ALTER TABLE public.vw_darkweb_threatactors OWNER TO pe; + +-- +-- Name: vw_darkweb_topcves; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_darkweb_topcves AS + SELECT tc.top_cves_uid, + tc.cve_id, + tc.dynamic_rating, + tc.nvd_base_score, + tc.date, + tc.summary, + tc.data_source_uid + FROM public.top_cves tc + ORDER BY tc.date DESC + LIMIT 10; + + +ALTER TABLE public.vw_darkweb_topcves OWNER TO pe; + +-- +-- Name: vw_domain_counts; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_domain_counts AS + SELECT o.organizations_uid, + o.cyhy_db_name, + o.fceb, + o.fceb_child, + COALESCE(cnts.identified, (0)::bigint) AS identified, + COALESCE(cnts.unidentified, (0)::bigint) AS unidentified + FROM (public.organizations o + LEFT JOIN ( SELECT rd.organizations_uid, + sum( + CASE sd.identified + WHEN true THEN 1 + ELSE 0 + END) AS identified, + sum( + CASE sd.identified + WHEN false THEN 1 + ELSE 0 + END) AS unidentified + FROM (public.root_domains rd + JOIN public.sub_domains sd ON ((sd.root_domain_uid = rd.root_domain_uid))) + GROUP BY rd.organizations_uid) cnts ON ((o.organizations_uid = cnts.organizations_uid))); + + +ALTER TABLE public.vw_domain_counts OWNER TO pe; + +-- +-- Name: vw_dscore_pe_domain; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_dscore_pe_domain AS + SELECT domain_data.organizations_uid, + count(domain_data.sub_domain) FILTER (WHERE (domain_data.identified = false)) AS num_ident_domain, + count(domain_data.sub_domain) AS num_monitor_domain + FROM ( SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + all_domains.sub_domain, + all_domains.identified + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT root_domains.organizations_uid, + sub_domains.sub_domain, + sub_domains.identified + FROM (public.root_domains + JOIN public.sub_domains ON ((root_domains.root_domain_uid = sub_domains.root_domain_uid)))) all_domains ON ((orgs.organizations_uid = all_domains.organizations_uid)))) domain_data + GROUP BY domain_data.organizations_uid; + + +ALTER TABLE public.vw_dscore_pe_domain OWNER TO pe; + +-- +-- Name: VIEW vw_dscore_pe_domain; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_dscore_pe_domain IS 'Retrieves all the PE domain data needed to calculate the discovery score'; + + +-- +-- Name: vw_dscore_pe_ip; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_dscore_pe_ip AS + SELECT grouped_cidr_ips.organizations_uid, + grouped_cidr_ips.num_ident_ip, + grouped_all_ips.num_monitor_ip + FROM (( SELECT cidr_ips_data.organizations_uid, + COALESCE(count(cidr_ips_data.ip), (0)::bigint) AS num_ident_ip + FROM ( SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + cidr_ips.ip + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT cidrs.organizations_uid, + ips.ip + FROM (public.ips + JOIN public.cidrs ON ((ips.origin_cidr = cidrs.cidr_uid)))) cidr_ips ON ((orgs.organizations_uid = cidr_ips.organizations_uid)))) cidr_ips_data + GROUP BY cidr_ips_data.organizations_uid) grouped_cidr_ips + JOIN ( SELECT all_ips_data.organizations_uid, + COALESCE(count(all_ips_data.ip), (0)::bigint) AS num_monitor_ip + FROM ( SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + all_ips.ip + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT cidrs.organizations_uid, + ips.ip + FROM (public.ips + JOIN public.cidrs ON ((ips.origin_cidr = cidrs.cidr_uid))) + UNION + SELECT rd.organizations_uid, + i.ip + FROM (((public.root_domains rd + JOIN public.sub_domains sd ON ((rd.root_domain_uid = sd.root_domain_uid))) + JOIN public.ips_subs si ON ((sd.sub_domain_uid = si.sub_domain_uid))) + JOIN public.ips i ON ((si.ip_hash = i.ip_hash)))) all_ips ON ((orgs.organizations_uid = all_ips.organizations_uid)))) all_ips_data + GROUP BY all_ips_data.organizations_uid) grouped_all_ips ON ((grouped_cidr_ips.organizations_uid = grouped_all_ips.organizations_uid))) + ORDER BY grouped_cidr_ips.organizations_uid; + + +ALTER TABLE public.vw_dscore_pe_ip OWNER TO pe; + +-- +-- Name: VIEW vw_dscore_pe_ip; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_dscore_pe_ip IS 'Retrieves all the PE IP data needed to calculate the discovery score'; + + +-- +-- Name: vw_dscore_vs_cert; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_dscore_vs_cert AS + SELECT cert_data.organizations_uid, + sum(cert_data.num_ident_cert) AS num_ident_cert, + sum(cert_data.num_monitor_cert) AS num_monitor_cert + FROM ( SELECT COALESCE(organizations.parent_org_uid, organizations.organizations_uid) AS organizations_uid, + 0 AS num_ident_cert, + 0 AS num_monitor_cert + FROM public.organizations) cert_data + GROUP BY cert_data.organizations_uid; + + +ALTER TABLE public.vw_dscore_vs_cert OWNER TO pe; + +-- +-- Name: VIEW vw_dscore_vs_cert; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_dscore_vs_cert IS 'Retrieves all VS certificate data needed for the calculation of the I-Score, currently not pulling any real data until VS fixes their certificate scan script'; + + +-- +-- Name: vw_dscore_vs_mail; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_dscore_vs_mail AS + SELECT mail_data.organizations_uid, + COALESCE(sum(mail_data.domain_counter) FILTER (WHERE ((mail_data.valid_dmarc_base_domain = true) OR (mail_data.valid_dmarc = true))), (0)::bigint) AS num_valid_dmarc, + COALESCE(sum(mail_data.domain_counter) FILTER (WHERE (mail_data.valid_spf = true)), (0)::bigint) AS num_valid_spf, + COALESCE(sum(mail_data.domain_counter) FILTER (WHERE ((mail_data.valid_dmarc_base_domain = true) OR (mail_data.valid_dmarc = true) OR (mail_data.valid_spf = true))), (0)::bigint) AS num_valid_dmarc_or_spf, + sum(mail_data.domain_counter) AS total_mail_domains + FROM ( SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + mail.domain, + mail.valid_dmarc_base_domain, + mail.valid_dmarc, + mail.valid_spf, + mail.domain_counter + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT cyhy_trustymail.cyhy_trustymail_uid, + cyhy_trustymail.organizations_uid, + cyhy_trustymail.cyhy_id, + cyhy_trustymail.cyhy_latest, + cyhy_trustymail.base_domain, + cyhy_trustymail.is_base_domain, + cyhy_trustymail.domain, + cyhy_trustymail.dmarc_record, + cyhy_trustymail.valid_spf, + cyhy_trustymail.scan_date, + cyhy_trustymail.live, + cyhy_trustymail.spf_record, + cyhy_trustymail.valid_dmarc, + cyhy_trustymail.valid_dmarc_base_domain, + cyhy_trustymail.dmarc_policy, + cyhy_trustymail.dmarc_policy_percentage, + cyhy_trustymail.aggregate_report_uris, + cyhy_trustymail.domain_supports_smtp, + cyhy_trustymail.first_seen, + cyhy_trustymail.last_seen, + cyhy_trustymail.dmarc_subdomain_policy, + cyhy_trustymail.domain_supports_starttls, + 1 AS domain_counter + FROM public.cyhy_trustymail + WHERE (cyhy_trustymail.cyhy_latest = true)) mail ON ((orgs.organizations_uid = mail.organizations_uid)))) mail_data + GROUP BY mail_data.organizations_uid; + + +ALTER TABLE public.vw_dscore_vs_mail OWNER TO pe; + +-- +-- Name: VIEW vw_dscore_vs_mail; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_dscore_vs_mail IS 'Retrieves all the VS mail data needed to calculate the discovery score'; + + +-- +-- Name: was_summary; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.was_summary ( + customer_id uuid, + was_org_id text, + webapp_count integer, + active_vuln_count integer, + webapp_with_vulns_count integer, + last_updated date +); + + +ALTER TABLE public.was_summary OWNER TO pe; + +-- +-- Name: vw_dscore_was_webapp; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_dscore_was_webapp AS + SELECT webapp_data.organizations_uid, + sum(webapp_data.num_ident_webapp) AS num_ident_webapp, + sum(webapp_data.num_monitor_webapp) AS num_monitor_webapp + FROM ( SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + COALESCE(webapps.num_ident_webapp, 0) AS num_ident_webapp, + COALESCE(webapps.num_monitor_webapp, 0) AS num_monitor_webapp + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid, + organizations.cyhy_db_name + FROM public.organizations) orgs + LEFT JOIN ( SELECT was_summary.was_org_id, + was_summary.webapp_count AS num_ident_webapp, + was_summary.webapp_count AS num_monitor_webapp + FROM public.was_summary) webapps ON ((orgs.cyhy_db_name = webapps.was_org_id)))) webapp_data + GROUP BY webapp_data.organizations_uid; + + +ALTER TABLE public.vw_dscore_was_webapp OWNER TO pe; + +-- +-- Name: VIEW vw_dscore_was_webapp; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_dscore_was_webapp IS 'Retrieves all the WAS webapp data needed to calculate the discovery score. Currently just using number of webapps as both identified/monitored for now.'; + + +-- +-- Name: vw_fceb_time_to_remediate; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_fceb_time_to_remediate AS + SELECT summary.month_seen, + summary.year_seen, + summary.organizations_uid, + summary.cyhy_db_name, + avg( + CASE + WHEN summary.is_kev THEN summary.remediation_time + ELSE NULL::interval + END) AS kev_ttr, + sum( + CASE + WHEN summary.is_kev THEN 1 + ELSE 0 + END) AS kev_count, + avg( + CASE + WHEN summary.is_critical THEN summary.remediation_time + ELSE NULL::interval + END) AS critical_ttr, + sum( + CASE + WHEN summary.is_critical THEN 1 + ELSE 0 + END) AS critical_count, + avg( + CASE + WHEN summary.is_high THEN summary.remediation_time + ELSE NULL::interval + END) AS high_ttr, + sum( + CASE + WHEN summary.is_high THEN 1 + ELSE 0 + END) AS high_count + FROM ( SELECT date_part('month'::text, ct.time_closed) AS month_seen, + date_part('year'::text, ct.time_closed) AS year_seen, + o.organizations_uid, + o.cyhy_db_name, + o.fceb, + CASE + WHEN ((ct.cvss_base_score >= (7)::double precision) AND (ct.cvss_base_score < (9)::double precision)) THEN true + ELSE false + END AS is_high, + CASE + WHEN ((ct.cvss_base_score >= (9)::double precision) AND (ct.cvss_base_score <= (10)::double precision)) THEN true + ELSE false + END AS is_critical, + CASE + WHEN (ct.cve IN ( SELECT cyhy_kevs.kev + FROM public.cyhy_kevs)) THEN true + ELSE false + END AS is_kev, + (ct.time_closed - ct.time_opened) AS remediation_time + FROM (public.cyhy_tickets ct + JOIN public.organizations o ON ((o.organizations_uid = ct.organizations_uid))) + WHERE (((o.fceb = true) OR (o.fceb_child = true)) AND (o.retired IS FALSE) AND (ct.false_positive IS FALSE) AND (ct.time_closed IS NOT NULL))) summary + GROUP BY summary.month_seen, summary.year_seen, summary.organizations_uid, summary.cyhy_db_name; + + +ALTER TABLE public.vw_fceb_time_to_remediate OWNER TO pe; + +-- +-- Name: vw_fceb_total_ips; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_fceb_total_ips AS + SELECT fceb_orgs.organizations_uid, + fceb_orgs.cyhy_db_name, + COALESCE(count(all_ips.ip), (0)::bigint) AS total_ips, + COALESCE(count( + CASE + WHEN ((all_ips.origin_cidr IS NULL) AND (all_ips.ip IS NOT NULL)) THEN 1 + ELSE NULL::integer + END), (0)::bigint) AS ip_discovered, + COALESCE(count( + CASE + WHEN (all_ips.origin_cidr IS NOT NULL) THEN 1 + ELSE NULL::integer + END), (0)::bigint) AS cidr_reported + FROM (( SELECT organizations.organizations_uid, + organizations.cyhy_db_name + FROM public.organizations + WHERE (((organizations.fceb = true) OR (organizations.fceb_child = true)) AND (organizations.retired IS FALSE))) fceb_orgs + LEFT JOIN ( SELECT cidrs_table.organizations_uid, + ips_table.ip, + ips_table.origin_cidr + FROM (public.ips ips_table + JOIN public.cidrs cidrs_table ON ((ips_table.origin_cidr = cidrs_table.cidr_uid))) + WHERE (ips_table.current IS TRUE) + UNION + SELECT rd.organizations_uid, + i.ip, + i.origin_cidr + FROM (((public.root_domains rd + JOIN public.sub_domains sd ON ((rd.root_domain_uid = sd.root_domain_uid))) + JOIN public.ips_subs si ON ((sd.sub_domain_uid = si.sub_domain_uid))) + JOIN public.ips i ON ((si.ip_hash = i.ip_hash))) + WHERE (i.current IS TRUE)) all_ips ON ((fceb_orgs.organizations_uid = all_ips.organizations_uid))) + GROUP BY fceb_orgs.organizations_uid, fceb_orgs.cyhy_db_name + ORDER BY COALESCE(count(all_ips.ip), (0)::bigint); + + +ALTER TABLE public.vw_fceb_total_ips OWNER TO pe; + +-- +-- Name: vw_iscore_orgs_ip_counts; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_iscore_orgs_ip_counts AS + SELECT fceb_list.organizations_uid, + fceb_list.cyhy_db_name, + COALESCE(agg_ips.num_ips, ('-1'::integer)::bigint) AS ip_count + FROM (( SELECT organizations.organizations_uid, + organizations.cyhy_db_name + FROM public.organizations + WHERE ((organizations.fceb = true) AND (organizations.retired = false))) fceb_list + LEFT JOIN ( SELECT fceb_ips.organizations_uid, + COALESCE(count(fceb_ips.ip), (0)::bigint) AS num_ips + FROM ( SELECT COALESCE(fceb.parent_org_uid, fceb.organizations_uid) AS organizations_uid, + all_ips.ip + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations + WHERE (((organizations.fceb = true) OR (organizations.fceb_child = true)) AND (organizations.retired = false))) fceb + LEFT JOIN ( SELECT cidrs_table.organizations_uid, + ips_table.ip + FROM (public.ips ips_table + JOIN public.cidrs cidrs_table ON ((ips_table.origin_cidr = cidrs_table.cidr_uid))) + UNION + SELECT rd.organizations_uid, + i.ip + FROM (((public.root_domains rd + JOIN public.sub_domains sd ON ((rd.root_domain_uid = sd.root_domain_uid))) + JOIN public.ips_subs si ON ((sd.sub_domain_uid = si.sub_domain_uid))) + JOIN public.ips i ON ((si.ip_hash = i.ip_hash)))) all_ips ON ((fceb.organizations_uid = all_ips.organizations_uid)))) fceb_ips + GROUP BY fceb_ips.organizations_uid) agg_ips ON ((fceb_list.organizations_uid = agg_ips.organizations_uid))) + ORDER BY agg_ips.num_ips; + + +ALTER TABLE public.vw_iscore_orgs_ip_counts OWNER TO pe; + +-- +-- Name: VIEW vw_iscore_orgs_ip_counts; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_iscore_orgs_ip_counts IS 'Retrieve list of all stakeholders PE reports on and the total numbrt of IPs associated with each one.'; + + +-- +-- Name: vw_iscore_pe_breach; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_iscore_pe_breach AS + SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + COALESCE(breach_data.date, '0001-01-01'::date) AS date, + COALESCE(breach_data.breach_count, 0) AS breach_count + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT DISTINCT vw_breachcomp.organizations_uid, + vw_breachcomp.breach_name, + date(vw_breachcomp.modified_date) AS date, + 1 AS breach_count + FROM public.vw_breachcomp) breach_data ON ((orgs.organizations_uid = breach_data.organizations_uid))); + + +ALTER TABLE public.vw_iscore_pe_breach OWNER TO pe; + +-- +-- Name: VIEW vw_iscore_pe_breach; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_iscore_pe_breach IS 'Retrieve all relevant PE breach data needed for the calculation of the I-Score'; + + +-- +-- Name: vw_iscore_pe_cred; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_iscore_pe_cred AS + SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + COALESCE(cred_data.date, '0001-01-01'::date) AS date, + COALESCE(cred_data.password_creds, (0)::bigint) AS password_creds, + COALESCE(cred_data.total_creds, (0)::bigint) AS total_creds + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT vw_breachcomp_credsbydate.organizations_uid, + vw_breachcomp_credsbydate.password_included AS password_creds, + (vw_breachcomp_credsbydate.no_password + vw_breachcomp_credsbydate.password_included) AS total_creds, + vw_breachcomp_credsbydate.mod_date AS date + FROM public.vw_breachcomp_credsbydate) cred_data ON ((orgs.organizations_uid = cred_data.organizations_uid))); + + +ALTER TABLE public.vw_iscore_pe_cred OWNER TO pe; + +-- +-- Name: VIEW vw_iscore_pe_cred; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_iscore_pe_cred IS 'Retrieve all relevant PE credential data needed for the calculation of the I-Score'; + + +-- +-- Name: vw_iscore_pe_darkweb; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_iscore_pe_darkweb AS + SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + 'MENTION'::text AS alert_type, + COALESCE(vw_darkweb_mentionsbydate.date, '0001-01-01'::date) AS date, + COALESCE(vw_darkweb_mentionsbydate."Count", (0)::bigint) AS "Count" + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN public.vw_darkweb_mentionsbydate ON ((orgs.organizations_uid = vw_darkweb_mentionsbydate.organizations_uid))) +UNION ALL + SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + 'POTENTIAL_THREAT'::text AS alert_type, + COALESCE(threats.date, '0001-01-01'::date) AS date, + COALESCE(threats."Count", 0) AS "Count" + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT vw_darkweb_potentialthreats.organizations_uid, + vw_darkweb_potentialthreats.date, + 1 AS "Count" + FROM public.vw_darkweb_potentialthreats) threats ON ((orgs.organizations_uid = threats.organizations_uid))) +UNION ALL + SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + 'INVITE_ONLY'::text AS alert_type, + COALESCE(invites.date, '0001-01-01'::date) AS date, + COALESCE(invites."Count", 0) AS "Count" + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT vw_darkweb_inviteonlymarkets.organizations_uid, + vw_darkweb_inviteonlymarkets.date, + 1 AS "Count" + FROM public.vw_darkweb_inviteonlymarkets) invites ON ((orgs.organizations_uid = invites.organizations_uid))) +UNION ALL + SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + 'ASSET'::text AS alert_type, + COALESCE(assets.date, '0001-01-01'::date) AS date, + COALESCE(assets."Count", 0) AS "Count" + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT vw_darkweb_assetalerts.organizations_uid, + vw_darkweb_assetalerts.date, + 1 AS "Count" + FROM public.vw_darkweb_assetalerts) assets ON ((orgs.organizations_uid = assets.organizations_uid))); + + +ALTER TABLE public.vw_iscore_pe_darkweb OWNER TO pe; + +-- +-- Name: VIEW vw_iscore_pe_darkweb; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_iscore_pe_darkweb IS 'Retrieve all relevant PE dark web data needed for the calculation of the I-Score'; + + +-- +-- Name: vw_shodanvulns_suspected; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_shodanvulns_suspected AS + SELECT svv.organizations_uid, + svv.organization, + svv.ip, + svv.port, + svv.protocol, + svv.type, + svv.name, + svv.potential_vulns, + svv.mitigation, + svv."timestamp", + svv.product, + svv.server, + svv.tags, + svv.domains, + svv.hostnames, + svv.isn, + svv.asn, + ds.name AS data_source + FROM (public.shodan_vulns svv + JOIN public.data_source ds ON ((ds.data_source_uid = svv.data_source_uid))) + WHERE (svv.is_verified = false); + + +ALTER TABLE public.vw_shodanvulns_suspected OWNER TO pe; + +-- +-- Name: vw_iscore_pe_protocol; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_iscore_pe_protocol AS + SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + protocol_data.port, + protocol_data.ip, + protocol_data.protocol, + protocol_data.protocol_type, + protocol_data.date + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + JOIN ( SELECT vw_shodanvulns_suspected.organizations_uid, + vw_shodanvulns_suspected.port, + vw_shodanvulns_suspected.ip, + vw_shodanvulns_suspected.protocol, + 'Unencrypted'::text AS protocol_type, + (vw_shodanvulns_suspected."timestamp")::date AS date + FROM public.vw_shodanvulns_suspected + WHERE (vw_shodanvulns_suspected.type = 'Insecure Protocol'::text) + UNION + SELECT vw_shodanvulns_suspected.organizations_uid, + vw_shodanvulns_suspected.port, + vw_shodanvulns_suspected.ip, + vw_shodanvulns_suspected.protocol, + 'Encrypted'::text AS protocol_type, + (vw_shodanvulns_suspected."timestamp")::date AS date + FROM public.vw_shodanvulns_suspected + WHERE (NOT (vw_shodanvulns_suspected.protocol IN ( SELECT DISTINCT vw_shodanvulns_suspected_1.protocol + FROM public.vw_shodanvulns_suspected vw_shodanvulns_suspected_1 + WHERE (vw_shodanvulns_suspected_1.type = 'Insecure Protocol'::text))))) protocol_data ON ((orgs.organizations_uid = protocol_data.organizations_uid))); + + +ALTER TABLE public.vw_iscore_pe_protocol OWNER TO pe; + +-- +-- Name: VIEW vw_iscore_pe_protocol; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_iscore_pe_protocol IS 'Retrieve all relevant PE protocol data for the calculation of the I-Score'; + + +-- +-- Name: vw_shodanvulns_verified; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_shodanvulns_verified AS + SELECT svv.organizations_uid, + svv.organization, + svv.ip, + svv.port, + svv.protocol, + svv."timestamp", + svv.cve, + svv.severity, + svv.cvss, + svv.summary, + svv.product, + svv.attack_vector, + svv.av_description, + svv.attack_complexity, + svv.ac_description, + svv.confidentiality_impact, + svv.ci_description, + svv.integrity_impact, + svv.ii_description, + svv.availability_impact, + svv.ai_description, + svv.tags, + svv.domains, + svv.hostnames, + svv.isn, + svv.asn, + ds.name AS data_source + FROM (public.shodan_vulns svv + JOIN public.data_source ds ON ((ds.data_source_uid = svv.data_source_uid))) + WHERE (svv.is_verified = true); + + +ALTER TABLE public.vw_shodanvulns_verified OWNER TO pe; + +-- +-- Name: vw_iscore_pe_vuln; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_iscore_pe_vuln AS + SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + all_vulns.date, + all_vulns.cve AS cve_name, + all_vulns.cvss_score + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT all_cves.organizations_uid, + all_cves.date, + all_cves.cve, + COALESCE(cve_info.cvss_3_0, cve_info.cvss_2_0) AS cvss_score + FROM (( SELECT DISTINCT vw_shodanvulns_suspected.organizations_uid, + date(vw_shodanvulns_suspected."timestamp") AS date, + unnest(vw_shodanvulns_suspected.potential_vulns) AS cve + FROM public.vw_shodanvulns_suspected + WHERE (vw_shodanvulns_suspected.type <> 'Insecure Protocol'::text) + UNION + SELECT DISTINCT vw_shodanvulns_verified.organizations_uid, + vw_shodanvulns_verified."timestamp" AS date, + vw_shodanvulns_verified.cve + FROM public.vw_shodanvulns_verified) all_cves + JOIN public.cve_info ON ((all_cves.cve = cve_info.cve_name)))) all_vulns ON ((orgs.organizations_uid = all_vulns.organizations_uid))); + + +ALTER TABLE public.vw_iscore_pe_vuln OWNER TO pe; + +-- +-- Name: VIEW vw_iscore_pe_vuln; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_iscore_pe_vuln IS 'Retrieve all relevant PE vulnerability data needed for the calculation of the I-Score'; + + +-- +-- Name: vw_iscore_vs_vuln; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_iscore_vs_vuln AS + SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + vs_vulns.cve_name, + vs_vulns.cvss_score + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT cyhy_tickets.organizations_uid, + cyhy_tickets.cve AS cve_name, + cyhy_tickets.cvss_base_score AS cvss_score + FROM public.cyhy_tickets + WHERE ((cyhy_tickets.false_positive = false) AND (cyhy_tickets.time_closed IS NULL))) vs_vulns ON ((orgs.organizations_uid = vs_vulns.organizations_uid))); + + +ALTER TABLE public.vw_iscore_vs_vuln OWNER TO pe; + +-- +-- Name: VIEW vw_iscore_vs_vuln; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_iscore_vs_vuln IS 'Retrieve all VS vulnerability data needed for the calculation of the I-Score'; + + +-- +-- Name: vw_iscore_vs_vuln_prev; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_iscore_vs_vuln_prev AS + SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + vs_vulns.cve_name, + vs_vulns.cvss_score, + vs_vulns.time_closed + FROM (( SELECT organizations.organizations_uid, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT cyhy_tickets.organizations_uid, + cyhy_tickets.cve AS cve_name, + cyhy_tickets.cvss_base_score AS cvss_score, + cyhy_tickets.time_closed + FROM public.cyhy_tickets + WHERE ((cyhy_tickets.false_positive = false) AND (cyhy_tickets.time_closed IS NOT NULL))) vs_vulns ON ((orgs.organizations_uid = vs_vulns.organizations_uid))); + + +ALTER TABLE public.vw_iscore_vs_vuln_prev OWNER TO pe; + +-- +-- Name: VIEW vw_iscore_vs_vuln_prev; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_iscore_vs_vuln_prev IS 'Retrieve all historical (previous period) VS vuln info for the calculation of the I-Score. Filter results for time_closed within previous report period.'; + + +-- +-- Name: was_findings; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.was_findings ( + finding_uid uuid NOT NULL, + finding_type character varying, + webapp_id integer, + was_org_id text, + owasp_category character varying, + severity character varying, + times_detected integer, + base_score double precision, + temporal_score double precision, + fstatus character varying, + last_detected date, + first_detected date +); + + +ALTER TABLE public.was_findings OWNER TO pe; + +-- +-- Name: vw_iscore_was_vuln; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_iscore_was_vuln AS + SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + was_vulns.date, + was_vulns.cve_name, + was_vulns.cvss_score, + was_vulns.owasp_category + FROM (( SELECT organizations.organizations_uid, + organizations.cyhy_db_name, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT was_findings.was_org_id AS org_id, + was_findings.last_detected AS date, + ''::text AS cve_name, + was_findings.base_score AS cvss_score, + was_findings.owasp_category + FROM public.was_findings + WHERE (((was_findings.finding_type)::text = 'VULNERABILITY'::text) AND ((was_findings.fstatus)::text = ANY ((ARRAY['NEW'::character varying, 'ACTIVE'::character varying, 'REOPENED'::character varying])::text[])))) was_vulns ON ((orgs.cyhy_db_name = was_vulns.org_id))); + + +ALTER TABLE public.vw_iscore_was_vuln OWNER TO pe; + +-- +-- Name: VIEW vw_iscore_was_vuln; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_iscore_was_vuln IS 'Retrieve all relevant WAS vulnerability data needed for the calculation of the I-Score'; + + +-- +-- Name: was_history; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.was_history ( + was_org_id text NOT NULL, + date_scanned date NOT NULL, + vuln_cnt integer, + vuln_webapp_cnt integer, + web_app_cnt integer, + high_rem_time integer, + crit_rem_time integer, + crit_vuln_cnt integer, + high_vuln_cnt integer, + report_period date, + high_rem_cnt integer, + crit_rem_cnt integer +); + + +ALTER TABLE public.was_history OWNER TO pe; + +-- +-- Name: vw_iscore_was_vuln_prev; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_iscore_was_vuln_prev AS + SELECT COALESCE(orgs.parent_org_uid, orgs.organizations_uid) AS organizations_uid, + was_vulns_prev.vuln_cnt AS was_total_vulns_prev, + was_vulns_prev.date + FROM (( SELECT organizations.organizations_uid, + organizations.cyhy_db_name, + organizations.parent_org_uid + FROM public.organizations) orgs + LEFT JOIN ( SELECT was_history.was_org_id AS org_id, + was_history.vuln_cnt, + was_history.date_scanned AS date + FROM public.was_history) was_vulns_prev ON ((orgs.cyhy_db_name = was_vulns_prev.org_id))); + + +ALTER TABLE public.vw_iscore_was_vuln_prev OWNER TO pe; + +-- +-- Name: VIEW vw_iscore_was_vuln_prev; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_iscore_was_vuln_prev IS 'Retrieve historical (previous report period) WAS vuln data for I-Score calculation. Filter results by previous report period range.'; + + +-- +-- Name: vw_orgs_all_ips; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_orgs_all_ips AS + SELECT reported_orgs.organizations_uid, + reported_orgs.cyhy_db_name, + array_agg(all_ips.ip) AS ip_addresses + FROM (( SELECT organizations.organizations_uid, + organizations.cyhy_db_name + FROM public.organizations + WHERE (organizations.report_on = true)) reported_orgs + LEFT JOIN ( SELECT cidrs_table.organizations_uid, + ips_table.ip + FROM (public.ips ips_table + JOIN public.cidrs cidrs_table ON ((ips_table.origin_cidr = cidrs_table.cidr_uid))) + UNION + SELECT rd.organizations_uid, + i.ip + FROM (((public.root_domains rd + JOIN public.sub_domains sd ON ((rd.root_domain_uid = sd.root_domain_uid))) + JOIN public.ips_subs si ON ((sd.sub_domain_uid = si.sub_domain_uid))) + JOIN public.ips i ON ((si.ip_hash = i.ip_hash)))) all_ips ON ((reported_orgs.organizations_uid = all_ips.organizations_uid))) + GROUP BY reported_orgs.organizations_uid, reported_orgs.cyhy_db_name + ORDER BY reported_orgs.organizations_uid, reported_orgs.cyhy_db_name; + + +ALTER TABLE public.vw_orgs_all_ips OWNER TO pe; + +-- +-- Name: vw_orgs_attacksurface; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_orgs_attacksurface AS + SELECT domains_view.organizations_uid, + domains_view.cyhy_db_name, + ports_view.num_ports, + domains_view.num_root_domain, + domains_view.num_sub_domain, + ips_view.num_ips, + cidrs_view.count AS num_cidrs, + port_prot_view.port_protocol AS num_ports_protocols, + soft_view.num_software, + for_ips_view.num_foreign_ips + FROM ((((((public.vw_orgs_total_domains domains_view + JOIN public.vw_orgs_total_ips ips_view ON ((domains_view.organizations_uid = ips_view.organizations_uid))) + JOIN public.vw_orgs_total_ports ports_view ON ((ips_view.organizations_uid = ports_view.organizations_uid))) + JOIN public.vw_orgs_total_cidrs cidrs_view ON ((cidrs_view.organizations_uid = ips_view.organizations_uid))) + JOIN public.vw_orgs_total_ports_protocols port_prot_view ON ((port_prot_view.organizations_uid = ports_view.organizations_uid))) + JOIN public.vw_orgs_total_software soft_view ON ((soft_view.organizations_uid = port_prot_view.organizations_uid))) + JOIN public.vw_orgs_total_foreign_ips for_ips_view ON ((for_ips_view.organizations_uid = soft_view.organizations_uid))) + ORDER BY ips_view.num_ips, domains_view.num_sub_domain, domains_view.num_root_domain, ports_view.num_ports; + + +ALTER TABLE public.vw_orgs_attacksurface OWNER TO pe; + +-- +-- Name: VIEW vw_orgs_attacksurface; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_orgs_attacksurface IS 'gets all attack surface related metrics for the orgs PE reports on'; + + +-- +-- Name: vw_orgs_contact_info; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_orgs_contact_info AS + SELECT organizations.organizations_uid, + organizations.cyhy_db_name, + organizations.name AS agency_name, + cyhy_contacts.contact_type, + cyhy_contacts.name AS contact_name, + cyhy_contacts.email, + replace(cyhy_contacts.phone, '.'::text, '-'::text) AS phone, + cyhy_contacts.date_pulled + FROM (public.organizations + JOIN public.cyhy_contacts ON ((organizations.cyhy_db_name = cyhy_contacts.org_id))) + ORDER BY organizations.cyhy_db_name, cyhy_contacts.contact_type; + + +ALTER TABLE public.vw_orgs_contact_info OWNER TO pe; + +-- +-- Name: VIEW vw_orgs_contact_info; Type: COMMENT; Schema: public; Owner: pe +-- + +COMMENT ON VIEW public.vw_orgs_contact_info IS 'Gets the contact info for all PE organizations'; + + +-- +-- Name: vw_scorecard_orgs; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_scorecard_orgs AS + WITH RECURSIVE org_queries AS ( + WITH RECURSIVE sector_queries AS ( + SELECT s.sector_uid, + s.id, + s.acronym, + s.name, + s.email, + s.contact_name, + s.retired, + s.first_seen, + s.last_seen, + s.run_scorecards, + s.password, + s.parent_sector_uid + FROM public.sectors s + WHERE (s.run_scorecards = true) + UNION ALL + SELECT e.sector_uid, + e.id, + e.acronym, + e.name, + e.email, + e.contact_name, + e.retired, + e.first_seen, + e.last_seen, + e.run_scorecards, + e.password, + e.parent_sector_uid + FROM (public.sectors e + JOIN sector_queries c ON ((e.parent_sector_uid = c.sector_uid))) + ) + SELECT o.organizations_uid, + o.cyhy_db_name, + cq.id AS sector_id, + o.parent_org_uid, + o.retired, + o.receives_cyhy_report, + o.is_parent, + o.fceb, + o.fceb_child + FROM ((sector_queries cq + JOIN public.sectors_orgs so ON ((so.sector_uid = cq.sector_uid))) + JOIN public.organizations o ON ((o.organizations_uid = so.organizations_uid))) + UNION ALL + SELECT co.organizations_uid, + co.cyhy_db_name, + oq_1.sector_id, + co.parent_org_uid, + co.retired, + co.receives_cyhy_report, + co.is_parent, + co.fceb, + co.fceb_child + FROM (public.organizations co + JOIN org_queries oq_1 ON ((oq_1.organizations_uid = co.parent_org_uid))) + ) + SELECT DISTINCT oq.organizations_uid, + oq.cyhy_db_name, + oq.sector_id, + oq.parent_org_uid, + oq.retired, + oq.receives_cyhy_report, + oq.is_parent, + oq.fceb, + oq.fceb_child + FROM org_queries oq; + + +ALTER TABLE public.vw_scorecard_orgs OWNER TO pe; + +-- +-- Name: vw_sector_time_to_remediate; Type: VIEW; Schema: public; Owner: pe +-- + +CREATE VIEW public.vw_sector_time_to_remediate AS + SELECT summary.month_seen, + summary.year_seen, + summary.sector_id, + summary.organizations_uid, + summary.cyhy_db_name, + avg( + CASE + WHEN summary.is_kev THEN summary.remediation_time + ELSE NULL::interval + END) AS kev_ttr, + sum( + CASE + WHEN summary.is_kev THEN 1 + ELSE 0 + END) AS kev_count, + avg( + CASE + WHEN summary.is_critical THEN summary.remediation_time + ELSE NULL::interval + END) AS critical_ttr, + sum( + CASE + WHEN summary.is_critical THEN 1 + ELSE 0 + END) AS critical_count, + avg( + CASE + WHEN summary.is_high THEN summary.remediation_time + ELSE NULL::interval + END) AS high_ttr, + sum( + CASE + WHEN summary.is_high THEN 1 + ELSE 0 + END) AS high_count + FROM ( SELECT date_part('month'::text, ct.time_closed) AS month_seen, + date_part('year'::text, ct.time_closed) AS year_seen, + o.organizations_uid, + o.cyhy_db_name, + vso.sector_id, + o.fceb, + CASE + WHEN ((ct.cvss_base_score >= (7)::double precision) AND (ct.cvss_base_score < (9)::double precision)) THEN true + ELSE false + END AS is_high, + CASE + WHEN ((ct.cvss_base_score >= (9)::double precision) AND (ct.cvss_base_score <= (10)::double precision)) THEN true + ELSE false + END AS is_critical, + CASE + WHEN (ct.cve IN ( SELECT cyhy_kevs.kev + FROM public.cyhy_kevs)) THEN true + ELSE false + END AS is_kev, + (ct.time_closed - ct.time_opened) AS remediation_time + FROM ((public.cyhy_tickets ct + JOIN public.organizations o ON ((o.organizations_uid = ct.organizations_uid))) + JOIN public.vw_scorecard_orgs vso ON ((o.organizations_uid = vso.organizations_uid))) + WHERE ((o.retired IS FALSE) AND (ct.false_positive IS FALSE) AND (ct.time_closed IS NOT NULL))) summary + GROUP BY summary.month_seen, summary.year_seen, summary.sector_id, summary.organizations_uid, summary.cyhy_db_name; + + +ALTER TABLE public.vw_sector_time_to_remediate OWNER TO pe; + +-- +-- Name: was_map; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.was_map ( + was_org_id text NOT NULL, + pe_org_id uuid, + report_on boolean, + last_scanned date +); + + +ALTER TABLE public.was_map OWNER TO pe; + +-- +-- Name: was_tracker_customerdata; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.was_tracker_customerdata ( + customer_id uuid DEFAULT public.uuid_generate_v1() NOT NULL, + tag text NOT NULL, + customer_name text NOT NULL, + testing_sector text NOT NULL, + ci_type text NOT NULL, + jira_ticket text, + ticket text NOT NULL, + next_scheduled text NOT NULL, + last_scanned text NOT NULL, + frequency text NOT NULL, + comments_notes text NOT NULL, + was_report_poc text NOT NULL, + was_report_email text NOT NULL, + onboarding_date text NOT NULL, + no_of_web_apps integer NOT NULL, + no_web_apps_last_updated text, + elections boolean, + fceb boolean, + special_report boolean, + report_password text, + child_tags text +); + + +ALTER TABLE public.was_tracker_customerdata OWNER TO pe; + +-- +-- Name: web_assets; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.web_assets ( + asset_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + asset_type text NOT NULL, + asset text NOT NULL, + ip_type text, + verified boolean, + organizations_uid uuid NOT NULL, + asset_origin text, + report_on boolean DEFAULT true, + last_scanned timestamp without time zone, + report_status_reason text, + data_source_uid uuid NOT NULL +); + + +ALTER TABLE public.web_assets OWNER TO pe; + +-- +-- Name: weekly_statuses; Type: TABLE; Schema: public; Owner: pe +-- + +CREATE TABLE public.weekly_statuses ( + weekly_status_uid uuid DEFAULT public.uuid_generate_v1() NOT NULL, + user_status text NOT NULL, + key_accomplishments text, + ongoing_task text NOT NULL, + upcoming_task text NOT NULL, + obstacles text, + non_standard_meeting text, + deliverables text, + pto text, + week_ending date NOT NULL, + notes text, + "statusComplete" integer +); + + +ALTER TABLE public.weekly_statuses OWNER TO pe; + +-- +-- Name: Users Users_api_key_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public."Users" + ADD CONSTRAINT "Users_api_key_key" UNIQUE (api_key); + + +-- +-- Name: Users Users_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public."Users" + ADD CONSTRAINT "Users_pkey" PRIMARY KEY (id); + + +-- +-- Name: alembic_version alembic_version_pkc; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.alembic_version + ADD CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num); + + +-- +-- Name: alerts alerts_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.alerts + ADD CONSTRAINT alerts_pkey PRIMARY KEY (alerts_uid); + + +-- +-- Name: alerts alerts_sixgill_id_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.alerts + ADD CONSTRAINT alerts_sixgill_id_key UNIQUE (sixgill_id); + + +-- +-- Name: alias alias_alias_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.alias + ADD CONSTRAINT alias_alias_key UNIQUE (alias); + + +-- +-- Name: alias alias_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.alias + ADD CONSTRAINT alias_pkey PRIMARY KEY (alias_uid); + + +-- +-- Name: asset_headers asset_headers_organizations_uid_sub_url_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.asset_headers + ADD CONSTRAINT asset_headers_organizations_uid_sub_url_key UNIQUE (organizations_uid, sub_url); + + +-- +-- Name: asset_headers asset_headers_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.asset_headers + ADD CONSTRAINT asset_headers_pkey PRIMARY KEY (_id); + + +-- +-- Name: auth_group auth_group_name_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_group + ADD CONSTRAINT auth_group_name_key UNIQUE (name); + + +-- +-- Name: auth_group_permissions auth_group_permissions_group_id_permission_id_0cd325b0_uniq; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_group_permissions + ADD CONSTRAINT auth_group_permissions_group_id_permission_id_0cd325b0_uniq UNIQUE (group_id, permission_id); + + +-- +-- Name: auth_group_permissions auth_group_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_group_permissions + ADD CONSTRAINT auth_group_permissions_pkey PRIMARY KEY (id); + + +-- +-- Name: auth_group auth_group_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_group + ADD CONSTRAINT auth_group_pkey PRIMARY KEY (id); + + +-- +-- Name: auth_permission auth_permission_content_type_id_codename_01ab375a_uniq; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_permission + ADD CONSTRAINT auth_permission_content_type_id_codename_01ab375a_uniq UNIQUE (content_type_id, codename); + + +-- +-- Name: auth_permission auth_permission_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_permission + ADD CONSTRAINT auth_permission_pkey PRIMARY KEY (id); + + +-- +-- Name: auth_user_groups auth_user_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_user_groups + ADD CONSTRAINT auth_user_groups_pkey PRIMARY KEY (id); + + +-- +-- Name: auth_user_groups auth_user_groups_user_id_group_id_94350c0c_uniq; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_user_groups + ADD CONSTRAINT auth_user_groups_user_id_group_id_94350c0c_uniq UNIQUE (user_id, group_id); + + +-- +-- Name: auth_user auth_user_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_user + ADD CONSTRAINT auth_user_pkey PRIMARY KEY (id); + + +-- +-- Name: auth_user_user_permissions auth_user_user_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_user_user_permissions + ADD CONSTRAINT auth_user_user_permissions_pkey PRIMARY KEY (id); + + +-- +-- Name: auth_user_user_permissions auth_user_user_permissions_user_id_permission_id_14a6b632_uniq; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_user_user_permissions + ADD CONSTRAINT auth_user_user_permissions_user_id_permission_id_14a6b632_uniq UNIQUE (user_id, permission_id); + + +-- +-- Name: auth_user auth_user_username_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_user + ADD CONSTRAINT auth_user_username_key UNIQUE (username); + + +-- +-- Name: cidrs cidrs_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cidrs + ADD CONSTRAINT cidrs_uid_pkey PRIMARY KEY (cidr_uid); + + +-- +-- Name: credential_exposures credential_exposure_unique_constraint; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.credential_exposures + ADD CONSTRAINT credential_exposure_unique_constraint UNIQUE (breach_name, email); + + +-- +-- Name: cve_info cve_info_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cve_info + ADD CONSTRAINT cve_info_pkey PRIMARY KEY (cve_uuid); + + +-- +-- Name: cve_info cve_name_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cve_info + ADD CONSTRAINT cve_name_key UNIQUE (cve_name); + + +-- +-- Name: cyhy_certs cyhy_certs_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_certs + ADD CONSTRAINT cyhy_certs_uid_pkey PRIMARY KEY (cyhy_certs_uid); + + +-- +-- Name: cyhy_contacts cyhy_contacts_org_id_contact_type_email_name_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_contacts + ADD CONSTRAINT cyhy_contacts_org_id_contact_type_email_name_key UNIQUE (org_id, contact_type, email, name); + + +-- +-- Name: cyhy_contacts cyhy_contacts_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_contacts + ADD CONSTRAINT cyhy_contacts_pkey PRIMARY KEY (_id); + + +-- +-- Name: cyhy_db_assets cyhy_db_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_db_assets + ADD CONSTRAINT cyhy_db_assets_pkey PRIMARY KEY (_id); + + +-- +-- Name: cyhy_db_assets cyhy_db_assets_unique_constraint; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_db_assets + ADD CONSTRAINT cyhy_db_assets_unique_constraint UNIQUE (org_id, network); + + +-- +-- Name: cyhy_domains cyhy_domains_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_domains + ADD CONSTRAINT cyhy_domains_uid_pkey PRIMARY KEY (cyhy_domains_uid); + + +-- +-- Name: cyhy_https_scan cyhy_https_scan_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_https_scan + ADD CONSTRAINT cyhy_https_scan_uid_pkey PRIMARY KEY (cyhy_https_scan_uid); + + +-- +-- Name: cyhy_kevs cyhy_kevd_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_kevs + ADD CONSTRAINT cyhy_kevd_uid_pkey PRIMARY KEY (cyhy_kevs_uid); + + +-- +-- Name: cyhy_port_scans_new cyhy_port_scans_new_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_port_scans_new + ADD CONSTRAINT cyhy_port_scans_new_uid_pkey PRIMARY KEY (cyhy_port_scans_uid); + + +-- +-- Name: cyhy_port_scans cyhy_port_scans_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_port_scans + ADD CONSTRAINT cyhy_port_scans_uid_pkey PRIMARY KEY (cyhy_port_scans_uid); + + +-- +-- Name: cyhy_snapshots cyhy_snapshots_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_snapshots + ADD CONSTRAINT cyhy_snapshots_uid_pkey PRIMARY KEY (cyhy_snapshots_uid); + + +-- +-- Name: cyhy_sslyze cyhy_sslyze_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_sslyze + ADD CONSTRAINT cyhy_sslyze_uid_pkey PRIMARY KEY (cyhy_sslyze_uid); + + +-- +-- Name: cyhy_tickets cyhy_ticket_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_tickets + ADD CONSTRAINT cyhy_ticket_uid_pkey PRIMARY KEY (cyhy_tickets_uid); + + +-- +-- Name: cyhy_trustymail cyhy_trustymail_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_trustymail + ADD CONSTRAINT cyhy_trustymail_uid_pkey PRIMARY KEY (cyhy_trustymail_uid); + + +-- +-- Name: cyhy_vuln_scans cyhy_vuln_scans_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_vuln_scans + ADD CONSTRAINT cyhy_vuln_scans_uid_pkey PRIMARY KEY (cyhy_vuln_scans_uid); + + +-- +-- Name: dataAPI_apiuser dataAPI_apiuser_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public."dataAPI_apiuser" + ADD CONSTRAINT "dataAPI_apiuser_pkey" PRIMARY KEY (id); + + +-- +-- Name: dataAPI_apiuser dataAPI_apiuser_user_id_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public."dataAPI_apiuser" + ADD CONSTRAINT "dataAPI_apiuser_user_id_key" UNIQUE (user_id); + + +-- +-- Name: data_source data_source_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.data_source + ADD CONSTRAINT data_source_pkey PRIMARY KEY (data_source_uid); + + +-- +-- Name: django_admin_log django_admin_log_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.django_admin_log + ADD CONSTRAINT django_admin_log_pkey PRIMARY KEY (id); + + +-- +-- Name: django_content_type django_content_type_app_label_model_76bd3d3b_uniq; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.django_content_type + ADD CONSTRAINT django_content_type_app_label_model_76bd3d3b_uniq UNIQUE (app_label, model); + + +-- +-- Name: django_content_type django_content_type_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.django_content_type + ADD CONSTRAINT django_content_type_pkey PRIMARY KEY (id); + + +-- +-- Name: django_migrations django_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.django_migrations + ADD CONSTRAINT django_migrations_pkey PRIMARY KEY (id); + + +-- +-- Name: django_session django_session_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.django_session + ADD CONSTRAINT django_session_pkey PRIMARY KEY (session_key); + + +-- +-- Name: dns_records dns_records_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.dns_records + ADD CONSTRAINT dns_records_pkey PRIMARY KEY (dns_record_uid); + + +-- +-- Name: domain_alerts domain_alerts_alert_type_sub_domain_uid_date_new_value_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.domain_alerts + ADD CONSTRAINT domain_alerts_alert_type_sub_domain_uid_date_new_value_key UNIQUE (alert_type, sub_domain_uid, date, new_value); + + +-- +-- Name: domain_alerts domain_alerts_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.domain_alerts + ADD CONSTRAINT domain_alerts_pkey PRIMARY KEY (domain_alert_uid); + + +-- +-- Name: domain_permutations domain_permutations_domain_permutation_organizations_uid_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.domain_permutations + ADD CONSTRAINT domain_permutations_domain_permutation_organizations_uid_key UNIQUE (domain_permutation, organizations_uid); + + +-- +-- Name: dotgov_domains dotgov_uid_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.dotgov_domains + ADD CONSTRAINT dotgov_uid_pkey PRIMARY KEY (dotgov_uid); + + +-- +-- Name: executives executives_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.executives + ADD CONSTRAINT executives_pkey PRIMARY KEY (executives_uid); + + +-- +-- Name: credential_breaches hibp_breaches_breach_name_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.credential_breaches + ADD CONSTRAINT hibp_breaches_breach_name_key UNIQUE (breach_name); + + +-- +-- Name: credential_breaches hibp_breaches_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.credential_breaches + ADD CONSTRAINT hibp_breaches_pkey PRIMARY KEY (credential_breaches_uid); + + +-- +-- Name: credential_exposures hibp_exposed_credentials_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.credential_exposures + ADD CONSTRAINT hibp_exposed_credentials_pkey PRIMARY KEY (credential_exposures_uid); + + +-- +-- Name: ips ip_unique; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.ips + ADD CONSTRAINT ip_unique UNIQUE (ip); + + +-- +-- Name: ips ips_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.ips + ADD CONSTRAINT ips_pkey PRIMARY KEY (ip_hash); + + +-- +-- Name: ips_subs ips_subs_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.ips_subs + ADD CONSTRAINT ips_subs_pkey PRIMARY KEY (ips_subs_uid); + + +-- +-- Name: mentions mentions_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.mentions + ADD CONSTRAINT mentions_pkey PRIMARY KEY (mentions_uid); + + +-- +-- Name: mentions mentions_sixgill_mention_id_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.mentions + ADD CONSTRAINT mentions_sixgill_mention_id_key UNIQUE (sixgill_mention_id); + + +-- +-- Name: cyhy_port_scans_new new_unique_cyhy_port_scans; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_port_scans_new + ADD CONSTRAINT new_unique_cyhy_port_scans UNIQUE (ip, port, service_name, report_period); + + +-- +-- Name: org_type org_type_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.org_type + ADD CONSTRAINT org_type_pkey PRIMARY KEY (org_type_uid); + + +-- +-- Name: organizations organizations_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.organizations + ADD CONSTRAINT organizations_pkey PRIMARY KEY (organizations_uid); + + +-- +-- Name: pshtt_results pshtt_results_organizations_uid_sub_domain_uid_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.pshtt_results + ADD CONSTRAINT pshtt_results_organizations_uid_sub_domain_uid_key UNIQUE (organizations_uid, sub_domain_uid); + + +-- +-- Name: pshtt_results pshtt_results_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.pshtt_results + ADD CONSTRAINT pshtt_results_pkey PRIMARY KEY (pshtt_results_uid); + + +-- +-- Name: report_summary_stats report_summary_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.report_summary_stats + ADD CONSTRAINT report_summary_stats_pkey PRIMARY KEY (report_uid); + + +-- +-- Name: root_domains root_domains_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.root_domains + ADD CONSTRAINT root_domains_pkey PRIMARY KEY (root_domain_uid); + + +-- +-- Name: root_domains root_domains_root_domain_organizations_uid_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.root_domains + ADD CONSTRAINT root_domains_root_domain_organizations_uid_key UNIQUE (root_domain, organizations_uid); + + +-- +-- Name: scorecard_summary_stats scorecard_summary_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.scorecard_summary_stats + ADD CONSTRAINT scorecard_summary_stats_pkey PRIMARY KEY (scorecard_summary_uid); + + +-- +-- Name: sectors_orgs sectors_orgs_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.sectors_orgs + ADD CONSTRAINT sectors_orgs_pkey PRIMARY KEY (sector_org_uid); + + +-- +-- Name: sectors sectors_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.sectors + ADD CONSTRAINT sectors_pkey PRIMARY KEY (sector_uid); + + +-- +-- Name: shodan_assets shodan_assets_organizations_uid_ip_port_protocol_timestamp_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.shodan_assets + ADD CONSTRAINT shodan_assets_organizations_uid_ip_port_protocol_timestamp_key UNIQUE (organizations_uid, ip, port, protocol, "timestamp"); + + +-- +-- Name: shodan_assets shodan_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.shodan_assets + ADD CONSTRAINT shodan_assets_pkey PRIMARY KEY (shodan_asset_uid); + + +-- +-- Name: old_shodan_insecure_protocols_unverified_vulns shodan_insecure_protocols_unv_organizations_uid_ip_port_pro_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.old_shodan_insecure_protocols_unverified_vulns + ADD CONSTRAINT shodan_insecure_protocols_unv_organizations_uid_ip_port_pro_key UNIQUE (organizations_uid, ip, port, protocol, "timestamp"); + + +-- +-- Name: old_shodan_insecure_protocols_unverified_vulns shodan_insecure_protocols_unverified_vulns_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.old_shodan_insecure_protocols_unverified_vulns + ADD CONSTRAINT shodan_insecure_protocols_unverified_vulns_pkey PRIMARY KEY (insecure_product_uid); + + +-- +-- Name: shodan_vulns shodan_verified_vulns_organizations_uid_ip_port_protocol_ti_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.shodan_vulns + ADD CONSTRAINT shodan_verified_vulns_organizations_uid_ip_port_protocol_ti_key UNIQUE (organizations_uid, ip, port, protocol, "timestamp"); + + +-- +-- Name: shodan_vulns shodan_verified_vulns_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.shodan_vulns + ADD CONSTRAINT shodan_verified_vulns_pkey PRIMARY KEY (shodan_vuln_uid); + + +-- +-- Name: sub_domains sub_domains_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.sub_domains + ADD CONSTRAINT sub_domains_pkey PRIMARY KEY (sub_domain_uid); + + +-- +-- Name: sub_domains sub_domains_un; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.sub_domains + ADD CONSTRAINT sub_domains_un UNIQUE (sub_domain, root_domain_uid); + + +-- +-- Name: team_members team_members_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.team_members + ADD CONSTRAINT team_members_pkey PRIMARY KEY (team_member_uid); + + +-- +-- Name: top_cves top_cves_cve_id_date_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.top_cves + ADD CONSTRAINT top_cves_cve_id_date_key UNIQUE (cve_id, date); + + +-- +-- Name: top_cves top_cves_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.top_cves + ADD CONSTRAINT top_cves_pkey PRIMARY KEY (top_cves_uid); + + +-- +-- Name: topic_totals topic_totals_pk; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.topic_totals + ADD CONSTRAINT topic_totals_pk PRIMARY KEY (cound_uuid); + + +-- +-- Name: cyhy_certs unique_cyhy_cert; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_certs + ADD CONSTRAINT unique_cyhy_cert UNIQUE (cyhy_id, organizations_uid, sub_domain_uid); + + +-- +-- Name: organizations unique_cyhy_db_name; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.organizations + ADD CONSTRAINT unique_cyhy_db_name UNIQUE (cyhy_db_name); + + +-- +-- Name: cyhy_domains unique_cyhy_domain; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_domains + ADD CONSTRAINT unique_cyhy_domain UNIQUE (domain); + + +-- +-- Name: cyhy_https_scan unique_cyhy_https_scan; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_https_scan + ADD CONSTRAINT unique_cyhy_https_scan UNIQUE (cyhy_id); + + +-- +-- Name: cyhy_kevs unique_cyhy_kevs; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_kevs + ADD CONSTRAINT unique_cyhy_kevs UNIQUE (kev); + + +-- +-- Name: cyhy_port_scans unique_cyhy_port_scans; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_port_scans + ADD CONSTRAINT unique_cyhy_port_scans UNIQUE (cyhy_id); + + +-- +-- Name: cyhy_snapshots unique_cyhy_snapshot; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_snapshots + ADD CONSTRAINT unique_cyhy_snapshot UNIQUE (cyhy_id); + + +-- +-- Name: cyhy_tickets unique_cyhy_ticket; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_tickets + ADD CONSTRAINT unique_cyhy_ticket UNIQUE (cyhy_id); + + +-- +-- Name: cyhy_vuln_scans unique_cyhy_vuln_scans; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_vuln_scans + ADD CONSTRAINT unique_cyhy_vuln_scans UNIQUE (cyhy_id); + + +-- +-- Name: dotgov_domains unique_domain; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.dotgov_domains + ADD CONSTRAINT unique_domain UNIQUE (domain_name); + + +-- +-- Name: sectors unique_id; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.sectors + ADD CONSTRAINT unique_id UNIQUE (id); + + +-- +-- Name: org_id_map unique_id_map_unique; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.org_id_map + ADD CONSTRAINT unique_id_map_unique UNIQUE (cyhy_id, pe_org_id); + + +-- +-- Name: ips_subs unique_ips_subs_unique; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.ips_subs + ADD CONSTRAINT unique_ips_subs_unique UNIQUE (ip_hash, sub_domain_uid); + + +-- +-- Name: cidrs unique_org_cidr; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cidrs + ADD CONSTRAINT unique_org_cidr UNIQUE (organizations_uid, network); + + +-- +-- Name: report_summary_stats unique_report; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.report_summary_stats + ADD CONSTRAINT unique_report UNIQUE (organizations_uid, start_date); + + +-- +-- Name: scorecard_summary_stats unique_scorecard; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.scorecard_summary_stats + ADD CONSTRAINT unique_scorecard UNIQUE (organizations_uid, start_date, sector_name); + + +-- +-- Name: sectors_orgs unique_sector_org; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.sectors_orgs + ADD CONSTRAINT unique_sector_org UNIQUE (sector_uid, organizations_uid); + + +-- +-- Name: unique_software unique_software_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.unique_software + ADD CONSTRAINT unique_software_pkey PRIMARY KEY (_id); + + +-- +-- Name: cyhy_sslyze unique_sslyze; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_sslyze + ADD CONSTRAINT unique_sslyze UNIQUE (cyhy_id); + + +-- +-- Name: cyhy_trustymail unique_trustymail; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_trustymail + ADD CONSTRAINT unique_trustymail UNIQUE (cyhy_id); + + +-- +-- Name: was_findings was_findings_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.was_findings + ADD CONSTRAINT was_findings_pkey PRIMARY KEY (finding_uid); + + +-- +-- Name: was_history was_history_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.was_history + ADD CONSTRAINT was_history_pkey PRIMARY KEY (was_org_id, date_scanned); + + +-- +-- Name: was_map was_map_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.was_map + ADD CONSTRAINT was_map_pkey PRIMARY KEY (was_org_id); + + +-- +-- Name: was_summary was_summary_was_org_id_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.was_summary + ADD CONSTRAINT was_summary_was_org_id_key UNIQUE (was_org_id); + + +-- +-- Name: was_tracker_customerdata was_tracker_customerdata_pk; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.was_tracker_customerdata + ADD CONSTRAINT was_tracker_customerdata_pk PRIMARY KEY (customer_id); + + +-- +-- Name: web_assets web_assets_asset_organizations_uid_key; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.web_assets + ADD CONSTRAINT web_assets_asset_organizations_uid_key UNIQUE (asset, organizations_uid); + + +-- +-- Name: web_assets web_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.web_assets + ADD CONSTRAINT web_assets_pkey PRIMARY KEY (asset_uid); + + +-- +-- Name: weekly_statuses weekly_statuses_pkey; Type: CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.weekly_statuses + ADD CONSTRAINT weekly_statuses_pkey PRIMARY KEY (weekly_status_uid); + + +-- +-- Name: auth_group_name_a6ea08ec_like; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX auth_group_name_a6ea08ec_like ON public.auth_group USING btree (name varchar_pattern_ops); + + +-- +-- Name: auth_group_permissions_group_id_b120cbf9; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX auth_group_permissions_group_id_b120cbf9 ON public.auth_group_permissions USING btree (group_id); + + +-- +-- Name: auth_group_permissions_permission_id_84c5c92e; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX auth_group_permissions_permission_id_84c5c92e ON public.auth_group_permissions USING btree (permission_id); + + +-- +-- Name: auth_permission_content_type_id_2f476e4b; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX auth_permission_content_type_id_2f476e4b ON public.auth_permission USING btree (content_type_id); + + +-- +-- Name: auth_user_groups_group_id_97559544; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX auth_user_groups_group_id_97559544 ON public.auth_user_groups USING btree (group_id); + + +-- +-- Name: auth_user_groups_user_id_6a12ed8b; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX auth_user_groups_user_id_6a12ed8b ON public.auth_user_groups USING btree (user_id); + + +-- +-- Name: auth_user_user_permissions_permission_id_1fbb5f2c; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX auth_user_user_permissions_permission_id_1fbb5f2c ON public.auth_user_user_permissions USING btree (permission_id); + + +-- +-- Name: auth_user_user_permissions_user_id_a95ead1b; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX auth_user_user_permissions_user_id_a95ead1b ON public.auth_user_user_permissions USING btree (user_id); + + +-- +-- Name: auth_user_username_6821ab7c_like; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX auth_user_username_6821ab7c_like ON public.auth_user USING btree (username varchar_pattern_ops); + + +-- +-- Name: django_admin_log_content_type_id_c4bce8eb; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX django_admin_log_content_type_id_c4bce8eb ON public.django_admin_log USING btree (content_type_id); + + +-- +-- Name: django_admin_log_user_id_c564eba6; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX django_admin_log_user_id_c564eba6 ON public.django_admin_log USING btree (user_id); + + +-- +-- Name: django_session_expire_date_a5c62663; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX django_session_expire_date_a5c62663 ON public.django_session USING btree (expire_date); + + +-- +-- Name: django_session_session_key_c0390e0f_like; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE INDEX django_session_session_key_c0390e0f_like ON public.django_session USING btree (session_key varchar_pattern_ops); + + +-- +-- Name: ix_Users_email; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE UNIQUE INDEX "ix_Users_email" ON public."Users" USING btree (email); + + +-- +-- Name: ix_Users_username; Type: INDEX; Schema: public; Owner: pe +-- + +CREATE UNIQUE INDEX "ix_Users_username" ON public."Users" USING btree (username); + + +-- +-- Name: weekly_statuses set_status_completed_and_week_ending_trigger; Type: TRIGGER; Schema: public; Owner: pe +-- + +CREATE TRIGGER set_status_completed_and_week_ending_trigger BEFORE INSERT ON public.weekly_statuses FOR EACH ROW EXECUTE PROCEDURE public.set_status_completed_and_week_ending(); + + +-- +-- Name: alerts alerts_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.alerts + ADD CONSTRAINT alerts_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: alerts alerts_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.alerts + ADD CONSTRAINT alerts_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: alias alias_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.alias + ADD CONSTRAINT alias_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: auth_group_permissions auth_group_permissio_permission_id_84c5c92e_fk_auth_perm; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_group_permissions + ADD CONSTRAINT auth_group_permissio_permission_id_84c5c92e_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES public.auth_permission(id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: auth_group_permissions auth_group_permissions_group_id_b120cbf9_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_group_permissions + ADD CONSTRAINT auth_group_permissions_group_id_b120cbf9_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: auth_permission auth_permission_content_type_id_2f476e4b_fk_django_co; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_permission + ADD CONSTRAINT auth_permission_content_type_id_2f476e4b_fk_django_co FOREIGN KEY (content_type_id) REFERENCES public.django_content_type(id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: auth_user_groups auth_user_groups_group_id_97559544_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_user_groups + ADD CONSTRAINT auth_user_groups_group_id_97559544_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: auth_user_groups auth_user_groups_user_id_6a12ed8b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_user_groups + ADD CONSTRAINT auth_user_groups_user_id_6a12ed8b_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: auth_user_user_permissions auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_user_user_permissions + ADD CONSTRAINT auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES public.auth_permission(id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: auth_user_user_permissions auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.auth_user_user_permissions + ADD CONSTRAINT auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: cidrs cidrs_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cidrs + ADD CONSTRAINT cidrs_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: cidrs cidrs_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cidrs + ADD CONSTRAINT cidrs_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: credential_breaches credential_breaches_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.credential_breaches + ADD CONSTRAINT credential_breaches_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: credential_exposures credential_exposures_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.credential_exposures + ADD CONSTRAINT credential_exposures_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: cyhy_certs cyhy_certs_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_certs + ADD CONSTRAINT cyhy_certs_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: cyhy_domains cyhy_domains_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_domains + ADD CONSTRAINT cyhy_domains_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: cyhy_certs cyhy_domains_sub_domain_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_certs + ADD CONSTRAINT cyhy_domains_sub_domain_uid_fkey FOREIGN KEY (sub_domain_uid) REFERENCES public.sub_domains(sub_domain_uid); + + +-- +-- Name: cyhy_https_scan cyhy_https_scan_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_https_scan + ADD CONSTRAINT cyhy_https_scan_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: cyhy_port_scans_new cyhy_port_scans_new_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_port_scans_new + ADD CONSTRAINT cyhy_port_scans_new_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: cyhy_port_scans cyhy_port_scans_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_port_scans + ADD CONSTRAINT cyhy_port_scans_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: cyhy_snapshots cyhy_snapshot_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_snapshots + ADD CONSTRAINT cyhy_snapshot_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: cyhy_sslyze cyhy_sslyze_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_sslyze + ADD CONSTRAINT cyhy_sslyze_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: cyhy_tickets cyhy_ticket_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_tickets + ADD CONSTRAINT cyhy_ticket_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: cyhy_trustymail cyhy_trustymail_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_trustymail + ADD CONSTRAINT cyhy_trustymail_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: cyhy_vuln_scans cyhy_vulns_scans_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.cyhy_vuln_scans + ADD CONSTRAINT cyhy_vulns_scans_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: dataAPI_apiuser dataAPI_apiuser_user_id_9b9cb3a6_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public."dataAPI_apiuser" + ADD CONSTRAINT "dataAPI_apiuser_user_id_9b9cb3a6_fk_auth_user_id" FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: django_admin_log django_admin_log_content_type_id_c4bce8eb_fk_django_co; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.django_admin_log + ADD CONSTRAINT django_admin_log_content_type_id_c4bce8eb_fk_django_co FOREIGN KEY (content_type_id) REFERENCES public.django_content_type(id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: django_admin_log django_admin_log_user_id_c564eba6_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.django_admin_log + ADD CONSTRAINT django_admin_log_user_id_c564eba6_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: domain_permutations dnstwist_domain_masq_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.domain_permutations + ADD CONSTRAINT dnstwist_domain_masq_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: domain_alerts domain_alerts_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.domain_alerts + ADD CONSTRAINT domain_alerts_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: domain_alerts domain_alerts_sub_domain_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.domain_alerts + ADD CONSTRAINT domain_alerts_sub_domain_uid_fkey FOREIGN KEY (sub_domain_uid) REFERENCES public.sub_domains(sub_domain_uid) NOT VALID; + + +-- +-- Name: domain_permutations domain_permutations_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.domain_permutations + ADD CONSTRAINT domain_permutations_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: domain_permutations domain_permutations_sub_domain_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.domain_permutations + ADD CONSTRAINT domain_permutations_sub_domain_uid_fkey FOREIGN KEY (sub_domain_uid) REFERENCES public.sub_domains(sub_domain_uid) NOT VALID; + + +-- +-- Name: executives executives_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.executives + ADD CONSTRAINT executives_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: credential_exposures hibp_exposed_credentials_breach_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.credential_exposures + ADD CONSTRAINT hibp_exposed_credentials_breach_id_fkey FOREIGN KEY (credential_breaches_uid) REFERENCES public.credential_breaches(credential_breaches_uid) NOT VALID; + + +-- +-- Name: credential_exposures hibp_exposed_credentials_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.credential_exposures + ADD CONSTRAINT hibp_exposed_credentials_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: ips ip_origin_cidr_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.ips + ADD CONSTRAINT ip_origin_cidr_uid_fkey FOREIGN KEY (origin_cidr) REFERENCES public.cidrs(cidr_uid) NOT VALID; + + +-- +-- Name: ips_subs ip_subs_ip_hash_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.ips_subs + ADD CONSTRAINT ip_subs_ip_hash_fkey FOREIGN KEY (ip_hash) REFERENCES public.ips(ip_hash) ON DELETE CASCADE; + + +-- +-- Name: ips_subs ips_subs_sub_domain_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.ips_subs + ADD CONSTRAINT ips_subs_sub_domain_uid_fkey FOREIGN KEY (sub_domain_uid) REFERENCES public.sub_domains(sub_domain_uid) ON DELETE CASCADE; + + +-- +-- Name: mentions mentions_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.mentions + ADD CONSTRAINT mentions_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: organizations organizations_org_type_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.organizations + ADD CONSTRAINT organizations_org_type_uid_fkey FOREIGN KEY (org_type_uid) REFERENCES public.org_type(org_type_uid) NOT VALID; + + +-- +-- Name: organizations parent_child_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.organizations + ADD CONSTRAINT parent_child_fkey FOREIGN KEY (parent_org_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: was_map pe_org_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.was_map + ADD CONSTRAINT pe_org_id_fk FOREIGN KEY (pe_org_id) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: pshtt_results pshtt_results_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.pshtt_results + ADD CONSTRAINT pshtt_results_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: pshtt_results pshtt_results_sub_domain_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.pshtt_results + ADD CONSTRAINT pshtt_results_sub_domain_uid_fkey FOREIGN KEY (sub_domain_uid) REFERENCES public.sub_domains(sub_domain_uid) NOT VALID; + + +-- +-- Name: report_summary_stats report_summary_stats_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.report_summary_stats + ADD CONSTRAINT report_summary_stats_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: root_domains root_domains_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.root_domains + ADD CONSTRAINT root_domains_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: root_domains root_domains_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.root_domains + ADD CONSTRAINT root_domains_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: scorecard_summary_stats scorecard_summary_stats_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.scorecard_summary_stats + ADD CONSTRAINT scorecard_summary_stats_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid); + + +-- +-- Name: sectors_orgs sectors_orgs_orgs_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.sectors_orgs + ADD CONSTRAINT sectors_orgs_orgs_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) ON DELETE CASCADE; + + +-- +-- Name: sectors_orgs sectors_orgs_sector_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.sectors_orgs + ADD CONSTRAINT sectors_orgs_sector_uid_fkey FOREIGN KEY (sector_uid) REFERENCES public.sectors(sector_uid) ON DELETE CASCADE; + + +-- +-- Name: shodan_assets shodan_assets_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.shodan_assets + ADD CONSTRAINT shodan_assets_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: shodan_assets shodan_assets_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.shodan_assets + ADD CONSTRAINT shodan_assets_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: old_shodan_insecure_protocols_unverified_vulns shodan_insecure_protocols_unverified_vul_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.old_shodan_insecure_protocols_unverified_vulns + ADD CONSTRAINT shodan_insecure_protocols_unverified_vul_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: old_shodan_insecure_protocols_unverified_vulns shodan_insecure_protocols_unverified_vulns_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.old_shodan_insecure_protocols_unverified_vulns + ADD CONSTRAINT shodan_insecure_protocols_unverified_vulns_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: shodan_vulns shodan_verified_vulns_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.shodan_vulns + ADD CONSTRAINT shodan_verified_vulns_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: shodan_vulns shodan_verified_vulns_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.shodan_vulns + ADD CONSTRAINT shodan_verified_vulns_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: sub_domains sub_domains_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.sub_domains + ADD CONSTRAINT sub_domains_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: sub_domains sub_domains_dns_records_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.sub_domains + ADD CONSTRAINT sub_domains_dns_records_uid_fkey FOREIGN KEY (dns_record_uid) REFERENCES public.dns_records(dns_record_uid) NOT VALID; + + +-- +-- Name: sub_domains sub_domains_root_domain_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.sub_domains + ADD CONSTRAINT sub_domains_root_domain_uid_fkey FOREIGN KEY (root_domain_uid) REFERENCES public.root_domains(root_domain_uid) NOT VALID; + + +-- +-- Name: sub_domains sub_domains_sub_domain_root_domain_uid_key; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.sub_domains + ADD CONSTRAINT sub_domains_sub_domain_root_domain_uid_key FOREIGN KEY (root_domain_uid) REFERENCES public.root_domains(root_domain_uid) NOT VALID; + + +-- +-- Name: top_cves top_cves_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.top_cves + ADD CONSTRAINT top_cves_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: web_assets web_assets_data_source_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.web_assets + ADD CONSTRAINT web_assets_data_source_uid_fkey FOREIGN KEY (data_source_uid) REFERENCES public.data_source(data_source_uid) NOT VALID; + + +-- +-- Name: web_assets web_assets_organizations_uid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: pe +-- + +ALTER TABLE ONLY public.web_assets + ADD CONSTRAINT web_assets_organizations_uid_fkey FOREIGN KEY (organizations_uid) REFERENCES public.organizations(organizations_uid) NOT VALID; + + +-- +-- Name: SCHEMA public; Type: ACL; Schema: -; Owner: crossfeed +-- + +REVOKE ALL ON SCHEMA public FROM PUBLIC; +GRANT ALL ON SCHEMA public TO crossfeed; +GRANT ALL ON SCHEMA public TO PUBLIC; + + +-- +-- PostgreSQL database dump complete +-- + + +-- +-- Fill table with DHS +-- + +INSERT INTO public.organizations (name, cyhy_db_name, organizations_uid, report_on) +VALUES ('Department of Homeland Security', 'DHS', '385caaea-416f-11ec-bf33-02589a36c9d7', true); + + +INSERT INTO public.data_source(name, description, last_run) +VALUES ('Shodan', 'IoT scanner', '2022-03-14'); + +INSERT INTO public.data_source(name, description, last_run) +VALUES ('HaveIBeenPwned', 'Credentials', '2022-03-14'); + +INSERT INTO public.data_source(name, description, last_run) +VALUES ('DNSTwist', 'Domain Permutations', '2022-03-14'); + +INSERT INTO public.data_source(name, description, last_run) +VALUES ('DNSMonitor', 'Domain Permutations', '2022-03-14'); + +INSERT INTO public.data_source(name, description, last_run) +VALUES ('CIRCL.lu', 'CVE engine', '2022-03-14'); + +INSERT INTO public.data_source(name, description, last_run) +VALUES ('WhoisXML', 'DNS lookpus', '2022-03-14'); + +INSERT INTO public.data_source(name, description, last_run) +VALUES ('findomain', 'Domain enumerator', '2022-03-14'); + +INSERT INTO public.data_source(name, description, last_run) +VALUES ('Sublist3r', 'Domain Permutations', '2022-03-14'); + +INSERT INTO public.data_source(name, description, last_run) +VALUES ('Cybersixgill', 'Dark web mentions and credentials', '2022-03-14'); + +INSERT INTO public.data_source(name, description, last_run) +VALUES ('unknown', 'Source unknown', '2022-03-14'); + +`; + +export const handler: Handler = async (event) => { + const connection = await connectToDatabase(); + + // Create P&E database and user. + try { + await connection.query( + `CREATE USER ${process.env.PE_DB_USERNAME} WITH PASSWORD '${process.env.PE_DB_PASSWORD}';` + ); + } catch (e) { + console.log( + "Create user failed. This usually means that the user already exists, so you're OK if that was the case. Here's the exact error:", + e + ); + } + try { + await connection.query( + `GRANT ${process.env.PE_DB_USERNAME} to ${process.env.DB_USERNAME};` + ); + } catch (e) { + console.log('Grant role failed. Error:', e); + } + try { + await connection.query( + `CREATE DATABASE ${process.env.PE_DB_NAME} owner ${process.env.PE_DB_USERNAME};` + ); + } catch (e) { + console.log( + "Create database failed. This usually means that the database already exists, so you're OK if that was the case. Here's the exact error:", + e + ); + } + + // Connect to the PE database. + const client = new Client({ + user: process.env.PE_DB_USERNAME, + host: process.env.DB_HOST, + database: process.env.PE_DB_NAME, + password: process.env.PE_DB_PASSWORD + }); + client.connect(); + + // Drop all tables in the PE database. + await client.query( + `drop owned by ${process.env.PE_DB_USERNAME}; CREATE SCHEMA public;` + ); + + // Generate initial PE tables. + const sql = String(PE_DATA_SCHEMA); + await client.query(sql); + + console.log('Done.'); + client.end(); +}; diff --git a/backend/src/tasks/portscanner.ts b/backend/src/tasks/portscanner.ts new file mode 100644 index 00000000..1521e2b2 --- /dev/null +++ b/backend/src/tasks/portscanner.ts @@ -0,0 +1,43 @@ +// This is a temporary proof-of-concept port scanner that actively scans ports. +// We'll want to replace this with the Project Sonar passive port scanner. + +import { Service } from '../models'; +import { plainToClass } from 'class-transformer'; +import * as portscanner from 'portscanner'; +import getIps from './helpers/getIps'; +import { CommandOptions } from './ecs-client'; +import saveServicesToDb from './helpers/saveServicesToDb'; + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName } = commandOptions; + + console.log('Running portscanner on organization', organizationName); + + const domainsWithIPs = await getIps(organizationId); + + const services: Service[] = []; + for (const domain of domainsWithIPs) { + for (const port of [21, 22, 80, 443, 3000, 8080, 8443]) { + try { + const status = await portscanner.checkPortStatus(port, domain.ip); + if (status === 'open') { + services.push( + plainToClass(Service, { + domain: domain, + discoveredBy: { id: commandOptions.scanId }, + port: port, + lastSeen: new Date(Date.now()) + }) + ); + } + } catch (e) { + console.error(e); + continue; + } + } + } + + await saveServicesToDb(services); + + console.log(`Portscan finished for ${services.length} services`); +}; diff --git a/backend/src/tasks/rootDomainSync.ts b/backend/src/tasks/rootDomainSync.ts new file mode 100644 index 00000000..d60fb9eb --- /dev/null +++ b/backend/src/tasks/rootDomainSync.ts @@ -0,0 +1,34 @@ +import { plainToClass } from 'class-transformer'; +import getRootDomains from './helpers/getRootDomains'; +import { Domain } from '../models'; +import { CommandOptions } from './ecs-client'; +import saveDomainsToDb from './helpers/saveDomainsToDb'; +import * as dns from 'dns'; + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName } = commandOptions; + console.log('Syncing domains from', organizationName); + + const rootDomains = await getRootDomains(organizationId!); + + const domains: Domain[] = []; + for (const rootDomain of rootDomains) { + console.log(rootDomain); + let ipAddress; + try { + ipAddress = (await dns.promises.lookup(rootDomain)).address; + } catch (e) { + ipAddress = null; + continue; + } + domains.push( + plainToClass(Domain, { + name: rootDomain, + ip: ipAddress, + organization: { id: organizationId } + }) + ); + } + await saveDomainsToDb(domains); + console.log(`Scan created/updated ${domains.length} new domains`); +}; diff --git a/backend/src/tasks/s3-client.ts b/backend/src/tasks/s3-client.ts new file mode 100644 index 00000000..923713c8 --- /dev/null +++ b/backend/src/tasks/s3-client.ts @@ -0,0 +1,120 @@ +import { S3 } from 'aws-sdk'; + +/** + * S3 Client. Normally, interacts with S3. + * When the app is running locally, connects + * to local S3 (minio) instead. + */ +class S3Client { + s3: S3; + isLocal: boolean; + + constructor(isLocal?: boolean) { + this.isLocal = + isLocal ?? + (process.env.IS_OFFLINE || process.env.IS_LOCAL ? true : false); + if (this.isLocal) { + this.s3 = new S3({ + endpoint: 'http://minio:9000', + s3ForcePathStyle: true + }); + } else { + this.s3 = new S3(); + } + } + + /** + * Saves the given JSON file as a CSV file in S3, then returns a + * temporary URL that can be used to access it. + * @param data Data to be saved as a CSV + */ + async saveCSV(body: string, name: string = '') { + try { + const Key = `${Math.random()}/${name}-${new Date().toISOString()}.csv`; + const params = { + Bucket: process.env.EXPORT_BUCKET_NAME!, + Key, + Body: body, + ContentType: 'text/csv' + }; + await this.s3.putObject(params).promise(); + const url = await this.s3.getSignedUrlPromise('getObject', { + Bucket: process.env.EXPORT_BUCKET_NAME!, + Key, + Expires: 60 * 5 // 5 minutes + }); + + // Do this so exports are accessible when running locally. + if (this.isLocal) { + console.log(url.replace('minio:9000', 'localhost:9000')); + return url.replace('minio:9000', 'localhost:9000'); + } + return url; + } catch (e) { + console.error(e); + throw e; + } + } + + async exportReport(reportName: string, orgId: string) { + try { + const Key = `${orgId}/${reportName}`; + const url = await this.s3.getSignedUrlPromise('getObject', { + Bucket: process.env.REPORTS_BUCKET_NAME!, + Key, + Expires: 60 * 5 // 5 minutes + }); + // Do this so exports are accessible when running locally. + if (this.isLocal) { + return url.replace('minio:9000', 'localhost:9000'); + } + return url; + } catch (e) { + console.error(e); + throw e; + } + } + + async listReports(orgId: string) { + try { + const params = { + Bucket: process.env.REPORTS_BUCKET_NAME!, + Delimiter: '', + Prefix: `${orgId}/` + }; + + const data = await this.s3 + .listObjects(params, function (err, data) { + if (err) throw err; + }) + .promise(); + return data.Contents; + } catch (e) { + console.error(e); + throw e; + } + } + + async getEmailAsset(fileName: string) { + try { + const params = { + Bucket: process.env.EMAIL_BUCKET_NAME!, + Key: fileName + }; + + const data = await this.s3 + .getObject(params, function (err, data) { + if (err) throw err; + }) + .promise(); + if (data && data.Body) { + return data.Body.toString('utf-8'); + } + } catch (e) { + console.error(e); + throw e; + } + } +} + +export default S3Client; diff --git a/backend/src/tasks/sample_data/adjectives.json b/backend/src/tasks/sample_data/adjectives.json new file mode 100644 index 00000000..2e5c3142 --- /dev/null +++ b/backend/src/tasks/sample_data/adjectives.json @@ -0,0 +1,110 @@ +[ + "admiring", + "adoring", + "affectionate", + "agitated", + "amazing", + "angry", + "awesome", + "beautiful", + "blissful", + "bold", + "boring", + "brave", + "busy", + "charming", + "clever", + "cool", + "compassionate", + "competent", + "condescending", + "confident", + "cranky", + "crazy", + "dazzling", + "determined", + "distracted", + "dreamy", + "eager", + "ecstatic", + "elastic", + "elated", + "elegant", + "eloquent", + "epic", + "exciting", + "fervent", + "festive", + "flamboyant", + "focused", + "friendly", + "frosty", + "funny", + "gallant", + "gifted", + "goofy", + "gracious", + "great", + "happy", + "hardcore", + "heuristic", + "hopeful", + "hungry", + "infallible", + "inspiring", + "interesting", + "intelligent", + "jolly", + "jovial", + "keen", + "kind", + "laughing", + "loving", + "lucid", + "magical", + "mystifying", + "modest", + "musing", + "naughty", + "nervous", + "nice", + "nifty", + "nostalgic", + "objective", + "optimistic", + "peaceful", + "pedantic", + "pensive", + "practical", + "priceless", + "quirky", + "quizzical", + "recursing", + "relaxed", + "reverent", + "romantic", + "sad", + "serene", + "sharp", + "silly", + "sleepy", + "stoic", + "strange", + "stupefied", + "suspicious", + "sweet", + "tender", + "thirsty", + "trusting", + "unruffled", + "upbeat", + "vibrant", + "vigilant", + "vigorous", + "wizardly", + "wonderful", + "xenodochial", + "youthful", + "zealous", + "zen" +] \ No newline at end of file diff --git a/backend/src/tasks/sample_data/cpes.json b/backend/src/tasks/sample_data/cpes.json new file mode 100644 index 00000000..81e55271 --- /dev/null +++ b/backend/src/tasks/sample_data/cpes.json @@ -0,0 +1,9 @@ +[ + "cpe:/a:microsoft:exchange_server:4.0:sp1", + "cpe:/a:apache:httpd:0.0.1", + "cpe:/a:drupal:drupal:3", + "cpe:/a:igor_sysoev:nginx:1.2.0", + "cpe:/a:openbsd:openssh:7.4", + "cpe:/a:microsoft:internet_information_server:2.0", + "cpe:/a:apache:http_server:1.0" +] \ No newline at end of file diff --git a/backend/src/tasks/sample_data/cves.json b/backend/src/tasks/sample_data/cves.json new file mode 100644 index 00000000..7141a99a --- /dev/null +++ b/backend/src/tasks/sample_data/cves.json @@ -0,0 +1,1082 @@ +[ + { + "cve_uid": "", + "cve_name": "CVE-2017-15906", + "published_date": "2017-10-26T08:29:00.220Z", + "last_modified_date": "2024-02-14T22:42:27.316Z", + "vuln_status": "Modified", + "description": "The process_open function in sftp-server.c in OpenSSH before 7.6 does not properly prevent write operations in readonly mode, which allows attackers to create zero-length files.", + "cvss_v2_source": "nvd@nist.gov", + "cvss_v2_type": "Primary", + "cvss_v2_version": "2.0", + "cvss_v2_vector_string": "AV:N/AC:L/Au:N/C:N/I:P/A:N", + "cvss_v2_base_score": 5, + "cvss_v2_base_severity": "MEDIUM", + "cvss_v2_exploitability_score": 10, + "cvss_v2_impact_score": 2.9, + "cvss_v3_source": "nvd@nist.gov", + "cvss_v3_type": "Primary", + "cvss_v3_version": "3.1", + "cvss_v3_vector_string": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N", + "cvss_v3_base_score": 5.3, + "cvss_v3_base_severity": "MEDIUM", + "cvss_v3_exploitability_score": 3.9, + "cvss_v3_impact_score": 1.4, + "cvss_v4_source": null, + "cvss_v4_type": null, + "cvss_v4_version": null, + "cvss_v4_vector_string": null, + "cvss_v4_base_score": null, + "cvss_v4_base_severity": null, + "cvss_v4_exploitability_score": null, + "cvss_v4_impact_score": null, + "weaknesses": [ + "CWE-732" + ], + "reference_urls": [ + "http://www.securityfocus.com/bid/101552", + "https://access.redhat.com/errata/RHSA-2018:0980", + "https://cert-portal.siemens.com/productcert/pdf/ssa-412672.pdf", + "https://github.com/openbsd/src/commit/a6981567e8e215acc1ef690c8dbb30f2d9b00a19", + "https://lists.debian.org/debian-lts-announce/2018/09/msg00010.html", + "https://security.gentoo.org/glsa/201801-05", + "https://security.netapp.com/advisory/ntap-20180423-0004/", + "https://www.openssh.com/txt/release-7.6", + "https://www.oracle.com/security-alerts/cpujan2020.html" + ], + "vender_product": { + "company": [ + { + "cpe_product_name": "oncommand_unified_manager_core_package", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "storage_replication_adapter_for_clustered_data_ontap", + "version_number": "*", + "vender": "netapp" + }, + { + "cpe_product_name": "solidfire", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "enterprise_linux_server_aus", + "version_number": "7.6", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server_aus", + "version_number": "7.7", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_desktop", + "version_number": "7.0", + "vender": "redhat" + }, + { + "cpe_product_name": "virtual_storage_console", + "version_number": "9.6", + "vender": "netapp" + }, + { + "cpe_product_name": "data_ontap_edge", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "enterprise_linux_eus", + "version_number": "7.7", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server_tus", + "version_number": "7.6", + "vender": "redhat" + }, + { + "cpe_product_name": "openssh", + "version_number": "*", + "vender": "openssh" + }, + { + "cpe_product_name": "cn1610", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "steelstore_cloud_integrated_storage", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "enterprise_linux_eus", + "version_number": "7.6", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server_tus", + "version_number": "7.7", + "vender": "redhat" + }, + { + "cpe_product_name": "hci_management_node", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "enterprise_linux_server", + "version_number": "7.0", + "vender": "redhat" + }, + { + "cpe_product_name": "cloud_backup", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "enterprise_linux_workstation", + "version_number": "7.0", + "vender": "redhat" + }, + { + "cpe_product_name": "storage_replication_adapter_for_clustered_data_ontap", + "version_number": "9.6", + "vender": "netapp" + }, + { + "cpe_product_name": "virtual_storage_console", + "version_number": "*", + "vender": "netapp" + }, + { + "cpe_product_name": "sun_zfs_storage_appliance_kit", + "version_number": "8.8.6", + "vender": "oracle" + }, + { + "cpe_product_name": "clustered_data_ontap", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "cn1610_firmware", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "vasa_provider_for_clustered_data_ontap", + "version_number": "*", + "vender": "netapp" + }, + { + "cpe_product_name": "debian_linux", + "version_number": "8.0", + "vender": "debian" + }, + { + "cpe_product_name": "active_iq_unified_manager", + "version_number": "-", + "vender": "netapp" + } + ] + } + }, + { + "cve_uid": "", + "cve_name": "CVE-2018-15473", + "published_date": "2018-08-18T00:29:00.223Z", + "last_modified_date": "2024-02-14T22:50:19.257Z", + "vuln_status": "Analyzed", + "description": "OpenSSH through 7.7 is prone to a user enumeration vulnerability due to not delaying bailout for an invalid authenticating user until after the packet containing the request has been fully parsed, related to auth2-gss.c, auth2-hostbased.c, and auth2-pubkey.c.", + "cvss_v2_source": "nvd@nist.gov", + "cvss_v2_type": "Primary", + "cvss_v2_version": "2.0", + "cvss_v2_vector_string": "AV:N/AC:L/Au:N/C:P/I:N/A:N", + "cvss_v2_base_score": 5, + "cvss_v2_base_severity": "MEDIUM", + "cvss_v2_exploitability_score": 10, + "cvss_v2_impact_score": 2.9, + "cvss_v3_source": "nvd@nist.gov", + "cvss_v3_type": "Primary", + "cvss_v3_version": "3.1", + "cvss_v3_vector_string": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N", + "cvss_v3_base_score": 5.3, + "cvss_v3_base_severity": "MEDIUM", + "cvss_v3_exploitability_score": 3.9, + "cvss_v3_impact_score": 1.4, + "cvss_v4_source": null, + "cvss_v4_type": null, + "cvss_v4_version": null, + "cvss_v4_vector_string": null, + "cvss_v4_base_score": null, + "cvss_v4_base_severity": null, + "cvss_v4_exploitability_score": null, + "cvss_v4_impact_score": null, + "weaknesses": [ + "CWE-362" + ], + "reference_urls": [ + "http://www.openwall.com/lists/oss-security/2018/08/15/5", + "http://www.securityfocus.com/bid/105140", + "http://www.securitytracker.com/id/1041487", + "https://access.redhat.com/errata/RHSA-2019:0711", + "https://access.redhat.com/errata/RHSA-2019:2143", + "https://bugs.debian.org/906236", + "https://cert-portal.siemens.com/productcert/pdf/ssa-412672.pdf", + "https://github.com/openbsd/src/commit/779974d35b4859c07bc3cb8a12c74b43b0a7d1e0", + "https://lists.debian.org/debian-lts-announce/2018/08/msg00022.html", + "https://psirt.global.sonicwall.com/vuln-detail/SNWLID-2018-0011", + "https://security.gentoo.org/glsa/201810-03", + "https://security.netapp.com/advisory/ntap-20181101-0001/", + "https://usn.ubuntu.com/3809-1/", + "https://www.debian.org/security/2018/dsa-4280", + "https://www.exploit-db.com/exploits/45210/", + "https://www.exploit-db.com/exploits/45233/", + "https://www.exploit-db.com/exploits/45939/", + "https://www.oracle.com/security-alerts/cpujan2020.html" + ], + "vender_product": { + "company": [ + { + "cpe_product_name": "ubuntu_linux", + "version_number": "14.04", + "vender": "canonical" + }, + { + "cpe_product_name": "ontap_select_deploy", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "vasa_provider", + "version_number": "*", + "vender": "netapp" + }, + { + "cpe_product_name": "enterprise_linux_desktop", + "version_number": "7.0", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server", + "version_number": "6.0", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_desktop", + "version_number": "6.0", + "vender": "redhat" + }, + { + "cpe_product_name": "data_ontap_edge", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "service_processor", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "scalance_x204rna", + "version_number": "-", + "vender": "siemens" + }, + { + "cpe_product_name": "ubuntu_linux", + "version_number": "18.04", + "vender": "canonical" + }, + { + "cpe_product_name": "data_ontap", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "ubuntu_linux", + "version_number": "16.04", + "vender": "canonical" + }, + { + "cpe_product_name": "openssh", + "version_number": "*", + "vender": "openssh" + }, + { + "cpe_product_name": "cn1610", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "steelstore_cloud_integrated_storage", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "enterprise_linux_workstation", + "version_number": "6.0", + "vender": "redhat" + }, + { + "cpe_product_name": "oncommand_unified_manager", + "version_number": "*", + "vender": "netapp" + }, + { + "cpe_product_name": "aff_baseboard_management_controller", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "storage_replication_adapter", + "version_number": "*", + "vender": "netapp" + }, + { + "cpe_product_name": "enterprise_linux_server", + "version_number": "7.0", + "vender": "redhat" + }, + { + "cpe_product_name": "cloud_backup", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "enterprise_linux_workstation", + "version_number": "7.0", + "vender": "redhat" + }, + { + "cpe_product_name": "virtual_storage_console", + "version_number": "*", + "vender": "netapp" + }, + { + "cpe_product_name": "scalance_x204rna_firmware", + "version_number": "*", + "vender": "siemens" + }, + { + "cpe_product_name": "sun_zfs_storage_appliance_kit", + "version_number": "8.8.6", + "vender": "oracle" + }, + { + "cpe_product_name": "debian_linux", + "version_number": "9.0", + "vender": "debian" + }, + { + "cpe_product_name": "clustered_data_ontap", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "cn1610_firmware", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "fas_baseboard_management_controller", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "debian_linux", + "version_number": "8.0", + "vender": "debian" + } + ] + } + }, + { + "cve_uid": "", + "cve_name": "CVE-2018-15919", + "published_date": "2018-08-28T13:29:00.207Z", + "last_modified_date": "2024-02-14T22:50:28.245Z", + "vuln_status": "Analyzed", + "description": "Remotely observable behaviour in auth-gss2.c in OpenSSH through 7.8 could be used by remote attackers to detect existence of users on a target system when GSS2 is in use. NOTE: the discoverer states 'We understand that the OpenSSH developers do not want to treat such a username enumeration (or \"oracle\") as a vulnerability.'", + "cvss_v2_source": "nvd@nist.gov", + "cvss_v2_type": "Primary", + "cvss_v2_version": "2.0", + "cvss_v2_vector_string": "AV:N/AC:L/Au:N/C:P/I:N/A:N", + "cvss_v2_base_score": 5, + "cvss_v2_base_severity": "MEDIUM", + "cvss_v2_exploitability_score": 10, + "cvss_v2_impact_score": 2.9, + "cvss_v3_source": "nvd@nist.gov", + "cvss_v3_type": "Primary", + "cvss_v3_version": "3.0", + "cvss_v3_vector_string": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N", + "cvss_v3_base_score": 5.3, + "cvss_v3_base_severity": "MEDIUM", + "cvss_v3_exploitability_score": 3.9, + "cvss_v3_impact_score": 1.4, + "cvss_v4_source": null, + "cvss_v4_type": null, + "cvss_v4_version": null, + "cvss_v4_vector_string": null, + "cvss_v4_base_score": null, + "cvss_v4_base_severity": null, + "cvss_v4_exploitability_score": null, + "cvss_v4_impact_score": null, + "weaknesses": [ + "CWE-200" + ], + "reference_urls": [ + "http://seclists.org/oss-sec/2018/q3/180", + "http://www.securityfocus.com/bid/105163", + "https://security.netapp.com/advisory/ntap-20181221-0001/" + ], + "vender_product": { + "company": [ + { + "cpe_product_name": "ontap_select_deploy", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "data_ontap_edge", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "openssh", + "version_number": "*", + "vender": "openssh" + }, + { + "cpe_product_name": "cn1610", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "cloud_backup", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "cn1610_firmware", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "steelstore", + "version_number": "-", + "vender": "netapp" + } + ] + } + }, + { + "cve_uid": "", + "cve_name": "CVE-2018-20685", + "published_date": "2019-01-11T03:29:00.377Z", + "last_modified_date": "2024-02-14T22:51:58.019Z", + "vuln_status": "Analyzed", + "description": "In OpenSSH 7.9, scp.c in the scp client allows remote SSH servers to bypass intended access restrictions via the filename of . or an empty filename. The impact is modifying the permissions of the target directory on the client side.", + "cvss_v2_source": "nvd@nist.gov", + "cvss_v2_type": "Primary", + "cvss_v2_version": "2.0", + "cvss_v2_vector_string": "AV:N/AC:H/Au:N/C:N/I:P/A:N", + "cvss_v2_base_score": 2.6, + "cvss_v2_base_severity": "LOW", + "cvss_v2_exploitability_score": 4.9, + "cvss_v2_impact_score": 2.9, + "cvss_v3_source": "nvd@nist.gov", + "cvss_v3_type": "Primary", + "cvss_v3_version": "3.1", + "cvss_v3_vector_string": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:N", + "cvss_v3_base_score": 5.3, + "cvss_v3_base_severity": "MEDIUM", + "cvss_v3_exploitability_score": 1.6, + "cvss_v3_impact_score": 3.6, + "cvss_v4_source": null, + "cvss_v4_type": null, + "cvss_v4_version": null, + "cvss_v4_vector_string": null, + "cvss_v4_base_score": null, + "cvss_v4_base_severity": null, + "cvss_v4_exploitability_score": null, + "cvss_v4_impact_score": null, + "weaknesses": [ + "CWE-863" + ], + "reference_urls": [ + "http://www.securityfocus.com/bid/106531", + "https://access.redhat.com/errata/RHSA-2019:3702", + "https://cert-portal.siemens.com/productcert/pdf/ssa-412672.pdf", + "https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/scp.c.diff?r1=1.197&r2=1.198&f=h", + "https://github.com/openssh/openssh-portable/commit/6010c0303a422a9c5fa8860c061bf7105eb7f8b2", + "https://lists.debian.org/debian-lts-announce/2019/03/msg00030.html", + "https://security.gentoo.org/glsa/201903-16", + "https://security.gentoo.org/glsa/202007-53", + "https://security.netapp.com/advisory/ntap-20190215-0001/", + "https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt", + "https://usn.ubuntu.com/3885-1/", + "https://www.debian.org/security/2019/dsa-4387", + "https://www.oracle.com/technetwork/security-advisory/cpuapr2019-5072813.html", + "https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html" + ], + "vender_product": { + "company": [ + { + "cpe_product_name": "ubuntu_linux", + "version_number": "14.04", + "vender": "canonical" + }, + { + "cpe_product_name": "m10-4s", + "version_number": "-", + "vender": "fujitsu" + }, + { + "cpe_product_name": "ontap_select_deploy", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "scalance_x204rna_eec", + "version_number": "-", + "vender": "siemens" + }, + { + "cpe_product_name": "m12-1_firmware", + "version_number": "*", + "vender": "fujitsu" + }, + { + "cpe_product_name": "m10-4", + "version_number": "-", + "vender": "fujitsu" + }, + { + "cpe_product_name": "m12-2s", + "version_number": "-", + "vender": "fujitsu" + }, + { + "cpe_product_name": "enterprise_linux_eus", + "version_number": "8.6", + "vender": "redhat" + }, + { + "cpe_product_name": "element_software", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "m12-2s_firmware", + "version_number": "*", + "vender": "fujitsu" + }, + { + "cpe_product_name": "enterprise_linux", + "version_number": "7.0", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server_aus", + "version_number": "8.2", + "vender": "redhat" + }, + { + "cpe_product_name": "m12-2", + "version_number": "-", + "vender": "fujitsu" + }, + { + "cpe_product_name": "solaris", + "version_number": "10", + "vender": "oracle" + }, + { + "cpe_product_name": "enterprise_linux_eus", + "version_number": "8.1", + "vender": "redhat" + }, + { + "cpe_product_name": "scalance_x204rna", + "version_number": "-", + "vender": "siemens" + }, + { + "cpe_product_name": "ubuntu_linux", + "version_number": "18.04", + "vender": "canonical" + }, + { + "cpe_product_name": "ubuntu_linux", + "version_number": "16.04", + "vender": "canonical" + }, + { + "cpe_product_name": "openssh", + "version_number": "*", + "vender": "openssh" + }, + { + "cpe_product_name": "storage_automation_store", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "m10-1_firmware", + "version_number": "*", + "vender": "fujitsu" + }, + { + "cpe_product_name": "m12-2_firmware", + "version_number": "*", + "vender": "fujitsu" + }, + { + "cpe_product_name": "enterprise_linux", + "version_number": "8.0", + "vender": "redhat" + }, + { + "cpe_product_name": "steelstore_cloud_integrated_storage", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "enterprise_linux_eus", + "version_number": "8.2", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server_tus", + "version_number": "8.2", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server_tus", + "version_number": "8.4", + "vender": "redhat" + }, + { + "cpe_product_name": "winscp", + "version_number": "*", + "vender": "winscp" + }, + { + "cpe_product_name": "m10-4s_firmware", + "version_number": "*", + "vender": "fujitsu" + }, + { + "cpe_product_name": "cloud_backup", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "scalance_x204rna_firmware", + "version_number": "*", + "vender": "siemens" + }, + { + "cpe_product_name": "m10-4_firmware", + "version_number": "*", + "vender": "fujitsu" + }, + { + "cpe_product_name": "debian_linux", + "version_number": "9.0", + "vender": "debian" + }, + { + "cpe_product_name": "scalance_x204rna_eec_firmware", + "version_number": "*", + "vender": "siemens" + }, + { + "cpe_product_name": "enterprise_linux_eus", + "version_number": "8.4", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server_tus", + "version_number": "8.6", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server_aus", + "version_number": "8.4", + "vender": "redhat" + }, + { + "cpe_product_name": "ubuntu_linux", + "version_number": "18.10", + "vender": "canonical" + }, + { + "cpe_product_name": "debian_linux", + "version_number": "8.0", + "vender": "debian" + }, + { + "cpe_product_name": "enterprise_linux_server_aus", + "version_number": "8.6", + "vender": "redhat" + }, + { + "cpe_product_name": "m10-1", + "version_number": "-", + "vender": "fujitsu" + }, + { + "cpe_product_name": "m12-1", + "version_number": "-", + "vender": "fujitsu" + } + ] + } + }, + { + "cve_uid": "", + "cve_name": "CVE-2019-6109", + "published_date": "2019-02-01T00:29:00.710Z", + "last_modified_date": "2024-02-14T23:02:10.030Z", + "vuln_status": "Modified", + "description": "An issue was discovered in OpenSSH 7.9. Due to missing character encoding in the progress display, a malicious server (or Man-in-The-Middle attacker) can employ crafted object names to manipulate the client output, e.g., by using ANSI control codes to hide additional files being transferred. This affects refresh_progress_meter() in progressmeter.c.", + "cvss_v2_source": "nvd@nist.gov", + "cvss_v2_type": "Primary", + "cvss_v2_version": "2.0", + "cvss_v2_vector_string": "AV:N/AC:H/Au:N/C:P/I:P/A:N", + "cvss_v2_base_score": 4, + "cvss_v2_base_severity": "MEDIUM", + "cvss_v2_exploitability_score": 4.9, + "cvss_v2_impact_score": 4.9, + "cvss_v3_source": "nvd@nist.gov", + "cvss_v3_type": "Primary", + "cvss_v3_version": "3.1", + "cvss_v3_vector_string": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "cvss_v3_base_score": 6.8, + "cvss_v3_base_severity": "MEDIUM", + "cvss_v3_exploitability_score": 1.6, + "cvss_v3_impact_score": 5.2, + "cvss_v4_source": null, + "cvss_v4_type": null, + "cvss_v4_version": null, + "cvss_v4_vector_string": null, + "cvss_v4_base_score": null, + "cvss_v4_base_severity": null, + "cvss_v4_exploitability_score": null, + "cvss_v4_impact_score": null, + "weaknesses": [ + "CWE-116" + ], + "reference_urls": [ + "http://lists.opensuse.org/opensuse-security-announce/2019-06/msg00058.html", + "https://access.redhat.com/errata/RHSA-2019:3702", + "https://cert-portal.siemens.com/productcert/pdf/ssa-412672.pdf", + "https://cvsweb.openbsd.org/src/usr.bin/ssh/progressmeter.c", + "https://cvsweb.openbsd.org/src/usr.bin/ssh/scp.c", + "https://lists.debian.org/debian-lts-announce/2019/03/msg00030.html", + "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/W3YVQ2BPTOVDCFDVNC2GGF5P5ISFG37G/", + "https://security.gentoo.org/glsa/201903-16", + "https://security.netapp.com/advisory/ntap-20190213-0001/", + "https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt", + "https://usn.ubuntu.com/3885-1/", + "https://www.debian.org/security/2019/dsa-4387", + "https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html" + ], + "vender_product": { + "company": [ + { + "cpe_product_name": "ubuntu_linux", + "version_number": "14.04", + "vender": "canonical" + }, + { + "cpe_product_name": "m10-4s", + "version_number": "-", + "vender": "fujitsu" + }, + { + "cpe_product_name": "ontap_select_deploy", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "scalance_x204rna_eec", + "version_number": "-", + "vender": "siemens" + }, + { + "cpe_product_name": "m12-1_firmware", + "version_number": "*", + "vender": "fujitsu" + }, + { + "cpe_product_name": "m10-4", + "version_number": "-", + "vender": "fujitsu" + }, + { + "cpe_product_name": "m12-2s", + "version_number": "-", + "vender": "fujitsu" + }, + { + "cpe_product_name": "enterprise_linux_eus", + "version_number": "8.6", + "vender": "redhat" + }, + { + "cpe_product_name": "element_software", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "m12-2s_firmware", + "version_number": "*", + "vender": "fujitsu" + }, + { + "cpe_product_name": "enterprise_linux_server_aus", + "version_number": "8.2", + "vender": "redhat" + }, + { + "cpe_product_name": "m12-2", + "version_number": "-", + "vender": "fujitsu" + }, + { + "cpe_product_name": "fedora", + "version_number": "30", + "vender": "fedoraproject" + }, + { + "cpe_product_name": "enterprise_linux_eus", + "version_number": "8.1", + "vender": "redhat" + }, + { + "cpe_product_name": "scalance_x204rna", + "version_number": "-", + "vender": "siemens" + }, + { + "cpe_product_name": "ubuntu_linux", + "version_number": "18.04", + "vender": "canonical" + }, + { + "cpe_product_name": "ubuntu_linux", + "version_number": "16.04", + "vender": "canonical" + }, + { + "cpe_product_name": "openssh", + "version_number": "*", + "vender": "openssh" + }, + { + "cpe_product_name": "storage_automation_store", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "m10-1_firmware", + "version_number": "*", + "vender": "fujitsu" + }, + { + "cpe_product_name": "m12-2_firmware", + "version_number": "*", + "vender": "fujitsu" + }, + { + "cpe_product_name": "enterprise_linux", + "version_number": "8.0", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_eus", + "version_number": "8.2", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server_tus", + "version_number": "8.2", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server_tus", + "version_number": "8.4", + "vender": "redhat" + }, + { + "cpe_product_name": "winscp", + "version_number": "*", + "vender": "winscp" + }, + { + "cpe_product_name": "m10-4s_firmware", + "version_number": "*", + "vender": "fujitsu" + }, + { + "cpe_product_name": "scalance_x204rna_firmware", + "version_number": "*", + "vender": "siemens" + }, + { + "cpe_product_name": "m10-4_firmware", + "version_number": "*", + "vender": "fujitsu" + }, + { + "cpe_product_name": "debian_linux", + "version_number": "9.0", + "vender": "debian" + }, + { + "cpe_product_name": "scalance_x204rna_eec_firmware", + "version_number": "*", + "vender": "siemens" + }, + { + "cpe_product_name": "enterprise_linux_eus", + "version_number": "8.4", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server_tus", + "version_number": "8.6", + "vender": "redhat" + }, + { + "cpe_product_name": "enterprise_linux_server_aus", + "version_number": "8.4", + "vender": "redhat" + }, + { + "cpe_product_name": "ubuntu_linux", + "version_number": "18.10", + "vender": "canonical" + }, + { + "cpe_product_name": "debian_linux", + "version_number": "8.0", + "vender": "debian" + }, + { + "cpe_product_name": "enterprise_linux_server_aus", + "version_number": "8.6", + "vender": "redhat" + }, + { + "cpe_product_name": "m10-1", + "version_number": "-", + "vender": "fujitsu" + }, + { + "cpe_product_name": "m12-1", + "version_number": "-", + "vender": "fujitsu" + } + ] + } + }, + { + "cve_uid": "", + "cve_name": "CVE-2019-6110", + "published_date": "2019-02-01T00:29:00.807Z", + "last_modified_date": "2024-02-14T23:02:10.051Z", + "vuln_status": "Analyzed", + "description": "In OpenSSH 7.9, due to accepting and displaying arbitrary stderr output from the server, a malicious server (or Man-in-The-Middle attacker) can manipulate the client output, for example to use ANSI control codes to hide additional files being transferred.", + "cvss_v2_source": "nvd@nist.gov", + "cvss_v2_type": "Primary", + "cvss_v2_version": "2.0", + "cvss_v2_vector_string": "AV:N/AC:H/Au:N/C:P/I:P/A:N", + "cvss_v2_base_score": 4, + "cvss_v2_base_severity": "MEDIUM", + "cvss_v2_exploitability_score": 4.9, + "cvss_v2_impact_score": 4.9, + "cvss_v3_source": "nvd@nist.gov", + "cvss_v3_type": "Primary", + "cvss_v3_version": "3.1", + "cvss_v3_vector_string": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "cvss_v3_base_score": 6.8, + "cvss_v3_base_severity": "MEDIUM", + "cvss_v3_exploitability_score": 1.6, + "cvss_v3_impact_score": 5.2, + "cvss_v4_source": null, + "cvss_v4_type": null, + "cvss_v4_version": null, + "cvss_v4_vector_string": null, + "cvss_v4_base_score": null, + "cvss_v4_base_severity": null, + "cvss_v4_exploitability_score": null, + "cvss_v4_impact_score": null, + "weaknesses": [ + "CWE-838" + ], + "reference_urls": [ + "https://cert-portal.siemens.com/productcert/pdf/ssa-412672.pdf", + "https://cvsweb.openbsd.org/src/usr.bin/ssh/progressmeter.c", + "https://cvsweb.openbsd.org/src/usr.bin/ssh/scp.c", + "https://security.gentoo.org/glsa/201903-16", + "https://security.netapp.com/advisory/ntap-20190213-0001/", + "https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt", + "https://www.exploit-db.com/exploits/46193/" + ], + "vender_product": { + "company": [ + { + "cpe_product_name": "ontap_select_deploy", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "scalance_x204rna_eec", + "version_number": "-", + "vender": "siemens" + }, + { + "cpe_product_name": "element_software", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "scalance_x204rna", + "version_number": "-", + "vender": "siemens" + }, + { + "cpe_product_name": "openssh", + "version_number": "*", + "vender": "openssh" + }, + { + "cpe_product_name": "storage_automation_store", + "version_number": "-", + "vender": "netapp" + }, + { + "cpe_product_name": "winscp", + "version_number": "*", + "vender": "winscp" + }, + { + "cpe_product_name": "scalance_x204rna_firmware", + "version_number": "*", + "vender": "siemens" + }, + { + "cpe_product_name": "scalance_x204rna_eec_firmware", + "version_number": "*", + "vender": "siemens" + } + ] + } + } +] \ No newline at end of file diff --git a/backend/src/tasks/sample_data/nouns.json b/backend/src/tasks/sample_data/nouns.json new file mode 100644 index 00000000..cfc2d0ff --- /dev/null +++ b/backend/src/tasks/sample_data/nouns.json @@ -0,0 +1,239 @@ +[ + "albattani", + "allen", + "almeida", + "antonelli", + "agnesi", + "archimedes", + "ardinghelli", + "aryabhata", + "austin", + "babbage", + "banach", + "banzai", + "bardeen", + "bartik", + "bassi", + "beaver", + "bell", + "benz", + "bhabha", + "bhaskara", + "black", + "blackburn", + "blackwell", + "bohr", + "booth", + "borg", + "bose", + "bouman", + "boyd", + "brahmagupta", + "brattain", + "brown", + "buck", + "burnell", + "cannon", + "carson", + "cartwright", + "carver", + "cerf", + "chandrasekhar", + "chaplygin", + "chatelet", + "chatterjee", + "chebyshev", + "cohen", + "chaum", + "clarke", + "colden", + "cori", + "cray", + "curran", + "curie", + "darwin", + "davinci", + "dewdney", + "dhawan", + "diffie", + "dijkstra", + "dirac", + "driscoll", + "dubinsky", + "easley", + "edison", + "einstein", + "elbakyan", + "elgamal", + "elion", + "ellis", + "engelbart", + "euclid", + "euler", + "faraday", + "feistel", + "fermat", + "fermi", + "feynman", + "franklin", + "gagarin", + "galileo", + "galois", + "ganguly", + "gates", + "gauss", + "germain", + "goldberg", + "goldstine", + "goldwasser", + "golick", + "goodall", + "gould", + "greider", + "grothendieck", + "haibt", + "hamilton", + "haslett", + "hawking", + "hellman", + "heisenberg", + "hermann", + "herschel", + "hertz", + "heyrovsky", + "hodgkin", + "hofstadter", + "hoover", + "hopper", + "hugle", + "hypatia", + "ishizaka", + "jackson", + "jang", + "jemison", + "jennings", + "jepsen", + "johnson", + "joliot", + "jones", + "kalam", + "kapitsa", + "kare", + "keldysh", + "keller", + "kepler", + "khayyam", + "khorana", + "kilby", + "kirch", + "knuth", + "kowalevski", + "lalande", + "lamarr", + "lamport", + "leakey", + "leavitt", + "lederberg", + "lehmann", + "lewin", + "lichterman", + "liskov", + "lovelace", + "lumiere", + "mahavira", + "margulis", + "matsumoto", + "maxwell", + "mayer", + "mccarthy", + "mcclintock", + "mclaren", + "mclean", + "mcnulty", + "mendel", + "mendeleev", + "meitner", + "meninsky", + "merkle", + "mestorf", + "mirzakhani", + "moore", + "morse", + "murdock", + "moser", + "napier", + "nash", + "neumann", + "newton", + "nightingale", + "nobel", + "noether", + "northcutt", + "noyce", + "panini", + "pare", + "pascal", + "pasteur", + "payne", + "perlman", + "pike", + "poincare", + "poitras", + "proskuriakova", + "ptolemy", + "raman", + "ramanujan", + "ride", + "montalcini", + "ritchie", + "rhodes", + "robinson", + "roentgen", + "rosalind", + "rubin", + "saha", + "sammet", + "sanderson", + "satoshi", + "shamir", + "shannon", + "shaw", + "shirley", + "shockley", + "shtern", + "sinoussi", + "snyder", + "solomon", + "spence", + "stonebraker", + "sutherland", + "swanson", + "swartz", + "swirles", + "taussig", + "tereshkova", + "tesla", + "tharp", + "thompson", + "torvalds", + "tu", + "turing", + "varahamihira", + "vaughan", + "visvesvaraya", + "volhard", + "villani", + "wescoff", + "wilbur", + "wiles", + "williams", + "williamson", + "wilson", + "wing", + "wozniak", + "wright", + "wu", + "yalow", + "yonath", + "zhukovsky" +] \ No newline at end of file diff --git a/backend/src/tasks/sample_data/services.json b/backend/src/tasks/sample_data/services.json new file mode 100644 index 00000000..b7fd4d49 --- /dev/null +++ b/backend/src/tasks/sample_data/services.json @@ -0,0 +1,7 @@ +[ + {"port": 80, "service": "http" }, + {"port": 443, "service": "https" }, + {"port": 22, "service": "ssh" }, + {"port": 25, "service": "ftp" }, + {"port": 3389, "service": "rdp" } +] \ No newline at end of file diff --git a/backend/src/tasks/sample_data/vulnerabilities.json b/backend/src/tasks/sample_data/vulnerabilities.json new file mode 100644 index 00000000..35d2c384 --- /dev/null +++ b/backend/src/tasks/sample_data/vulnerabilities.json @@ -0,0 +1,947 @@ +[ + { + "title": "CVE-2017-15906", + "cve": "CVE-2017-15906", + "cwe": "CWE-732", + "cpe": "cpe:/a:openbsd:openssh:7.4", + "description": "The process_open function in sftp-server.c in OpenSSH before 7.6 does not properly prevent write operations in readonly mode, which allows attackers to create zero-length files.", + "references": [ + { + "url": "http://www.securityfocus.com/bid/101552", + "name": "101552", + "tags": [], + "source": "BID" + }, + { + "url": "https://access.redhat.com/errata/RHSA-2018:0980", + "name": "RHSA-2018:0980", + "tags": [], + "source": "REDHAT" + }, + { + "url": "https://github.com/openbsd/src/commit/a6981567e8e215acc1ef690c8dbb30f2d9b00a19", + "name": "https://github.com/openbsd/src/commit/a6981567e8e215acc1ef690c8dbb30f2d9b00a19", + "tags": ["Third Party Advisory"], + "source": "CONFIRM" + }, + { + "url": "https://lists.debian.org/debian-lts-announce/2018/09/msg00010.html", + "name": "[debian-lts-announce] 20180910 [SECURITY] [DLA 1500-1] openssh security update", + "tags": [], + "source": "MLIST" + }, + { + "url": "https://security.gentoo.org/glsa/201801-05", + "name": "GLSA-201801-05", + "tags": [], + "source": "GENTOO" + }, + { + "url": "https://security.netapp.com/advisory/ntap-20180423-0004/", + "name": "https://security.netapp.com/advisory/ntap-20180423-0004/", + "tags": [], + "source": "CONFIRM" + }, + { + "url": "https://www.openssh.com/txt/release-7.6", + "name": "https://www.openssh.com/txt/release-7.6", + "tags": ["Vendor Advisory"], + "source": "CONFIRM" + }, + { + "url": "https://www.oracle.com/security-alerts/cpujan2020.html", + "name": "https://www.oracle.com/security-alerts/cpujan2020.html", + "tags": [], + "source": "MISC" + } + ], + "cvss": 5.3, + "severity": "Medium", + "needsPopulation": false, + "state": "open", + "substate": "unconfirmed", + "source": "cpe2cve", + "notes": "", + "actions": [] + }, + { + "title": "CVE-2018-15473", + "cve": "CVE-2018-15473", + "cwe": "CWE-362", + "cpe": "cpe:/a:openbsd:openssh:7.4", + "description": "OpenSSH through 7.7 is prone to a user enumeration vulnerability due to not delaying bailout for an invalid authenticating user until after the packet containing the request has been fully parsed, related to auth2-gss.c, auth2-hostbased.c, and auth2-pubkey.c.", + "references": [ + { + "url": "http://www.openwall.com/lists/oss-security/2018/08/15/5", + "name": "http://www.openwall.com/lists/oss-security/2018/08/15/5", + "tags": ["Mailing List", "Patch", "Third Party Advisory"], + "source": "MISC" + }, + { + "url": "http://www.securityfocus.com/bid/105140", + "name": "105140", + "tags": ["Third Party Advisory", "VDB Entry"], + "source": "BID" + }, + { + "url": "http://www.securitytracker.com/id/1041487", + "name": "1041487", + "tags": ["Patch", "Third Party Advisory", "VDB Entry"], + "source": "SECTRACK" + }, + { + "url": "https://access.redhat.com/errata/RHSA-2019:0711", + "name": "RHSA-2019:0711", + "tags": ["Third Party Advisory"], + "source": "REDHAT" + }, + { + "url": "https://access.redhat.com/errata/RHSA-2019:2143", + "name": "RHSA-2019:2143", + "tags": [], + "source": "REDHAT" + }, + { + "url": "https://bugs.debian.org/906236", + "name": "https://bugs.debian.org/906236", + "tags": [ + "Issue Tracking", + "Mailing List", + "Patch", + "Third Party Advisory" + ], + "source": "MISC" + }, + { + "url": "https://github.com/openbsd/src/commit/779974d35b4859c07bc3cb8a12c74b43b0a7d1e0", + "name": "https://github.com/openbsd/src/commit/779974d35b4859c07bc3cb8a12c74b43b0a7d1e0", + "tags": ["Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://lists.debian.org/debian-lts-announce/2018/08/msg00022.html", + "name": "[debian-lts-announce] 20180821 [SECURITY] [DLA-1474-1] openssh security update", + "tags": ["Mailing List", "Third Party Advisory"], + "source": "MLIST" + }, + { + "url": "https://psirt.global.sonicwall.com/vuln-detail/SNWLID-2018-0011", + "name": "https://psirt.global.sonicwall.com/vuln-detail/SNWLID-2018-0011", + "tags": ["Third Party Advisory"], + "source": "CONFIRM" + }, + { + "url": "https://security.gentoo.org/glsa/201810-03", + "name": "GLSA-201810-03", + "tags": ["Third Party Advisory"], + "source": "GENTOO" + }, + { + "url": "https://security.netapp.com/advisory/ntap-20181101-0001/", + "name": "https://security.netapp.com/advisory/ntap-20181101-0001/", + "tags": ["Third Party Advisory"], + "source": "CONFIRM" + }, + { + "url": "https://usn.ubuntu.com/3809-1/", + "name": "USN-3809-1", + "tags": ["Third Party Advisory"], + "source": "UBUNTU" + }, + { + "url": "https://www.debian.org/security/2018/dsa-4280", + "name": "DSA-4280", + "tags": ["Third Party Advisory"], + "source": "DEBIAN" + }, + { + "url": "https://www.exploit-db.com/exploits/45210/", + "name": "45210", + "tags": ["Exploit", "Third Party Advisory", "VDB Entry"], + "source": "EXPLOIT-DB" + }, + { + "url": "https://www.exploit-db.com/exploits/45233/", + "name": "45233", + "tags": ["Exploit", "Third Party Advisory", "VDB Entry"], + "source": "EXPLOIT-DB" + }, + { + "url": "https://www.exploit-db.com/exploits/45939/", + "name": "45939", + "tags": ["Exploit", "Third Party Advisory", "VDB Entry"], + "source": "EXPLOIT-DB" + }, + { + "url": "https://www.oracle.com/security-alerts/cpujan2020.html", + "name": "https://www.oracle.com/security-alerts/cpujan2020.html", + "tags": [], + "source": "MISC" + } + ], + "cvss": 5.3, + "severity": "Medium", + "needsPopulation": false, + "state": "open", + "substate": "unconfirmed", + "source": "cpe2cve", + "notes": "", + "actions": [] + }, + { + "title": "CVE-2018-15919", + "cve": "CVE-2018-15919", + "cwe": "CWE-200", + "cpe": "cpe:/a:openbsd:openssh:7.4", + "description": "Remotely observable behaviour in auth-gss2.c in OpenSSH through 7.8 could be used by remote attackers to detect existence of users on a target system when GSS2 is in use. NOTE: the discoverer states 'We understand that the OpenSSH developers do not want to treat such a username enumeration (or \"oracle\") as a vulnerability.'", + "references": [ + { + "url": "http://seclists.org/oss-sec/2018/q3/180", + "name": "http://seclists.org/oss-sec/2018/q3/180", + "tags": ["Mailing List", "Patch", "Third Party Advisory"], + "source": "MISC" + }, + { + "url": "http://www.securityfocus.com/bid/105163", + "name": "105163", + "tags": ["Third Party Advisory", "VDB Entry"], + "source": "BID" + }, + { + "url": "https://security.netapp.com/advisory/ntap-20181221-0001/", + "name": "https://security.netapp.com/advisory/ntap-20181221-0001/", + "tags": ["Third Party Advisory"], + "source": "CONFIRM" + } + ], + "cvss": 5.3, + "severity": "Medium", + "needsPopulation": false, + "state": "open", + "substate": "unconfirmed", + "source": "cpe2cve", + "notes": "", + "actions": [] + }, + { + "title": "CVE-2018-20685", + "cve": "CVE-2018-20685", + "cwe": "CWE-863", + "cpe": "cpe:/a:openbsd:openssh:7.4", + "description": "In OpenSSH 7.9, scp.c in the scp client allows remote SSH servers to bypass intended access restrictions via the filename of . or an empty filename. The impact is modifying the permissions of the target directory on the client side.", + "references": [ + { + "url": "http://www.securityfocus.com/bid/106531", + "name": "106531", + "tags": ["Third Party Advisory", "VDB Entry"], + "source": "BID" + }, + { + "url": "https://access.redhat.com/errata/RHSA-2019:3702", + "name": "RHSA-2019:3702", + "tags": [], + "source": "REDHAT" + }, + { + "url": "https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/scp.c.diff?r1=1.197&r2=1.198&f=h", + "name": "https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/scp.c.diff?r1=1.197&r2=1.198&f=h", + "tags": ["Patch", "Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://github.com/openssh/openssh-portable/commit/6010c0303a422a9c5fa8860c061bf7105eb7f8b2", + "name": "https://github.com/openssh/openssh-portable/commit/6010c0303a422a9c5fa8860c061bf7105eb7f8b2", + "tags": ["Patch", "Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://lists.debian.org/debian-lts-announce/2019/03/msg00030.html", + "name": "[debian-lts-announce] 20190325 [SECURITY] [DLA 1728-1] openssh security update", + "tags": ["Mailing List", "Third Party Advisory"], + "source": "MLIST" + }, + { + "url": "https://security.gentoo.org/glsa/201903-16", + "name": "GLSA-201903-16", + "tags": ["Third Party Advisory"], + "source": "GENTOO" + }, + { + "url": "https://security.gentoo.org/glsa/202007-53", + "name": "GLSA-202007-53", + "tags": [], + "source": "GENTOO" + }, + { + "url": "https://security.netapp.com/advisory/ntap-20190215-0001/", + "name": "https://security.netapp.com/advisory/ntap-20190215-0001/", + "tags": ["Third Party Advisory"], + "source": "CONFIRM" + }, + { + "url": "https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt", + "name": "https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt", + "tags": ["Patch", "Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://usn.ubuntu.com/3885-1/", + "name": "USN-3885-1", + "tags": ["Third Party Advisory"], + "source": "UBUNTU" + }, + { + "url": "https://www.debian.org/security/2019/dsa-4387", + "name": "DSA-4387", + "tags": ["Third Party Advisory"], + "source": "DEBIAN" + }, + { + "url": "https://www.oracle.com/technetwork/security-advisory/cpuapr2019-5072813.html", + "name": "https://www.oracle.com/technetwork/security-advisory/cpuapr2019-5072813.html", + "tags": ["Patch"], + "source": "MISC" + }, + { + "url": "https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html", + "name": "https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html", + "tags": [], + "source": "MISC" + } + ], + "cvss": 5.3, + "severity": "Medium", + "needsPopulation": false, + "state": "open", + "substate": "unconfirmed", + "source": "cpe2cve", + "notes": "", + "actions": [] + }, + { + "title": "CVE-2019-6109", + "cve": "CVE-2019-6109", + "cwe": "CWE-116", + "cpe": "cpe:/a:openbsd:openssh:7.4", + "description": "An issue was discovered in OpenSSH 7.9. Due to missing character encoding in the progress display, a malicious server (or Man-in-The-Middle attacker) can employ crafted object names to manipulate the client output, e.g., by using ANSI control codes to hide additional files being transferred. This affects refresh_progress_meter() in progressmeter.c.", + "references": [ + { + "url": "http://lists.opensuse.org/opensuse-security-announce/2019-06/msg00058.html", + "name": "openSUSE-SU-2019:1602", + "tags": [], + "source": "SUSE" + }, + { + "url": "https://access.redhat.com/errata/RHSA-2019:3702", + "name": "RHSA-2019:3702", + "tags": [], + "source": "REDHAT" + }, + { + "url": "https://cvsweb.openbsd.org/src/usr.bin/ssh/progressmeter.c", + "name": "https://cvsweb.openbsd.org/src/usr.bin/ssh/progressmeter.c", + "tags": ["Release Notes", "Vendor Advisory"], + "source": "MISC" + }, + { + "url": "https://cvsweb.openbsd.org/src/usr.bin/ssh/scp.c", + "name": "https://cvsweb.openbsd.org/src/usr.bin/ssh/scp.c", + "tags": ["Release Notes", "Vendor Advisory"], + "source": "MISC" + }, + { + "url": "https://lists.debian.org/debian-lts-announce/2019/03/msg00030.html", + "name": "[debian-lts-announce] 20190325 [SECURITY] [DLA 1728-1] openssh security update", + "tags": ["Third Party Advisory"], + "source": "MLIST" + }, + { + "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/W3YVQ2BPTOVDCFDVNC2GGF5P5ISFG37G/", + "name": "FEDORA-2019-0f4190cdb0", + "tags": [], + "source": "FEDORA" + }, + { + "url": "https://security.gentoo.org/glsa/201903-16", + "name": "GLSA-201903-16", + "tags": ["Third Party Advisory"], + "source": "GENTOO" + }, + { + "url": "https://security.netapp.com/advisory/ntap-20190213-0001/", + "name": "https://security.netapp.com/advisory/ntap-20190213-0001/", + "tags": ["Third Party Advisory"], + "source": "CONFIRM" + }, + { + "url": "https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt", + "name": "https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt", + "tags": ["Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://usn.ubuntu.com/3885-1/", + "name": "USN-3885-1", + "tags": ["Third Party Advisory"], + "source": "UBUNTU" + }, + { + "url": "https://www.debian.org/security/2019/dsa-4387", + "name": "DSA-4387", + "tags": ["Third Party Advisory"], + "source": "DEBIAN" + }, + { + "url": "https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html", + "name": "https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html", + "tags": [], + "source": "MISC" + } + ], + "cvss": 6.8, + "severity": "Medium", + "needsPopulation": false, + "state": "open", + "substate": "unconfirmed", + "source": "cpe2cve", + "notes": "", + "actions": [] + }, + { + "title": "CVE-2019-6110", + "cve": "CVE-2019-6110", + "cwe": "CWE-838", + "cpe": "cpe:/a:openbsd:openssh:7.4", + "description": "In OpenSSH 7.9, due to accepting and displaying arbitrary stderr output from the server, a malicious server (or Man-in-The-Middle attacker) can manipulate the client output, for example to use ANSI control codes to hide additional files being transferred.", + "references": [ + { + "url": "https://cvsweb.openbsd.org/src/usr.bin/ssh/progressmeter.c", + "name": "https://cvsweb.openbsd.org/src/usr.bin/ssh/progressmeter.c", + "tags": ["Release Notes", "Vendor Advisory"], + "source": "MISC" + }, + { + "url": "https://cvsweb.openbsd.org/src/usr.bin/ssh/scp.c", + "name": "https://cvsweb.openbsd.org/src/usr.bin/ssh/scp.c", + "tags": ["Release Notes", "Vendor Advisory"], + "source": "MISC" + }, + { + "url": "https://security.gentoo.org/glsa/201903-16", + "name": "GLSA-201903-16", + "tags": ["Third Party Advisory"], + "source": "GENTOO" + }, + { + "url": "https://security.netapp.com/advisory/ntap-20190213-0001/", + "name": "https://security.netapp.com/advisory/ntap-20190213-0001/", + "tags": ["Third Party Advisory"], + "source": "CONFIRM" + }, + { + "url": "https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt", + "name": "https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt", + "tags": ["Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://www.exploit-db.com/exploits/46193/", + "name": "46193", + "tags": ["Exploit", "Third Party Advisory", "VDB Entry"], + "source": "EXPLOIT-DB" + } + ], + "cvss": 6.8, + "severity": "Medium", + "needsPopulation": false, + "state": "open", + "substate": "unconfirmed", + "source": "cpe2cve", + "notes": "", + "actions": [] + }, + { + "title": "CVE-2019-6111", + "cve": "CVE-2019-6111", + "cwe": "CWE-22", + "cpe": "cpe:/a:openbsd:openssh:7.4", + "description": "An issue was discovered in OpenSSH 7.9. Due to the scp implementation being derived from 1983 rcp, the server chooses which files/directories are sent to the client. However, the scp client only performs cursory validation of the object name returned (only directory traversal attacks are prevented). A malicious scp server (or Man-in-The-Middle attacker) can overwrite arbitrary files in the scp client target directory. If recursive operation (-r) is performed, the server can manipulate subdirectories as well (for example, to overwrite the .ssh/authorized_keys file).", + "references": [ + { + "url": "http://lists.opensuse.org/opensuse-security-announce/2019-06/msg00058.html", + "name": "openSUSE-SU-2019:1602", + "tags": [], + "source": "SUSE" + }, + { + "url": "http://www.openwall.com/lists/oss-security/2019/04/18/1", + "name": "[oss-security] 20190417 Announce: OpenSSH 8.0 released", + "tags": [], + "source": "MLIST" + }, + { + "url": "http://www.securityfocus.com/bid/106741", + "name": "106741", + "tags": ["Third Party Advisory", "VDB Entry"], + "source": "BID" + }, + { + "url": "https://access.redhat.com/errata/RHSA-2019:3702", + "name": "RHSA-2019:3702", + "tags": [], + "source": "REDHAT" + }, + { + "url": "https://bugzilla.redhat.com/show_bug.cgi?id=1677794", + "name": "https://bugzilla.redhat.com/show_bug.cgi?id=1677794", + "tags": ["Exploit", "Issue Tracking", "Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://cvsweb.openbsd.org/src/usr.bin/ssh/scp.c", + "name": "https://cvsweb.openbsd.org/src/usr.bin/ssh/scp.c", + "tags": ["Release Notes"], + "source": "MISC" + }, + { + "url": "https://lists.apache.org/thread.html/c45d9bc90700354b58fb7455962873c44229841880dcb64842fa7d23@%3Cdev.mina.apache.org%3E", + "name": "[mina-dev] 20190620 [jira] [Created] (SSHD-925) See if SCP vulnerability CVE-2019-6111 applies and mitigate it if so", + "tags": [], + "source": "MLIST" + }, + { + "url": "https://lists.apache.org/thread.html/c7301cab36a86825359e1b725fc40304d1df56dc6d107c1fe885148b@%3Cdev.mina.apache.org%3E", + "name": "[mina-dev] 20190623 [jira] [Comment Edited] (SSHD-925) See if SCP vulnerability CVE-2019-6111 applies and mitigate it if so", + "tags": [], + "source": "MLIST" + }, + { + "url": "https://lists.apache.org/thread.html/d540139359de999b0f1c87d05b715be4d7d4bec771e1ae55153c5c7a@%3Cdev.mina.apache.org%3E", + "name": "[mina-dev] 20190820 [jira] [Resolved] (SSHD-925) See if SCP vulnerability CVE-2019-6111 applies and mitigate it if so", + "tags": [], + "source": "MLIST" + }, + { + "url": "https://lists.apache.org/thread.html/e47597433b351d6e01a5d68d610b4ba195743def9730e49561e8cf3f@%3Cdev.mina.apache.org%3E", + "name": "[mina-dev] 20190623 [jira] [Commented] (SSHD-925) See if SCP vulnerability CVE-2019-6111 applies and mitigate it if so", + "tags": [], + "source": "MLIST" + }, + { + "url": "https://lists.debian.org/debian-lts-announce/2019/03/msg00030.html", + "name": "[debian-lts-announce] 20190325 [SECURITY] [DLA 1728-1] openssh security update", + "tags": ["Mailing List", "Third Party Advisory"], + "source": "MLIST" + }, + { + "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/W3YVQ2BPTOVDCFDVNC2GGF5P5ISFG37G/", + "name": "FEDORA-2019-0f4190cdb0", + "tags": [], + "source": "FEDORA" + }, + { + "url": "https://security.gentoo.org/glsa/201903-16", + "name": "GLSA-201903-16", + "tags": ["Third Party Advisory"], + "source": "GENTOO" + }, + { + "url": "https://security.netapp.com/advisory/ntap-20190213-0001/", + "name": "https://security.netapp.com/advisory/ntap-20190213-0001/", + "tags": ["Third Party Advisory"], + "source": "CONFIRM" + }, + { + "url": "https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt", + "name": "https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt", + "tags": ["Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://usn.ubuntu.com/3885-1/", + "name": "USN-3885-1", + "tags": ["Third Party Advisory"], + "source": "UBUNTU" + }, + { + "url": "https://usn.ubuntu.com/3885-2/", + "name": "USN-3885-2", + "tags": ["Third Party Advisory"], + "source": "UBUNTU" + }, + { + "url": "https://www.debian.org/security/2019/dsa-4387", + "name": "DSA-4387", + "tags": ["Third Party Advisory"], + "source": "DEBIAN" + }, + { + "url": "https://www.exploit-db.com/exploits/46193/", + "name": "46193", + "tags": ["Exploit", "Third Party Advisory", "VDB Entry"], + "source": "EXPLOIT-DB" + }, + { + "url": "https://www.freebsd.org/security/advisories/FreeBSD-EN-19:10.scp.asc", + "name": "FreeBSD-EN-19:10", + "tags": [], + "source": "FREEBSD" + }, + { + "url": "https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html", + "name": "https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html", + "tags": [], + "source": "MISC" + } + ], + "cvss": 5.9, + "severity": "Medium", + "needsPopulation": false, + "state": "open", + "substate": "unconfirmed", + "source": "cpe2cve", + "notes": "", + "actions": [] + }, + { + "title": "CVE-2020-14145", + "cve": "CVE-2020-14145", + "cwe": "CWE-200", + "cpe": "cpe:/a:openbsd:openssh:7.4", + "description": "The client side in OpenSSH 5.7 through 8.4 has an Observable Discrepancy leading to an information leak in the algorithm negotiation. This allows man-in-the-middle attackers to target initial connection attempts (where no host key for the server has been cached by the client).", + "references": [ + { + "url": "http://www.openwall.com/lists/oss-security/2020/12/02/1", + "name": "[oss-security] 20201202 Some mitigation for openssh CVE-2020-14145", + "tags": ["Mailing List", "Patch", "Third Party Advisory"], + "source": "MLIST" + }, + { + "url": "https://anongit.mindrot.org/openssh.git/commit/?id=b3855ff053f5078ec3d3c653cdaedefaa5fc362d", + "name": "https://anongit.mindrot.org/openssh.git/commit/?id=b3855ff053f5078ec3d3c653cdaedefaa5fc362d", + "tags": ["Patch", "Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://docs.ssh-mitm.at/CVE-2020-14145.html", + "name": "https://docs.ssh-mitm.at/CVE-2020-14145.html", + "tags": ["Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://github.com/openssh/openssh-portable/compare/V_8_3_P1...V_8_4_P1", + "name": "https://github.com/openssh/openssh-portable/compare/V_8_3_P1...V_8_4_P1", + "tags": ["Patch", "Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://github.com/ssh-mitm/ssh-mitm/blob/master/ssh_proxy_server/plugins/session/cve202014145.py", + "name": "https://github.com/ssh-mitm/ssh-mitm/blob/master/ssh_proxy_server/plugins/session/cve202014145.py", + "tags": ["Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://security.netapp.com/advisory/ntap-20200709-0004/", + "name": "https://security.netapp.com/advisory/ntap-20200709-0004/", + "tags": ["Third Party Advisory"], + "source": "CONFIRM" + }, + { + "url": "https://www.fzi.de/en/news/news/detail-en/artikel/fsa-2020-2-ausnutzung-eines-informationslecks-fuer-gezielte-mitm-angriffe-auf-ssh-clients/", + "name": "https://www.fzi.de/en/news/news/detail-en/artikel/fsa-2020-2-ausnutzung-eines-informationslecks-fuer-gezielte-mitm-angriffe-auf-ssh-clients/", + "tags": ["Third Party Advisory"], + "source": "MISC" + } + ], + "cvss": 5.9, + "severity": "Medium", + "needsPopulation": false, + "state": "open", + "substate": "unconfirmed", + "source": "cpe2cve", + "notes": "", + "actions": [] + }, + { + "title": "CVE-2020-15778", + "cve": "CVE-2020-15778", + "cwe": "CWE-78", + "cpe": "cpe:/a:openbsd:openssh:7.4", + "description": "scp in OpenSSH through 8.3p1 allows command injection in the scp.c toremote function, as demonstrated by backtick characters in the destination argument. NOTE: the vendor reportedly has stated that they intentionally omit validation of \"anomalous argument transfers\" because that could \"stand a great chance of breaking existing workflows.\"", + "references": [ + { + "url": "https://github.com/cpandya2909/CVE-2020-15778/", + "name": "https://github.com/cpandya2909/CVE-2020-15778/", + "tags": ["Exploit", "Third Party Advisory"], + "source": "MISC" + }, + { + "url": "https://news.ycombinator.com/item?id=25005567", + "name": "https://news.ycombinator.com/item?id=25005567", + "tags": [], + "source": "MISC" + }, + { + "url": "https://security.netapp.com/advisory/ntap-20200731-0007/", + "name": "https://security.netapp.com/advisory/ntap-20200731-0007/", + "tags": [], + "source": "CONFIRM" + }, + { + "url": "https://www.openssh.com/security.html", + "name": "https://www.openssh.com/security.html", + "tags": ["Vendor Advisory"], + "source": "MISC" + } + ], + "cvss": 7.8, + "severity": "High", + "needsPopulation": false, + "state": "open", + "substate": "unconfirmed", + "source": "cpe2cve", + "notes": "", + "actions": [] + }, + { + "title": "Exposed Emails", + "cve": null, + "cwe": null, + "cpe": null, + "description": "Emails associated with this Domain have been exposed in a breach. See Data field for a list of emails", + "cvss": null, + "severity": "Low", + "needsPopulation": false, + "state": "open", + "substate": "unconfirmed", + "source": "hibp", + "structuredData": { + "emails": { + "Email_11@crossfeed.local": ["breach12", "breach17"], + "Email_13@crossfeed.local": ["breach14", "breach3"], + "Email_64@crossfeed.local": ["breach24"], + "Email_32@crossfeed.local": ["breach22"], + "Email_17@crossfeed.local": ["breach54", "breach2"] + }, + "breaches": { + "breach_12": { + "Name": "Breach_12", + "Title": "Breach_12", + "Domain": "Breach_12.com", + "BreachDate": "2017-02-01", + "AddedDate": "2017-10-26T23:35:45Z", + "ModifiedDate": "2017-12-10T21:44:27Z", + "PwnCount": 8393093, + "Description": "Mock Breach number 12", + "LogoPath": "https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_12.png", + "DataClasses": [ + "Email addresses", + "IP addresses", + "Names", + "Passwords" + ], + "IsVerified": true, + "IsFabricated": false, + "IsSensitive": false, + "IsRetired": false, + "IsSpamList": false + }, + "breach_17": { + "Name": "Breach_17", + "Title": "Breach_17", + "Domain": "Breach_17.com", + "BreachDate": "2017-02-01", + "AddedDate": "2017-10-26T23:35:45Z", + "ModifiedDate": "2017-12-10T21:44:27Z", + "PwnCount": 8393093, + "Description": "Mock Breach number 17", + "LogoPath": "https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_17.png", + "DataClasses": [ + "Email addresses", + "IP addresses", + "Names", + "Passwords" + ], + "IsVerified": true, + "IsFabricated": false, + "IsSensitive": false, + "IsRetired": false, + "IsSpamList": false + }, + "breach_14": { + "Name": "Breach_14", + "Title": "Breach_14", + "Domain": "Breach_14.com", + "BreachDate": "2017-02-01", + "AddedDate": "2017-10-26T23:35:45Z", + "ModifiedDate": "2017-12-10T21:44:27Z", + "PwnCount": 8393093, + "Description": "Mock Breach number 14", + "LogoPath": "https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_14.png", + "DataClasses": [ + "Email addresses", + "IP addresses", + "Names", + "Passwords" + ], + "IsVerified": true, + "IsFabricated": false, + "IsSensitive": false, + "IsRetired": false, + "IsSpamList": false + }, + "breach_3": { + "Name": "Breach_3", + "Title": "Breach_3", + "Domain": "Breach_3.com", + "BreachDate": "2017-02-01", + "AddedDate": "2017-10-26T23:35:45Z", + "ModifiedDate": "2017-12-10T21:44:27Z", + "PwnCount": 8393093, + "Description": "Mock Breach number 3", + "LogoPath": "https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_12.png", + "DataClasses": [ + "Email addresses", + "IP addresses", + "Names", + "Passwords" + ], + "IsVerified": true, + "IsFabricated": false, + "IsSensitive": false, + "IsRetired": false, + "IsSpamList": false + }, + "breach_25": { + "Name": "Breach_24", + "Title": "Breach_24", + "Domain": "Breach_24.com", + "BreachDate": "2017-02-01", + "AddedDate": "2017-10-26T23:35:45Z", + "ModifiedDate": "2017-12-10T21:44:27Z", + "PwnCount": 8393093, + "Description": "Mock Breach number 24", + "LogoPath": "https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_24.png", + "DataClasses": [ + "Email addresses", + "IP addresses", + "Names", + "Passwords" + ], + "IsVerified": true, + "IsFabricated": false, + "IsSensitive": false, + "IsRetired": false, + "IsSpamList": false + }, + "breach_22": { + "Name": "Breach_22", + "Title": "Breach_22", + "Domain": "Breach_22.com", + "BreachDate": "2017-02-01", + "AddedDate": "2017-10-26T23:35:45Z", + "ModifiedDate": "2017-12-10T21:44:27Z", + "PwnCount": 8393093, + "Description": "Mock Breach number 22", + "LogoPath": "https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_22.png", + "DataClasses": [ + "Email addresses", + "IP addresses", + "Names", + "Passwords" + ], + "IsVerified": true, + "IsFabricated": false, + "IsSensitive": false, + "IsRetired": false, + "IsSpamList": false + }, + "breach_54": { + "Name": "Breach_54", + "Title": "Breach_54", + "Domain": "Breach_54.com", + "BreachDate": "2017-02-01", + "AddedDate": "2017-10-26T23:35:45Z", + "ModifiedDate": "2017-12-10T21:44:27Z", + "PwnCount": 8393093, + "Description": "Mock Breach number 54", + "LogoPath": "https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_54.png", + "DataClasses": [ + "Email addresses", + "IP addresses", + "Names", + "Passwords" + ], + "IsVerified": true, + "IsFabricated": false, + "IsSensitive": false, + "IsRetired": false, + "IsSpamList": false + }, + "breach_2": { + "Name": "Breach_2", + "Title": "Breach_2", + "Domain": "Breach_2.com", + "BreachDate": "2017-02-01", + "AddedDate": "2017-10-26T23:35:45Z", + "ModifiedDate": "2017-12-10T21:44:27Z", + "PwnCount": 8393093, + "Description": "Mock Breach number 2", + "LogoPath": "https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_2.png", + "DataClasses": [ + "Email addresses", + "IP addresses", + "Names", + "Passwords" + ], + "IsVerified": true, + "IsFabricated": false, + "IsSensitive": false, + "IsRetired": false, + "IsSpamList": false + } + } + }, + "notes": "", + "actions": [] + }, + { + "title": "DNS Twist Domains", + "cve": null, + "cwe": null, + "cpe": null, + "description": "Domain name permutation engine for detecting similar registered domains", + "cvss": null, + "severity": "Low", + "needsPopulation": false, + "state": "open", + "substate": "unconfirmed", + "source": "dnstwist", + "structuredData": { + "domains": [ + { + "fuzzer": "Homoglyph", + "domain-name": "test-domain.one", + "dns-a": ["21.22.23.24"], + "date-observed": "2019-04-22T10:20:30Z" + }, + { + "fuzzer": "Original", + "domain-name": "test-domain.two", + "dns-a": ["01.02.03.04"], + "dns-mx": ["localhost"], + "date-observed": "2019-04-22T10:20:30Z" + }, + { + "fuzzer": "tls", + "domain-name": "test-domain.three", + "dns-a": ["10.11.12.13"], + "dns-ns": ["example.link"], + "date-observed": "2019-04-22T10:20:30Z" + } + ] + }, + "notes": "", + "actions": [] + } +] diff --git a/backend/src/tasks/saved-search.ts b/backend/src/tasks/saved-search.ts new file mode 100644 index 00000000..cc63911b --- /dev/null +++ b/backend/src/tasks/saved-search.ts @@ -0,0 +1,71 @@ +import { CommandOptions } from './ecs-client'; +import { SavedSearch, connectToDatabase, Vulnerability, User } from '../models'; +import ESClient from './es-client'; +import { buildRequest } from '../api/search/buildRequest'; +import { plainToClass } from 'class-transformer'; +import saveVulnerabilitiesToDb from './helpers/saveVulnerabilitiesToDb'; +import { + getOrgMemberships, + isGlobalViewAdmin, + userTokenBody +} from '../api/auth'; +import { fetchAllResults } from '../api/search'; + +export const handler = async (commandOptions: CommandOptions) => { + console.log('Running saved search'); + + await connectToDatabase(); + const savedSearches = await SavedSearch.find(); + for (const search of savedSearches) { + const filters = { + searchTerm: search.searchTerm, + sortDirection: search.sortDirection, + sortField: search.sortField, + filters: search.filters + }; + const user = await User.findOne(search.createdBy); + const event = { + requestContext: { authorizer: userTokenBody(user) } + } as any; + const restrictions = { + organizationIds: getOrgMemberships(event), + matchAllOrganizations: isGlobalViewAdmin(event) + }; + const request = buildRequest( + { + current: 1, + resultsPerPage: 1, + ...filters + }, + restrictions + ); + let searchResults; + try { + const client = new ESClient(); + searchResults = await client.searchDomains(request); + } catch (e) { + console.error(e.meta.body.error); + continue; + } + const hits: number = searchResults.body.hits.total.value; + search.count = hits; + search.save(); + + if (search.createVulnerabilities) { + const results = await fetchAllResults(filters, restrictions); + const vulnerabilities: Vulnerability[] = results.map((domain) => + plainToClass(Vulnerability, { + domain: domain, + lastSeen: new Date(Date.now()), + ...search.vulnerabilityTemplate, + state: 'open', + source: 'saved-search', + needsPopulation: false + }) + ); + await saveVulnerabilitiesToDb(vulnerabilities, false); + } + } + + console.log(`Saved search finished for ${savedSearches.length} searches`); +}; diff --git a/backend/src/tasks/scanExecution.ts b/backend/src/tasks/scanExecution.ts new file mode 100644 index 00000000..93bbd63b --- /dev/null +++ b/backend/src/tasks/scanExecution.ts @@ -0,0 +1,241 @@ +import { Handler, SQSRecord } from 'aws-lambda'; +import * as AWS from 'aws-sdk'; +import { integer } from 'aws-sdk/clients/cloudfront'; +import { connect } from 'amqplib'; + +const ecs = new AWS.ECS(); +const sqs = new AWS.SQS(); +let docker; +if (process.env.IS_LOCAL) { + docker = require('dockerode'); +} + +const toSnakeCase = (input) => input.replace(/ /g, '-'); + +async function updateServiceAndQueue( + queueUrl: string, + serviceName: string, + desiredCount: integer, + message_body: any, // Add this parameter + clusterName: string // Add this parameter +) { + // Place message in scan specific queue + if (process.env.IS_LOCAL) { + // If running locally, use RabbitMQ instead of SQS + console.log('Publishing to rabbitMQ'); + await publishToRabbitMQ(queueUrl, message_body); + console.log('Done publishing to rabbitMQ'); + } else { + // Place in AWS SQS queue + console.log('Publishing to scan specific queue'); + await placeMessageInQueue(queueUrl, message_body); + } + + // Check if Fargate is running desired count and start if not + await updateServiceDesiredCount( + clusterName, + serviceName, + desiredCount, + queueUrl + ); + console.log('Done'); +} + +export async function updateServiceDesiredCount( + clusterName: string, + serviceName: string, + desiredCountNum: integer, + queueUrl: string +) { + try { + if (process.env.IS_LOCAL) { + console.log('starting local containers'); + await startLocalContainers(desiredCountNum, serviceName, queueUrl); + } else { + const describeServiceParams = { + cluster: clusterName, + services: [serviceName] + }; + const serviceDescription = await ecs + .describeServices(describeServiceParams) + .promise(); + if ( + serviceDescription && + serviceDescription.services && + serviceDescription.services.length > 0 + ) { + const service = serviceDescription.services[0]; + + // Check if the desired task count is less than # provided + if (service.desiredCount !== desiredCountNum) { + console.log('Setting desired count.'); + const updateServiceParams = { + cluster: clusterName, + service: serviceName, + desiredCount: desiredCountNum // Set to desired # of Fargate tasks + }; + + await ecs.updateService(updateServiceParams).promise(); + } else { + console.log('Desired count already set.'); + } + } + } + } catch (error) { + console.error('Error: ', error); + } +} + +async function startLocalContainers( + count: number, + serviceName: string, + queueUrl: string +) { + // Start 'count' number of local Docker containers + for (let i = 0; i < count; i++) { + try { + const containerName = toSnakeCase( + `crossfeed_worker_${serviceName}_${i}_` + + Math.floor(Math.random() * 10000000) + ); + const container = await docker!.createContainer({ + // We need to create unique container names to avoid conflicts. + name: containerName, + Image: 'pe-worker', + HostConfig: { + // In order to use the host name "db" to access the database from the + // crossfeed-worker image, we must launch the Docker container with + // the Crossfeed backend network. + NetworkMode: 'crossfeed_backend', + Memory: 4000000000 // Limit memory to 4 GB. We do this locally to better emulate fargate memory conditions. TODO: In the future, we could read the exact memory from SCAN_SCHEMA to better emulate memory requirements for each scan. + }, + Env: [ + `DB_DIALECT=${process.env.DB_DIALECT}`, + `DB_HOST=${process.env.DB_HOST}`, + `IS_LOCAL=true`, + `DB_PORT=${process.env.DB_PORT}`, + `DB_NAME=${process.env.DB_NAME}`, + `DB_USERNAME=${process.env.DB_USERNAME}`, + `DB_PASSWORD=${process.env.DB_PASSWORD}`, + `PE_DB_NAME=${process.env.PE_DB_NAME}`, + `PE_DB_USERNAME=${process.env.PE_DB_USERNAME}`, + `PE_DB_PASSWORD=${process.env.PE_DB_PASSWORD}`, + `CENSYS_API_ID=${process.env.CENSYS_API_ID}`, + `CENSYS_API_SECRET=${process.env.CENSYS_API_SECRET}`, + `WORKER_USER_AGENT=${process.env.WORKER_USER_AGENT}`, + `SHODAN_API_KEY=${process.env.SHODAN_API_KEY}`, + `HIBP_API_KEY=${process.env.HIBP_API_KEY}`, + `SIXGILL_CLIENT_ID=${process.env.SIXGILL_CLIENT_ID}`, + `SIXGILL_CLIENT_SECRET=${process.env.SIXGILL_CLIENT_SECRET}`, + `INTELX_API_KEY=${process.env.INTELX_API_KEY}`, + `PE_SHODAN_API_KEYS=${process.env.PE_SHODAN_API_KEYS}`, + `WORKER_SIGNATURE_PUBLIC_KEY=${process.env.WORKER_SIGNATURE_PUBLIC_KEY}`, + `WORKER_SIGNATURE_PRIVATE_KEY=${process.env.WORKER_SIGNATURE_PRIVATE_KEY}`, + `ELASTICSEARCH_ENDPOINT=${process.env.ELASTICSEARCH_ENDPOINT}`, + `AWS_ACCESS_KEY_ID=${process.env.AWS_ACCESS_KEY_ID}`, + `AWS_SECRET_ACCESS_KEY=${process.env.AWS_SECRET_ACCESS_KEY}`, + `AWS_REGION=${process.env.AWS_REGION}`, + `LG_API_KEY=${process.env.LG_API_KEY}`, + `LG_WORKSPACE_NAME=${process.env.LG_WORKSPACE_NAME}`, + `SERVICE_QUEUE_URL=${queueUrl}`, + `SERVICE_TYPE=${serviceName}` + ] + } as any); + await container.start(); + console.log(`done starting container ${i}`); + } catch (e) { + console.error(e); + } + } +} + +// Place message in AWS SQS Queue +async function placeMessageInQueue(queueUrl: string, message: any) { + const sendMessageParams = { + QueueUrl: queueUrl, + MessageBody: JSON.stringify(message) + }; + + await sqs.sendMessage(sendMessageParams).promise(); +} + +// Function to connect to RabbitMQ and publish a message +async function publishToRabbitMQ(queue: string, message: any) { + const connection = await connect('amqp://rabbitmq'); + const channel = await connection.createChannel(); + + await channel.assertQueue(queue, { durable: true }); + await channel.sendToQueue(queue, Buffer.from(JSON.stringify(message))); + + await channel.close(); + await connection.close(); +} + +export const handler: Handler = async (event) => { + try { + let desiredCount; + const clusterName = process.env.PE_CLUSTER_NAME!; + + // Get the Control SQS record and message body + const sqsRecord: SQSRecord = event.Records[0]; + const message_body = JSON.parse(sqsRecord.body); + console.log(message_body); + + if (message_body.scriptType === 'shodan') { + desiredCount = 5; + await updateServiceAndQueue( + process.env.SHODAN_QUEUE_URL!, + process.env.SHODAN_SERVICE_NAME!, + desiredCount, + message_body, + clusterName + ); + } else if (message_body.scriptType === 'dnstwist') { + desiredCount = 30; + await updateServiceAndQueue( + process.env.DNSTWIST_QUEUE_URL!, + process.env.DNSTWIST_SERVICE_NAME!, + desiredCount, + message_body, + clusterName + ); + } else if (message_body.scriptType === 'hibp') { + desiredCount = 20; + await updateServiceAndQueue( + process.env.HIBP_QUEUE_URL!, + process.env.HIBP_SERVICE_NAME!, + desiredCount, + message_body, + clusterName + ); + } else if (message_body.scriptType === 'intelx') { + desiredCount = 10; + await updateServiceAndQueue( + process.env.INTELX_QUEUE_URL!, + process.env.INTELX_SERVICE_NAME!, + desiredCount, + message_body, + clusterName + ); + } else if (message_body.scriptType === 'cybersixgill') { + desiredCount = 10; + await updateServiceAndQueue( + process.env.CYBERSIXGILL_QUEUE_URL!, + process.env.CYBERSIXGILL_SERVICE_NAME!, + desiredCount, + message_body, + clusterName + ); + } else { + console.log( + 'Shodan, DNSTwist, HIBP, and Cybersixgill are the only script types available right now.' + ); + } + } catch (error) { + console.error(error); + return { + statusCode: 500, + body: JSON.stringify(error) + }; + } +}; diff --git a/backend/src/tasks/scheduler.ts b/backend/src/tasks/scheduler.ts new file mode 100644 index 00000000..b38ec833 --- /dev/null +++ b/backend/src/tasks/scheduler.ts @@ -0,0 +1,366 @@ +import { Handler } from 'aws-lambda'; +import { connectToDatabase, Scan, Organization, ScanTask } from '../models'; +import ECSClient from './ecs-client'; +import { SCAN_SCHEMA } from '../api/scans'; +import { In, IsNull, Not } from 'typeorm'; +import getScanOrganizations from './helpers/getScanOrganizations'; +import { chunk } from 'lodash'; + +class Scheduler { + ecs: ECSClient; + numExistingTasks: number; + numLaunchedTasks: number; + maxConcurrentTasks: number; + scans: Scan[]; + organizations: Organization[]; + queuedScanTasks: ScanTask[]; + orgsPerScanTask: number; + + constructor() {} + + async initialize({ + scans, + organizations, + queuedScanTasks, + orgsPerScanTask + }: { + scans: Scan[]; + organizations: Organization[]; + queuedScanTasks: ScanTask[]; + orgsPerScanTask: number; + }) { + this.scans = scans; + this.organizations = organizations; + this.queuedScanTasks = queuedScanTasks; + this.ecs = new ECSClient(); + this.numExistingTasks = await this.ecs.getNumTasks(); + this.numLaunchedTasks = 0; + this.maxConcurrentTasks = Number(process.env.FARGATE_MAX_CONCURRENCY!); + this.orgsPerScanTask = orgsPerScanTask; + + console.log('Number of running Fargate tasks: ', this.numExistingTasks); + console.log('Number of queued scan tasks: ', this.queuedScanTasks.length); + } + + launchSingleScanTask = async ({ + organizations = [], + scan, + chunkNumber, + numChunks, + scanTask + }: { + organizations?: Organization[]; + scan: Scan; + chunkNumber?: number; + numChunks?: number; + scanTask?: ScanTask; + }) => { + const { type, global } = SCAN_SCHEMA[scan.name]; + + const ecsClient = new ECSClient(); + scanTask = + scanTask ?? + (await ScanTask.create({ + organizations: global ? [] : organizations, + scan, + type, + status: 'created' + }).save()); + + const commandOptions = scanTask.input + ? JSON.parse(scanTask.input) + : { + organizations: organizations.map((e) => ({ name: e.name, id: e.id })), + scanId: scan.id, + scanName: scan.name, + scanTaskId: scanTask.id, + numChunks, + chunkNumber, + isSingleScan: scan.isSingleScan + }; + + scanTask.input = JSON.stringify(commandOptions); + + if (this.reachedScanLimit()) { + scanTask.status = 'queued'; + if (!scanTask.queuedAt) { + scanTask.queuedAt = new Date(); + } + console.log( + 'Reached maximum concurrency, queueing scantask', + scanTask.id + ); + await scanTask.save(); + return; + } + + try { + if (type === 'fargate') { + const result = await ecsClient.runCommand(commandOptions); + if (result.tasks!.length === 0) { + console.error(result.failures); + throw new Error( + `Failed to start fargate task for scan ${scan.name} -- got ${ + result.failures!.length + } failures.` + ); + } + const taskArn = result.tasks![0].taskArn; + scanTask.fargateTaskArn = taskArn; + if (typeof jest === 'undefined') { + console.log( + `Successfully invoked ${scan.name} scan with fargate on ${organizations.length} organizations, with ECS task ARN ${taskArn}` + + (commandOptions.numChunks + ? `, Chunk ${commandOptions.chunkNumber}/${commandOptions.numChunks}` + : '') + ); + } + } else { + throw new Error('Invalid type ' + type); + } + scanTask.status = 'requested'; + scanTask.requestedAt = new Date(); + this.numLaunchedTasks++; + } catch (error) { + console.error(`Error invoking ${scan.name} scan.`); + console.error(error); + scanTask.output = JSON.stringify(error); + scanTask.status = 'failed'; + scanTask.finishedAt = new Date(); + } + await scanTask.save(); + }; + + launchScanTask = async ({ + organizations = [], + scan + }: { + organizations?: Organization[]; + scan: Scan; + }) => { + let { numChunks } = SCAN_SCHEMA[scan.name]; + if (numChunks) { + if (typeof jest === 'undefined' && process.env.IS_LOCAL) { + // For running server on localhost -- doesn't apply in jest tests, though. + numChunks = 1; + } + // Sanitizes numChunks to protect against arbitrarily large numbers + numChunks = numChunks > 100 ? 100 : numChunks; + for (let chunkNumber = 0; chunkNumber < numChunks; chunkNumber++) { + await this.launchSingleScanTask({ + organizations, + scan, + chunkNumber, + numChunks: numChunks + }); + } + } else { + await this.launchSingleScanTask({ organizations, scan }); + } + }; + + reachedScanLimit() { + return ( + this.numExistingTasks + this.numLaunchedTasks >= this.maxConcurrentTasks + ); + } + + async run() { + for (const scan of this.scans) { + const prev_numLaunchedTasks = this.numLaunchedTasks; + + if (!SCAN_SCHEMA[scan.name]) { + console.error('Invalid scan name ', scan.name); + continue; + } + const { global } = SCAN_SCHEMA[scan.name]; + if (global) { + // Global scans are not associated with an organization. + if (!(await shouldRunScan({ scan }))) { + continue; + } + await this.launchScanTask({ scan }); + } else { + const organizations = scan.isGranular + ? getScanOrganizations(scan) + : this.organizations; + const orgsToLaunch: Organization[] = []; + for (const organization of organizations) { + if (!(await shouldRunScan({ organization, scan }))) { + continue; + } + orgsToLaunch.push(organization); + } + // Split the organizations in orgsToLaunch into chunks of size + // this.orgsPerScanTask, then launch organizations for each one. + for (const orgs of chunk(orgsToLaunch, this.orgsPerScanTask)) { + await this.launchScanTask({ organizations: orgs, scan }); + } + } + console.log( + 'Launched', + this.numLaunchedTasks, + 'scanTasks for scan', + scan.name + ); + // If at least 1 new scan task was launched for this scan, update the scan + if (this.numLaunchedTasks > prev_numLaunchedTasks) { + scan.lastRun = new Date(); + scan.manualRunPending = false; + await scan.save(); + } + } + } + + async runQueued() { + for (const scanTask of this.queuedScanTasks) { + await this.launchSingleScanTask({ scanTask, scan: scanTask.scan }); + } + } +} + +const shouldRunScan = async ({ + organization, + scan +}: { + organization?: Organization; + scan: Scan; +}) => { + const { isPassive, global } = SCAN_SCHEMA[scan.name]; + if (organization?.isPassive && !isPassive) { + // Don't run non-passive scans on passive organizations. + return false; + } + if (scan.manualRunPending) { + // Always run these scans. + return true; + } + const filterQuery = (qs) => { + /** + * Perform a filter to find a matching ScanTask that ran on the current org. + * The first filter checks for ScanTasks with the "organization" property set to the current org, + * and the second filter checks for ScanTasks that are assigned to multiple orgnaizations. + */ + if (global) { + return qs; + } else { + return qs.andWhere( + '(scan_task."organizationId" = :org OR organizations.id = :org)', + { + org: organization?.id + } + ); + } + }; + const lastRunningScanTask = await filterQuery( + ScanTask.createQueryBuilder('scan_task') + .leftJoinAndSelect('scan_task.organizations', 'organizations') + .where('scan_task."scanId" = :id', { id: scan.id }) + .andWhere('scan_task.status IN (:...statuses)', { + statuses: ['created', 'queued', 'requested', 'started'] + }) + .groupBy('scan_task.id,organizations.id') + .orderBy('scan_task."createdAt"', 'DESC') + ).getOne(); + + if (lastRunningScanTask) { + // Don't run another task if there's already a running or queued task. + return false; + } + const lastFinishedScanTask = await filterQuery( + ScanTask.createQueryBuilder('scan_task') + .leftJoinAndSelect('scan_task.organizations', 'organizations') + .andWhere('scan_task."scanId" = :id', { id: scan.id }) + .andWhere('scan_task.status IN (:...statuses)', { + statuses: ['finished', 'failed'] + }) + .andWhere('scan_task."finishedAt" IS NOT NULL') + .groupBy('scan_task.id,organizations.id') + .orderBy('scan_task."finishedAt"', 'DESC') + ).getOne(); + + if ( + lastFinishedScanTask && + lastFinishedScanTask.finishedAt && + lastFinishedScanTask.finishedAt.getTime() >= + new Date().getTime() - 1000 * scan.frequency + ) { + return false; + } + if ( + lastFinishedScanTask && + lastFinishedScanTask.finishedAt && + scan.isSingleScan + ) { + // Should not run a scan if the scan is a singleScan + // and has already run once before. + return false; + } + return true; +}; + +// These two arguments are currently used only for testing purposes. +interface Event { + // If specified, limits scheduling to a particular scan + scanId?: string; + + // If specified, limits scheduling to list of scans. + scanIds?: string[]; + + // If specified, limits scheduling to list of organizations + // (includes global scans on all organizations as well). + organizationIds?: string[]; + + // Number of organizations that should be batched into each ScanTask. + // Increase this number when there are many organizations, in order to batch + // many organizations into a smaller number of ScanTasks, rather than having + // to have one ScanTask per organization. + // Defaults to process.env.SCHEDULER_ORGS_PER_SCANTASK or 1. + orgsPerScanTask?: number; +} + +export const handler: Handler = async (event) => { + await connectToDatabase(); + console.log('Running scheduler...'); + + const scanIds = event.scanIds || []; + if (event.scanId) { + scanIds.push(event.scanId); + } + const scanWhere = scanIds.length ? { id: In(scanIds) } : {}; + const orgWhere = event.organizationIds?.length + ? { id: In(event.organizationIds) } + : {}; + const scans = await Scan.find({ + where: scanWhere, + relations: ['organizations', 'tags', 'tags.organizations'] + }); + const organizations = await Organization.find({ + where: orgWhere + }); + + const queuedScanTasks = await ScanTask.find({ + where: { + scan: scanWhere, + status: 'queued' + }, + order: { + queuedAt: 'ASC' + }, + relations: ['scan'] + }); + + const scheduler = new Scheduler(); + await scheduler.initialize({ + scans, + organizations, + queuedScanTasks, + orgsPerScanTask: + event.orgsPerScanTask || + parseInt(process.env.SCHEDULER_ORGS_PER_SCANTASK || '') || + 1 + }); + await scheduler.runQueued(); + await scheduler.run(); + console.log('Finished running scheduler.'); +}; diff --git a/backend/src/tasks/search-sync.ts b/backend/src/tasks/search-sync.ts new file mode 100644 index 00000000..3d674db8 --- /dev/null +++ b/backend/src/tasks/search-sync.ts @@ -0,0 +1,67 @@ +import { Domain, connectToDatabase, Vulnerability, Webpage } from '../models'; +import { CommandOptions } from './ecs-client'; +import { In } from 'typeorm'; +import ESClient from './es-client'; +import { chunk } from 'lodash'; +import pRetry from 'p-retry'; + +/** + * Chunk sizes. These values are small during testing to facilitate testing. + */ +export const DOMAIN_CHUNK_SIZE = typeof jest === 'undefined' ? 50 : 10; + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, domainId } = commandOptions; + + console.log('Running searchSync'); + await connectToDatabase(); + + const client = new ESClient(); + + const qs = Domain.createQueryBuilder('domain') + .leftJoinAndSelect('domain.organization', 'organization') + .leftJoinAndSelect('domain.vulnerabilities', 'vulnerabilities') + .leftJoinAndSelect('domain.services', 'services') + .having('domain.syncedAt is null') + .orHaving('domain.updatedAt > domain.syncedAt') + .orHaving('organization.updatedAt > domain.syncedAt') + .orHaving( + 'COUNT(CASE WHEN vulnerabilities.updatedAt > domain.syncedAt THEN 1 END) >= 1' + ) + .orHaving( + 'COUNT(CASE WHEN services.updatedAt > domain.syncedAt THEN 1 END) >= 1' + ) + .groupBy('domain.id, organization.id, vulnerabilities.id, services.id') + .select(['domain.id']); + + if (organizationId) { + // This parameter is used for testing only + qs.where('organization.id=:org', { org: organizationId }); + } + + const domainIds = (await qs.getMany()).map((e) => e.id); + console.log(`Got ${domainIds.length} domains.`); + if (domainIds.length) { + const domainIdChunks = chunk(domainIds, DOMAIN_CHUNK_SIZE); + for (const domainIdChunk of domainIdChunks) { + const domains = await Domain.find({ + where: { id: In(domainIdChunk) }, + relations: ['services', 'organization', 'vulnerabilities'] + }); + console.log(`Syncing ${domains.length} domains...`); + await pRetry(() => client.updateDomains(domains), { + retries: 3, + randomize: true + }); + + await Domain.createQueryBuilder('domain') + .update(Domain) + .set({ syncedAt: new Date(Date.now()) }) + .where({ id: In(domains.map((e) => e.id)) }) + .execute(); + } + console.log('Domain sync complete.'); + } else { + console.log('Not syncing any domains.'); + } +}; diff --git a/backend/src/tasks/shodan.ts b/backend/src/tasks/shodan.ts new file mode 100644 index 00000000..1c72b27d --- /dev/null +++ b/backend/src/tasks/shodan.ts @@ -0,0 +1,146 @@ +import { Domain, Service, Vulnerability } from '../models'; +import { plainToClass } from 'class-transformer'; +import getIps from './helpers/getIps'; +import { CommandOptions } from './ecs-client'; +import saveServicesToDb from './helpers/saveServicesToDb'; +import { chunk } from 'lodash'; +import axios from 'axios'; +import pRetry from 'p-retry'; +import { IpToDomainsMap, sanitizeStringField } from './censysIpv4'; +import saveVulnerabilitiesToDb from './helpers/saveVulnerabilitiesToDb'; + +// Shodan allows searching up to 100 IPs at once +const CHUNK_SIZE = 100; + +interface ShodanResponse { + ip_str: string; + country_name: string; + domains: string[]; + hostnames: string[]; + org: string; + ports: number[]; + os: string; + city: string; + longitude: number; + latitude: number; + data: { + port: number; + product: string; + data: string; + cpe: string[]; + version: string; + vulns: { + [title: string]: { + verified: boolean; + references: string[]; + cvss: number; + summary: string; + }; + }; + }[]; +} + +const sleep = (milliseconds) => { + return new Promise((resolve) => setTimeout(resolve, milliseconds)); +}; + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName } = commandOptions; + + console.log('Running shodan on organization', organizationName); + + const domainsWithIPs = await getIps(organizationId); + + const ipToDomainsMap: IpToDomainsMap = domainsWithIPs.reduce( + (map: IpToDomainsMap, domain: Domain) => { + if (!map[domain.ip]) { + map[domain.ip] = []; + } + map[domain.ip].push(domain); + return map; + }, + {} + ); + + const chunks = chunk(domainsWithIPs, CHUNK_SIZE); + + for (const domainChunk of chunks) { + console.log( + `Scanning ${domainChunk.length} domains beginning with ${domainChunk[0].name}` + ); + try { + let { data } = await pRetry( + () => + axios.get( + `https://api.shodan.io/shodan/host/${encodeURI( + domainChunk.map((domain) => domain.ip).join(',') + )}?key=${process.env.SHODAN_API_KEY}` + ), + { + // Perform less retries on jest to make tests faster + retries: typeof jest === 'undefined' ? 5 : 2, + minTimeout: 1000 + } + ); + + // If only one item is returned, the response will not be an array + if (!Array.isArray(data)) { + data = [data]; + } + for (const item of data) { + const domains = ipToDomainsMap[item.ip_str]; + for (const domain of domains) { + for (const service of item.data) { + const [serviceId] = await saveServicesToDb([ + plainToClass(Service, { + domain: domain, + discoveredBy: { id: commandOptions.scanId }, + port: service.port, + lastSeen: new Date(Date.now()), + banner: sanitizeStringField(service.data), + serviceSource: 'shodan', + shodanResults: { + product: service.product, + version: service.version, + cpe: service.cpe + } + }) + ]); + if (service.vulns) { + const vulns: Vulnerability[] = []; + for (const cve in service.vulns) { + // console.log('Creating vulnerability', cve); + vulns.push( + plainToClass(Vulnerability, { + domain: domain, + lastSeen: new Date(Date.now()), + title: cve, + cve: cve, + // Shodan CPE information is unreliable, + // so don't add it in for now. + // cpe: + // service.cpe && service.cpe.length > 0 + // ? service.cpe[0] + // : null, + cvss: service.vulns[cve].cvss, + state: 'open', + source: 'shodan', + needsPopulation: true, + service: { id: serviceId } + }) + ); + } + await saveVulnerabilitiesToDb(vulns, false); + } + } + } + } + } catch (e) { + console.error(e); + } + + await sleep(1000); // Wait for Shodan rate limit of 1 request / second + } + + console.log(`Shodan finished for ${domainsWithIPs.length} domains`); +}; diff --git a/backend/src/tasks/sslyze.ts b/backend/src/tasks/sslyze.ts new file mode 100644 index 00000000..c6c13b7b --- /dev/null +++ b/backend/src/tasks/sslyze.ts @@ -0,0 +1,49 @@ +import { CommandOptions } from './ecs-client'; +import { getLiveWebsites, LiveDomain } from './helpers/getLiveWebsites'; +import PQueue from 'p-queue'; +import * as sslChecker from 'ssl-checker'; + +interface IResolvedValues { + valid: boolean; + validFrom: string; + validTo: string; + daysRemaining: number; + validFor: string[]; +} + +const sslyze = async (domain: LiveDomain): Promise => { + try { + const response: IResolvedValues = await (sslChecker as any)(domain.name); + domain.ssl = { + ...(domain.ssl || {}), + valid: response.valid, + validFrom: response.validFrom, + validTo: response.validTo, + altNames: response.validFor + }; + console.log( + domain.name, + ': valid', + response.valid, + 'validFrom', + response.validFrom, + 'validTo', + response.validTo + ); + await domain.save(); + } catch (e) { + console.error(domain.name, e); + } +}; + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName } = commandOptions; + + console.log('Running sslyze on organization', organizationName); + + const liveWebsites = await getLiveWebsites(organizationId!, [], true); + const queue = new PQueue({ concurrency: 5 }); + await Promise.all(liveWebsites.map((site) => queue.add(() => sslyze(site)))); + + console.log(`sslyze finished for ${liveWebsites.length} domains`); +}; diff --git a/backend/src/tasks/syncdb.ts b/backend/src/tasks/syncdb.ts new file mode 100644 index 00000000..27738a5d --- /dev/null +++ b/backend/src/tasks/syncdb.ts @@ -0,0 +1,151 @@ +import { Handler } from 'aws-lambda'; +import { + connectToDatabase, + Service, + Domain, + Organization, + OrganizationTag, + Vulnerability +} from '../models'; +import ESClient from './es-client'; +import * as Sentencer from 'sentencer'; +import * as services from './sample_data/services.json'; +import * as cpes from './sample_data/cpes.json'; +import * as cves from './sample_data/cves.json'; +import * as vulnerabilities from './sample_data/vulnerabilities.json'; +import * as nouns from './sample_data/nouns.json'; +import * as adjectives from './sample_data/adjectives.json'; +import { saveToDb } from './cve-sync'; +import { sample } from 'lodash'; +import { handler as searchSync } from './search-sync'; +import { In } from 'typeorm'; + +const SAMPLE_TAG_NAME = 'Sample Data'; // Tag name for sample data +const NUM_SAMPLE_ORGS = 10; // Number of sample orgs +const NUM_SAMPLE_DOMAINS = 10; // Number of sample domains per org +const PROB_SAMPLE_SERVICES = 0.5; // Higher number means more services per domain +const PROB_SAMPLE_VULNERABILITIES = 0.5; // Higher number means more vulnerabilities per domain +const SAMPLE_STATES = ['VA', 'CA', 'CO']; +const SAMPLE_REGIONIDS = ['1', '2', '3']; + +export const handler: Handler = async (event) => { + const connection = await connectToDatabase(false); + const type = event?.type || event; + const dangerouslyforce = type === 'dangerouslyforce'; + if (connection) { + await connection.synchronize(dangerouslyforce); + } else { + console.error('Error: could not sync'); + } + + if (process.env.NODE_ENV !== 'test') { + // Create indices on elasticsearch only when not using tests. + const client = new ESClient(); + if (dangerouslyforce) { + console.log('Deleting all data in elasticsearch...'); + await client.deleteAll(); + console.log('Done.'); + } + await client.syncDomainsIndex(); + } + + if (type === 'populate') { + console.log('Populating the database with some sample data...'); + await saveToDb(cves); + Sentencer.configure({ + nounList: nouns, + adjectiveList: adjectives, + actions: { + entity: () => sample(['city', 'county', 'agency', 'department']) + } + }); + const organizationIds: string[] = []; + let tag = await OrganizationTag.findOne( + { name: SAMPLE_TAG_NAME }, + { relations: ['organizations'] } + ); + if (tag) { + await Organization.delete({ + id: In(tag.organizations.map((e) => e.id)) + }); + } else { + tag = await OrganizationTag.create({ + name: SAMPLE_TAG_NAME + }).save(); + } + for (let i = 0; i <= NUM_SAMPLE_ORGS; i++) { + const organization = await Organization.create({ + acronym: Math.random().toString(36).slice(2, 7), + name: Sentencer.make('{{ adjective }} {{ entity }}').replace( + /\b\w/g, + (l) => l.toUpperCase() + ), // Capitalize organization names + rootDomains: ['crossfeed.local'], + ipBlocks: [], + isPassive: false, + tags: [tag], + state: SAMPLE_STATES[Math.floor(Math.random() * SAMPLE_STATES.length)], + regionId: + SAMPLE_REGIONIDS[Math.floor(Math.random() * SAMPLE_REGIONIDS.length)] + }).save(); + console.log(organization.name); + organizationIds.push(organization.id); + for (let i = 0; i <= NUM_SAMPLE_DOMAINS; i++) { + const randomNum = () => Math.floor(Math.random() * 256); + const domain = await Domain.create({ + name: Sentencer.make('{{ adjective }}-{{ noun }}.crossfeed.local'), + ip: ['127', randomNum(), randomNum(), randomNum()].join('.'), // Create random loopback addresses + fromRootDomain: 'crossfeed.local', + subdomainSource: 'findomain', + organization + }).save(); + console.log(`\t${domain.name}`); + let service; + for (const serviceData of services) { + if (service && Math.random() < PROB_SAMPLE_SERVICES) continue; + service = await Service.create({ + domain, + port: serviceData.port, + service: serviceData.service, + serviceSource: 'shodan', + wappalyzerResults: [ + { + technology: { + cpe: sample(cpes) + }, + version: '' + } + ] + }).save(); + } + // Create a bunch of vulnerabilities for the first service + for (const vulnData of vulnerabilities) { + // Sample CVE vulnerabilities, but always add a single instance of other + // vulnerabilities (hibp / dnstwist) + if ( + vulnData.title.startsWith('CVE-') && + Math.random() < PROB_SAMPLE_VULNERABILITIES + ) + continue; + await Vulnerability.create({ + ...vulnData, + domain, + service + } as object).save(); + } + } + } + + console.log('Done. Running search sync...'); + for (const organizationId of organizationIds) { + await searchSync({ + organizationId, + scanId: 'scanId', + scanName: 'scanName', + organizationName: 'organizationName', + scanTaskId: 'scanTaskId' + }); + } + console.log('Done.'); + } +}; diff --git a/backend/src/tasks/test-proxy.ts b/backend/src/tasks/test-proxy.ts new file mode 100644 index 00000000..d34cad1b --- /dev/null +++ b/backend/src/tasks/test-proxy.ts @@ -0,0 +1,99 @@ +import axios from 'axios'; +import { CommandOptions } from './ecs-client'; +import { spawnSync } from 'child_process'; +import { writeFileSync } from 'fs'; + +const WEBHOOK_URL_HTTPS = + 'https://webhook.site/fef89312-ab36-46fc-bb9b-8a9943f01e55'; +const WEBHOOK_ADMIN_URL = + 'https://webhook.site/#!/0f3e7e8f-ffe4-46df-aad1-d017b2c27921'; +const WEBHOOK_URL_HTTP = WEBHOOK_URL_HTTPS.replace('https://', 'http://'); + +const WEBSCRAPER_DIRECTORY = '/app/worker/webscraper'; + +/** + * Integration test to make sure that the proxies work properly. + * This test should be run manually whenever worker dependencies + * that might affect the proxy are upgraded or new scans are added + * which require proxy integration (such as adding code in a + * new language). If a new scan / tool is added, you may need to add + * additional lines of code to this scan so that it tests + * that tool out. Here are examples of PRs for which you should run + * this scan before merging: + * * Bump mitmproxy from 6.0.2 to 7.0.3 https://github.com/cisagov/crossfeed/pull/1193 + * * Add webscraper scan https://github.com/cisagov/crossfeed/pull/517 + * + * To run the test, first go to https://webhook.site/, create a new webhook URL, + * and replace the WEBHOOK_URL_HTTPS and WEBHOOK_ADMIN_URL constants accordingly. + * Then run: + * npm start (from the root directory) + * cd backend && npm run build-worker && docker run -e WORKER_TEST=true -e ELASTICSEARCH_ENDPOINT=http://es:9200 --network="crossfeed_backend" -t crossfeed-worker + * + * Results should be checked at WEBHOOK_ADMIN_URL. All the requests made below + * should display at the admin URL, and they should all be signed and have a + * Crossfeed test user agent. + * + * TODO: Point these URLs to a locally running web server + * in order to make this test be able to be automatically run on CI. + */ +export const handler = async (commandOptions: CommandOptions) => { + await axios.get(WEBHOOK_URL_HTTP + '?source=axios'); + await axios.get(WEBHOOK_URL_HTTPS + '?source=axios'); + + spawnSync( + 'intrigue-ident', + ['--uri', WEBHOOK_URL_HTTP + '?source=intrigue-ident', '--json'], + { + env: { + ...process.env, + HTTP_PROXY: process.env.GLOBAL_AGENT_HTTP_PROXY, + HTTPS_PROXY: process.env.GLOBAL_AGENT_HTTP_PROXY + } + } + ); + + spawnSync( + 'intrigue-ident', + ['--uri', WEBHOOK_URL_HTTPS + '?source=intrigue-ident', '--json'], + { + env: { + ...process.env, + HTTP_PROXY: process.env.GLOBAL_AGENT_HTTP_PROXY, + HTTPS_PROXY: process.env.GLOBAL_AGENT_HTTP_PROXY + } + } + ); + + writeFileSync('/test-domains-http.txt', WEBHOOK_URL_HTTP + '?source=scrapy'); + + spawnSync( + 'scrapy', + ['crawl', 'main', '-a', `domains_file=/test-domains-http.txt`], + { + cwd: WEBSCRAPER_DIRECTORY, + env: { + ...process.env, + HTTP_PROXY: process.env.GLOBAL_AGENT_HTTP_PROXY, + HTTPS_PROXY: process.env.GLOBAL_AGENT_HTTP_PROXY + } + } + ); + + writeFileSync( + '/test-domains-https.txt', + WEBHOOK_URL_HTTPS + '?source=scrapy' + ); + + spawnSync( + 'scrapy', + ['crawl', 'main', '-a', `domains_file=/test-domains-https.txt`], + { + cwd: WEBSCRAPER_DIRECTORY, + env: { + ...process.env, + HTTP_PROXY: process.env.GLOBAL_AGENT_HTTP_PROXY, + HTTPS_PROXY: process.env.GLOBAL_AGENT_HTTP_PROXY + } + } + ); +}; diff --git a/backend/src/tasks/test/__snapshots__/amass.test.ts.snap b/backend/src/tasks/test/__snapshots__/amass.test.ts.snap new file mode 100644 index 00000000..1e8656e4 --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/amass.test.ts.snap @@ -0,0 +1,32 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`amass basic test: helpers.saveDomainsToDb 1`] = ` +Array [ + Domain { + "asn": 6762, + "discoveredBy": Object { + "id": "ee7640ae-62d9-4e01-8a32-0e42dc8365dd", + }, + "fromRootDomain": "filedrop.cisa.gov", + "ip": "2a02:26f0:7a00:195::447a", + "name": "filedrop.cisa.gov", + "organization": Object { + "id": "organizationId", + }, + "subdomainSource": "amass", + }, + Domain { + "asn": 6762, + "discoveredBy": Object { + "id": "ee7640ae-62d9-4e01-8a32-0e42dc8365dd", + }, + "fromRootDomain": "filedrop.cisa.gov", + "ip": "2a02:26f0:7a00:188::447a", + "name": "www.filedrop.cisa.gov", + "organization": Object { + "id": "organizationId", + }, + "subdomainSource": "amass", + }, +] +`; diff --git a/backend/src/tasks/test/__snapshots__/censys.test.ts.snap b/backend/src/tasks/test/__snapshots__/censys.test.ts.snap new file mode 100644 index 00000000..9c19fede --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/censys.test.ts.snap @@ -0,0 +1,18 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`censys basic test: helpers.saveDomainsToDb 1`] = ` +Array [ + Domain { + "discoveredBy": Object { + "id": "ddf56d43-7f87-4139-9a86-b8a1ffde9b9e", + }, + "fromRootDomain": "filedrop.cisa.gov", + "ip": "104.84.119.215", + "name": "filedrop.cisa.gov", + "organization": Object { + "id": "organizationId", + }, + "subdomainSource": "censys", + }, +] +`; diff --git a/backend/src/tasks/test/__snapshots__/censysCertificates.test.ts.snap b/backend/src/tasks/test/__snapshots__/censysCertificates.test.ts.snap new file mode 100644 index 00000000..b5930df0 --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/censysCertificates.test.ts.snap @@ -0,0 +1,2104 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`censys certificates basic test 1`] = ` +Array [ + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.60", + "ipOnly": false, + "name": "first_file_testdomain1", + "organization": null, + "reverseName": "first_file_testdomain1", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "52.74.149.117", + "ipOnly": false, + "name": "first_file_testdomain10", + "organization": null, + "reverseName": "first_file_testdomain10", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": "first_file_testdomain11", + "organization": null, + "reverseName": "first_file_testdomain11", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "1.1.1.1", + "ipOnly": false, + "name": "first_file_testdomain12", + "organization": null, + "reverseName": "first_file_testdomain12", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object { + "added_at": "2018-03-19 17:56:33 UTC", + "ct": Object { + "google_testtube": Object { + "added_to_ct_at": "2018-03-19 17:21:11 UTC", + "ct_to_censys_at": "2018-07-30 22:11:20 UTC", + "index": "15584453", + }, + }, + "fingerprint_sha256": "c7148262724e33d9b0ea2fa67ae18775c9fc11c5f1c93ebeab443578c315ab25", + "metadata": Object { + "added_at": "2018-03-19 17:56:33 UTC", + "parse_status": "success", + "parse_version": "1", + "post_processed": true, + "post_processed_at": "2018-08-28 18:08:22 UTC", + "seen_in_scan": false, + "source": "ct", + "updated_at": "2018-08-28 23:28:24 UTC", + }, + "parents": Array [], + "parsed": Object { + "extensions": Object { + "authority_info_access": Object { + "issuer_urls": Array [ + "http://cert.stg-int-x1.letsencrypt.org/", + ], + "ocsp_urls": Array [ + "http://ocsp.stg-int-x1.letsencrypt.org", + ], + }, + "authority_key_id": "c0cc0346b95820cc5c7270f3e12ecb20a6f5683a", + "basic_constraints": Object { + "is_ca": false, + }, + "certificate_policies": Array [ + Object { + "cps": Array [], + "id": "2.23.140.1.2.1", + "user_notice": Array [], + }, + Object { + "cps": Array [ + "http://cps.letsencrypt.org", + ], + "id": "1.3.6.1.4.1.44947.1.1.1", + "user_notice": Array [ + Object { + "explicit_text": "This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/", + "notice_reference": Array [], + }, + ], + }, + ], + "crl_distribution_points": Array [], + "ct_poison": true, + "extended_key_usage": Object { + "client_auth": true, + "server_auth": true, + "unknown": Array [], + "value": Array [], + }, + "key_usage": Object { + "digital_signature": true, + "key_encipherment": true, + "value": "5", + }, + "signed_certificate_timestamps": Array [], + "subject_alt_name": Object { + "directory_names": Array [], + "dns_names": Array [ + "jrm-web.fr", + ], + "edi_party_names": Array [], + "email_addresses": Array [], + "ip_addresses": Array [], + "other_names": Array [], + "registered_ids": Array [], + "uniform_resource_identifiers": Array [], + }, + "subject_key_id": "e8a490d6cdf9dc3b5d22ffa99a146ef70469e557", + }, + "fingerprint_md5": "679dabf1a1684b4ad47b309a8381c5f0", + "fingerprint_sha1": "0d31015df88666d830150388fdebc7507ec5a099", + "fingerprint_sha256": "c7148262724e33d9b0ea2fa67ae18775c9fc11c5f1c93ebeab443578c315ab25", + "issuer": Object { + "common_name": Array [ + "Fake LE Intermediate X1", + ], + "country": Array [], + "domain_component": Array [], + "email_address": Array [], + "given_name": Array [], + "jurisdiction_country": Array [], + "jurisdiction_locality": Array [], + "jurisdiction_province": Array [], + "locality": Array [], + "organization": Array [], + "organization_id": Array [], + "organizational_unit": Array [], + "postal_code": Array [], + "province": Array [], + "serial_number": Array [], + "street_address": Array [], + "surname": Array [], + }, + "issuer_dn": "CN=Fake LE Intermediate X1", + "names": Array [ + "jrm-web.fr", + "first_file_testdomain12", + "first_file_testdomain3.gov", + ], + "redacted": false, + "serial_number": "21813491103223494347342650797518222965967678", + "signature": Object { + "self_signed": false, + "signature_algorithm": Object { + "name": "SHA256-RSA", + "oid": "1.2.840.113549.1.1.11", + }, + "valid": false, + "value": "0dKkylpDkk54kcaaWXKAHPXZkkRW1o8+mtXT5g7/t6ebr0fQfM9BDY1AIDtD9Ll+/0/KpUvdL//GIXwkK/R/w8ZrJ4tA4r/g8EoxxJWHpr16wYjke6FguK3VrQFBGHCU6Gij8zak1YSjhL7rNZGUi6gOLWMq3DtjFN4FqKgVsGg5nONFWuTBsEdKx9LJ5bF4tUm7qPJRS3kc/exBi1gG1DfMNVpDzMbJIcuTyNKGISXnHhuWN7EGXSX3r2rVgKwGBX4v1iDJ7eYfd6bn+bJ1W3GolRdIDImsQQB2ykUfF8IwdGSN55I+dk3VUwHdeVZHpu0awOXW2Xb5O3RvF4q47w==", + }, + "signature_algorithm": Object { + "name": "SHA256-RSA", + "oid": "1.2.840.113549.1.1.11", + }, + "spki_subject_fingerprint": "91fe4e0da702e60968c0bd845ce8905ba041419ea37d08fc5938c66ea6ec66b7", + "subject": Object { + "common_name": Array [ + "jrm-web.fr", + ], + "country": Array [], + "domain_component": Array [], + "email_address": Array [], + "given_name": Array [], + "jurisdiction_country": Array [], + "jurisdiction_locality": Array [], + "jurisdiction_province": Array [], + "locality": Array [], + "organization": Array [], + "organization_id": Array [], + "organizational_unit": Array [], + "postal_code": Array [], + "province": Array [], + "serial_number": Array [], + "street_address": Array [], + "surname": Array [], + }, + "subject_dn": "CN=jrm-web.fr", + "subject_key_info": Object { + "fingerprint_sha256": "5dc2452f4534d7d4c633f096a1c17e3f050c9f6ef19c653b39addf5aa735545b", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "2048", + "modulus": "1MUtGN/fPEZIGaaFIu4J3Dcxj/uVUDgLYNK/ntPo/IuIXmcnJ/HNlEVVoOWYCvMbFmE5wrHx5+dMjZg7pfaUon3+agrQRy1ptVB3edb6j5Q45WoV6aqcvR3fJgkqKyumWqEWgPBlt1qfI9cP7r4aPUfV5n5HPqri8nQmlKsqTBvUVXsv5rT3IoT/XFg0gVbtozx9xn6Pwudj6zNzHGmj6AA8/h/pGPZvgoxDIUqpodg+bEwmno8ZRafHzLkqPYIIRlUYPtQ8EHKWcyr+vMovzatoUSGcvrMQIR6uC0zLN89nNshSjCWZQkdXquEP2PT7waBr0RAvWIaiS56WDHKpvw==", + }, + }, + "tbs_fingerprint": "86e4f3f0e55b24b080397e138acdf4f9f7af0d8bcfb002fb4afbc6541b116357", + "tbs_noct_fingerprint": "52d7d1b652d4da8edf56858412bf5cbbe4705047bda056d6b61d27b391f339e5", + "unknown_extensions": Array [], + "validation_level": "DV", + "validity": Object { + "end": "2018-06-17 16:21:10 UTC", + "length": "7776000", + "start": "2018-03-19 16:21:10 UTC", + }, + "version": "3", + }, + "precert": true, + "raw": "MIIE7TCCA9WgAwIBAgITAPpoFsK7dfi0qEO2Gvz8RnGLPjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxNjIxMTBaFw0xODA2MTcxNjIxMTBaMBUxEzARBgNVBAMTCmpybS13ZWIuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUxS0Y3988RkgZpoUi7gncNzGP+5VQOAtg0r+e0+j8i4heZycn8c2URVWg5ZgK8xsWYTnCsfHn50yNmDul9pSiff5qCtBHLWm1UHd51vqPlDjlahXpqpy9Hd8mCSorK6ZaoRaA8GW3Wp8j1w/uvho9R9Xmfkc+quLydCaUqypMG9RVey/mtPcihP9cWDSBVu2jPH3Gfo/C52PrM3McaaPoADz+H+kY9m+CjEMhSqmh2D5sTCaejxlFp8fMuSo9gghGVRg+1DwQcpZzKv68yi/Nq2hRIZy+sxAhHq4LTMs3z2c2yFKMJZlCR1eq4Q/Y9PvBoGvREC9YhqJLnpYMcqm/AgMBAAGjggInMIICIzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOikkNbN+dw7XSL/qZoUbvcEaeVXMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAVBgNVHREEDjAMggpqcm0td2ViLmZyMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBANHSpMpaQ5JOeJHGmllygBz12ZJEVtaPPprV0+YO/7enm69H0HzPQQ2NQCA7Q/S5fv9PyqVL3S//xiF8JCv0f8PGayeLQOK/4PBKMcSVh6a9esGI5HuhYLit1a0BQRhwlOhoo/M2pNWEo4S+6zWRlIuoDi1jKtw7YxTeBaioFbBoOZzjRVrkwbBHSsfSyeWxeLVJu6jyUUt5HP3sQYtYBtQ3zDVaQ8zGySHLk8jShiEl5x4bljexBl0l969q1YCsBgV+L9Ygye3mH3em5/mydVtxqJUXSAyJrEEAdspFHxfCMHRkjeeSPnZN1VMB3XlWR6btGsDl1tl2+Tt0bxeKuO8=", + "tags": Array [ + "ct", + "expired", + "precert", + ], + "validation": Object { + "apple": Object { + "blacklisted": false, + "had_trusted_path": false, + "in_revocation_set": false, + "parents": Array [], + "paths": Array [], + "trusted_path": false, + "type": "unknown", + "valid": false, + "was_valid": false, + "whitelisted": false, + }, + "google_ct_primary": Object { + "blacklisted": false, + "had_trusted_path": false, + "in_revocation_set": false, + "parents": Array [], + "paths": Array [], + "trusted_path": false, + "type": "unknown", + "valid": false, + "was_valid": false, + "whitelisted": false, + }, + "microsoft": Object { + "blacklisted": false, + "had_trusted_path": false, + "in_revocation_set": false, + "parents": Array [], + "paths": Array [], + "trusted_path": false, + "type": "unknown", + "valid": false, + "was_valid": false, + "whitelisted": false, + }, + "nss": Object { + "blacklisted": false, + "had_trusted_path": false, + "in_revocation_set": false, + "parents": Array [], + "paths": Array [], + "trusted_path": false, + "type": "unknown", + "valid": false, + "was_valid": false, + "whitelisted": false, + }, + }, + "zlint": Object { + "errors_present": false, + "fatals_present": false, + "lints": Object { + "e_basic_constraints_not_critical": "na", + "e_ca_common_name_missing": "na", + "e_ca_country_name_invalid": "na", + "e_ca_country_name_missing": "na", + "e_ca_crl_sign_not_set": "na", + "e_ca_is_ca": "na", + "e_ca_key_cert_sign_not_set": "na", + "e_ca_key_usage_missing": "na", + "e_ca_key_usage_not_critical": "na", + "e_ca_organization_name_missing": "na", + "e_ca_subject_field_empty": "na", + "e_cab_dv_conflicts_with_locality": "pass", + "e_cab_dv_conflicts_with_org": "pass", + "e_cab_dv_conflicts_with_postal": "pass", + "e_cab_dv_conflicts_with_province": "pass", + "e_cab_dv_conflicts_with_street": "pass", + "e_cab_iv_requires_personal_name": "na", + "e_cab_ov_requires_org": "na", + "e_cert_contains_unique_identifier": "pass", + "e_cert_extensions_version_not_3": "pass", + "e_cert_policy_iv_requires_country": "na", + "e_cert_policy_iv_requires_province_or_locality": "na", + "e_cert_policy_ov_requires_country": "na", + "e_cert_policy_ov_requires_province_or_locality": "na", + "e_cert_unique_identifier_version_not_2_or_3": "na", + "e_distribution_point_incomplete": "na", + "e_dnsname_bad_character_in_label": "pass", + "e_dnsname_contains_bare_iana_suffix": "pass", + "e_dnsname_empty_label": "pass", + "e_dnsname_hyphen_in_sld": "pass", + "e_dnsname_label_too_long": "pass", + "e_dnsname_left_label_wildcard_correct": "pass", + "e_dnsname_not_valid_tld": "pass", + "e_dnsname_underscore_in_sld": "pass", + "e_dnsname_wildcard_only_in_left_label": "pass", + "e_dsa_correct_order_in_subgroup": "na", + "e_dsa_improper_modulus_or_divisor_size": "na", + "e_dsa_params_missing": "na", + "e_dsa_shorter_than_2048_bits": "na", + "e_dsa_unique_correct_representation": "na", + "e_ec_improper_curves": "na", + "e_ev_business_category_missing": "na", + "e_ev_country_name_missing": "na", + "e_ev_organization_name_missing": "na", + "e_ev_serial_number_missing": "na", + "e_ev_valid_time_too_long": "na", + "e_ext_aia_marked_critical": "pass", + "e_ext_authority_key_identifier_critical": "pass", + "e_ext_authority_key_identifier_missing": "pass", + "e_ext_authority_key_identifier_no_key_identifier": "pass", + "e_ext_cert_policy_disallowed_any_policy_qualifier": "pass", + "e_ext_cert_policy_duplicate": "pass", + "e_ext_cert_policy_explicit_text_ia5_string": "pass", + "e_ext_cert_policy_explicit_text_too_long": "pass", + "e_ext_duplicate_extension": "pass", + "e_ext_freshest_crl_marked_critical": "na", + "e_ext_ian_dns_not_ia5_string": "na", + "e_ext_ian_empty_name": "na", + "e_ext_ian_no_entries": "na", + "e_ext_ian_rfc822_format_invalid": "na", + "e_ext_ian_space_dns_name": "na", + "e_ext_ian_uri_format_invalid": "na", + "e_ext_ian_uri_host_not_fqdn_or_ip": "na", + "e_ext_ian_uri_not_ia5": "na", + "e_ext_ian_uri_relative": "na", + "e_ext_key_usage_cert_sign_without_ca": "pass", + "e_ext_key_usage_without_bits": "pass", + "e_ext_name_constraints_not_critical": "na", + "e_ext_name_constraints_not_in_ca": "na", + "e_ext_policy_constraints_empty": "na", + "e_ext_policy_constraints_not_critical": "na", + "e_ext_policy_map_any_policy": "na", + "e_ext_san_contains_reserved_ip": "pass", + "e_ext_san_directory_name_present": "pass", + "e_ext_san_dns_name_too_long": "pass", + "e_ext_san_dns_not_ia5_string": "pass", + "e_ext_san_edi_party_name_present": "pass", + "e_ext_san_empty_name": "pass", + "e_ext_san_missing": "pass", + "e_ext_san_no_entries": "pass", + "e_ext_san_not_critical_without_subject": "pass", + "e_ext_san_other_name_present": "pass", + "e_ext_san_registered_id_present": "pass", + "e_ext_san_rfc822_format_invalid": "pass", + "e_ext_san_rfc822_name_present": "pass", + "e_ext_san_space_dns_name": "pass", + "e_ext_san_uniform_resource_identifier_present": "pass", + "e_ext_san_uri_format_invalid": "pass", + "e_ext_san_uri_host_not_fqdn_or_ip": "pass", + "e_ext_san_uri_not_ia5": "pass", + "e_ext_san_uri_relative": "pass", + "e_ext_subject_directory_attr_critical": "na", + "e_ext_subject_key_identifier_critical": "pass", + "e_ext_subject_key_identifier_missing_ca": "na", + "e_generalized_time_does_not_include_seconds": "na", + "e_generalized_time_includes_fraction_seconds": "na", + "e_generalized_time_not_in_zulu": "na", + "e_ian_bare_wildcard": "na", + "e_ian_dns_name_includes_null_char": "na", + "e_ian_dns_name_starts_with_period": "na", + "e_ian_wildcard_not_first": "na", + "e_inhibit_any_policy_not_critical": "na", + "e_international_dns_name_not_unicode": "pass", + "e_invalid_certificate_version": "pass", + "e_issuer_field_empty": "pass", + "e_name_constraint_empty": "na", + "e_name_constraint_maximum_not_absent": "na", + "e_name_constraint_minimum_non_zero": "na", + "e_old_root_ca_rsa_mod_less_than_2048_bits": "na", + "e_old_sub_ca_rsa_mod_less_than_1024_bits": "na", + "e_old_sub_cert_rsa_mod_less_than_1024_bits": "na", + "e_path_len_constraint_improperly_included": "pass", + "e_path_len_constraint_zero_or_less": "pass", + "e_public_key_type_not_allowed": "pass", + "e_root_ca_extended_key_usage_present": "na", + "e_root_ca_key_usage_must_be_critical": "na", + "e_root_ca_key_usage_present": "na", + "e_rsa_exp_negative": "pass", + "e_rsa_mod_less_than_2048_bits": "pass", + "e_rsa_no_public_key": "pass", + "e_rsa_public_exponent_not_odd": "pass", + "e_rsa_public_exponent_too_small": "pass", + "e_san_bare_wildcard": "pass", + "e_san_dns_name_includes_null_char": "pass", + "e_san_dns_name_starts_with_period": "pass", + "e_san_wildcard_not_first": "pass", + "e_serial_number_longer_than_20_octets": "pass", + "e_serial_number_not_positive": "pass", + "e_signature_algorithm_not_supported": "pass", + "e_sub_ca_aia_does_not_contain_ocsp_url": "na", + "e_sub_ca_aia_marked_critical": "na", + "e_sub_ca_aia_missing": "na", + "e_sub_ca_certificate_policies_missing": "na", + "e_sub_ca_crl_distribution_points_does_not_contain_url": "na", + "e_sub_ca_crl_distribution_points_marked_critical": "na", + "e_sub_ca_crl_distribution_points_missing": "na", + "e_sub_cert_aia_does_not_contain_ocsp_url": "pass", + "e_sub_cert_aia_marked_critical": "pass", + "e_sub_cert_aia_missing": "pass", + "e_sub_cert_cert_policy_empty": "pass", + "e_sub_cert_certificate_policies_missing": "pass", + "e_sub_cert_country_name_must_appear": "pass", + "e_sub_cert_crl_distribution_points_does_not_contain_url": "na", + "e_sub_cert_crl_distribution_points_marked_critical": "na", + "e_sub_cert_eku_missing": "pass", + "e_sub_cert_eku_server_auth_client_auth_missing": "pass", + "e_sub_cert_given_name_surname_contains_correct_policy": "na", + "e_sub_cert_key_usage_cert_sign_bit_set": "pass", + "e_sub_cert_key_usage_crl_sign_bit_set": "pass", + "e_sub_cert_locality_name_must_appear": "pass", + "e_sub_cert_locality_name_must_not_appear": "pass", + "e_sub_cert_not_is_ca": "pass", + "e_sub_cert_or_sub_ca_using_sha1": "pass", + "e_sub_cert_postal_code_must_not_appear": "pass", + "e_sub_cert_province_must_appear": "pass", + "e_sub_cert_province_must_not_appear": "pass", + "e_sub_cert_street_address_should_not_exist": "pass", + "e_subject_common_name_max_length": "pass", + "e_subject_common_name_not_from_san": "pass", + "e_subject_contains_noninformational_value": "pass", + "e_subject_contains_reserved_ip": "pass", + "e_subject_country_not_iso": "pass", + "e_subject_empty_without_san": "pass", + "e_subject_info_access_marked_critical": "na", + "e_subject_locality_name_max_length": "pass", + "e_subject_not_dn": "pass", + "e_subject_organization_name_max_length": "pass", + "e_subject_organizational_unit_name_max_length": "pass", + "e_subject_state_name_max_length": "pass", + "e_utc_time_does_not_include_seconds": "pass", + "e_utc_time_not_in_zulu": "pass", + "e_validity_time_not_positive": "pass", + "e_wrong_time_format_pre2050": "pass", + "n_ca_digital_signature_not_set": "na", + "n_contains_redacted_dnsname": "pass", + "n_sub_ca_eku_not_technically_constrained": "na", + "n_subject_common_name_included": "notice", + "w_distribution_point_missing_ldap_or_uri": "na", + "w_dnsname_underscore_in_trd": "pass", + "w_dnsname_wildcard_left_of_public_suffix": "pass", + "w_eku_critical_improperly": "pass", + "w_ext_aia_access_location_missing": "pass", + "w_ext_cert_policy_contains_noticeref": "pass", + "w_ext_cert_policy_explicit_text_includes_control": "pass", + "w_ext_cert_policy_explicit_text_not_nfc": "pass", + "w_ext_cert_policy_explicit_text_not_utf8": "pass", + "w_ext_crl_distribution_marked_critical": "na", + "w_ext_ian_critical": "na", + "w_ext_key_usage_not_critical": "pass", + "w_ext_policy_map_not_critical": "na", + "w_ext_policy_map_not_in_cert_policy": "na", + "w_ext_san_critical_with_subject_dn": "pass", + "w_ext_subject_key_identifier_missing_sub_cert": "pass", + "w_ian_iana_pub_suffix_empty": "na", + "w_issuer_dn_leading_whitespace": "pass", + "w_issuer_dn_trailing_whitespace": "pass", + "w_multiple_issuer_rdn": "pass", + "w_name_constraint_on_edi_party_name": "na", + "w_name_constraint_on_registered_id": "na", + "w_name_constraint_on_x400": "na", + "w_root_ca_basic_constraints_path_len_constraint_field_present": "na", + "w_root_ca_contains_cert_policy": "na", + "w_rsa_mod_factors_smaller_than_752": "pass", + "w_rsa_mod_not_odd": "pass", + "w_rsa_public_exponent_not_in_range": "pass", + "w_san_iana_pub_suffix_empty": "pass", + "w_serial_number_low_entropy": "pass", + "w_sub_ca_aia_does_not_contain_issuing_ca_url": "na", + "w_sub_ca_certificate_policies_marked_critical": "na", + "w_sub_ca_eku_critical": "na", + "w_sub_ca_name_constraints_not_critical": "na", + "w_sub_cert_aia_does_not_contain_issuing_ca_url": "pass", + "w_sub_cert_certificate_policies_marked_critical": "pass", + "w_sub_cert_eku_extra_values": "pass", + "w_sub_cert_sha1_expiration_too_long": "na", + "w_subject_dn_leading_whitespace": "pass", + "w_subject_dn_trailing_whitespace": "pass", + }, + "notices_present": true, + "version": "3", + "warnings_present": false, + }, + }, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.61", + "ipOnly": false, + "name": "first_file_testdomain3.gov", + "organization": null, + "reverseName": "gov.first_file_testdomain3", + "screenshot": null, + "services": Array [], + "ssl": Object { + "altNames": Array [ + "jrm-web.fr", + "first_file_testdomain12", + "first_file_testdomain3.gov", + ], + "fingerprint": "MIIE7TCCA9WgAwIBAgITAPpoFsK7dfi0qEO2Gvz8RnGLPjANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xODAzMTkxNjIxMTBaFw0xODA2MTcxNjIxMTBaMBUxEzARBgNVBAMTCmpybS13ZWIuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUxS0Y3988RkgZpoUi7gncNzGP+5VQOAtg0r+e0+j8i4heZycn8c2URVWg5ZgK8xsWYTnCsfHn50yNmDul9pSiff5qCtBHLWm1UHd51vqPlDjlahXpqpy9Hd8mCSorK6ZaoRaA8GW3Wp8j1w/uvho9R9Xmfkc+quLydCaUqypMG9RVey/mtPcihP9cWDSBVu2jPH3Gfo/C52PrM3McaaPoADz+H+kY9m+CjEMhSqmh2D5sTCaejxlFp8fMuSo9gghGVRg+1DwQcpZzKv68yi/Nq2hRIZy+sxAhHq4LTMs3z2c2yFKMJZlCR1eq4Q/Y9PvBoGvREC9YhqJLnpYMcqm/AgMBAAGjggInMIICIzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOikkNbN+dw7XSL/qZoUbvcEaeVXMB8GA1UdIwQYMBaAFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHcGCCsGAQUFBwEBBGswaTAyBggrBgEFBQcwAYYmaHR0cDovL29jc3Auc3RnLWludC14MS5sZXRzZW5jcnlwdC5vcmcwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JnLzAVBgNVHREEDjAMggpqcm0td2ViLmZyMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wEwYKKwYBBAHWeQIEAwEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBANHSpMpaQ5JOeJHGmllygBz12ZJEVtaPPprV0+YO/7enm69H0HzPQQ2NQCA7Q/S5fv9PyqVL3S//xiF8JCv0f8PGayeLQOK/4PBKMcSVh6a9esGI5HuhYLit1a0BQRhwlOhoo/M2pNWEo4S+6zWRlIuoDi1jKtw7YxTeBaioFbBoOZzjRVrkwbBHSsfSyeWxeLVJu6jyUUt5HP3sQYtYBtQ3zDVaQ8zGySHLk8jShiEl5x4bljexBl0l969q1YCsBgV+L9Ygye3mH3em5/mydVtxqJUXSAyJrEEAdspFHxfCMHRkjeeSPnZN1VMB3XlWR6btGsDl1tl2+Tt0bxeKuO8=", + "issuerCN": Array [ + "Fake LE Intermediate X1", + ], + "issuerOrg": Array [], + "validFrom": "2018-03-19 16:21:10 UTC", + "validTo": "2018-06-17 16:21:10 UTC", + }, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "45.79.207.117", + "ipOnly": false, + "name": "first_file_testdomain5", + "organization": null, + "reverseName": "first_file_testdomain5", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "156.249.159.119", + "ipOnly": false, + "name": "first_file_testdomain6", + "organization": null, + "reverseName": "first_file_testdomain6", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "221.10.15.220", + "ipOnly": false, + "name": "first_file_testdomain7", + "organization": null, + "reverseName": "first_file_testdomain7", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "81.141.166.145", + "ipOnly": false, + "name": "first_file_testdomain8", + "organization": null, + "reverseName": "first_file_testdomain8", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "24.65.82.187", + "ipOnly": false, + "name": "first_file_testdomain9", + "organization": null, + "reverseName": "first_file_testdomain9", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object { + "added_at": "2018-03-19 14:27:41 UTC", + "fingerprint_sha256": "d0e8f51650889c6f31547c488762ffe45413f4945c8bba293985c54853891186", + "metadata": Object { + "added_at": "2018-03-19 14:27:41 UTC", + "parse_status": "success", + "parse_version": "1", + "post_processed": true, + "post_processed_at": "2019-03-18 00:11:55 UTC", + "seen_in_scan": true, + "source": "scan", + "updated_at": "2019-03-18 00:12:17 UTC", + }, + "parents": Array [], + "parsed": Object { + "extensions": Object { + "authority_key_id": "296759fa04d6c1d543e5929da1d364f51307cad4", + "basic_constraints": Object { + "is_ca": false, + }, + "certificate_policies": Array [], + "crl_distribution_points": Array [], + "signed_certificate_timestamps": Array [], + "subject_alt_name": Object { + "directory_names": Array [], + "dns_names": Array [ + "akmemontech.imtiyazmemon.website", + "akmemontech.com", + "mail.akmemontech.com", + "www.akmemontech.com", + "www.akmemontech.imtiyazmemon.website", + ], + "edi_party_names": Array [], + "email_addresses": Array [], + "ip_addresses": Array [], + "other_names": Array [], + "registered_ids": Array [], + "uniform_resource_identifiers": Array [], + }, + "subject_key_id": "296759fa04d6c1d543e5929da1d364f51307cad4", + }, + "fingerprint_md5": "99c7eaaa33dba724c01534fbca59e176", + "fingerprint_sha1": "bfa33d549f45b4b2892203c2b9832db905256381", + "fingerprint_sha256": "d0e8f51650889c6f31547c488762ffe45413f4945c8bba293985c54853891186", + "issuer": Object { + "common_name": Array [ + "akmemontech.imtiyazmemon.website", + ], + "country": Array [], + "domain_component": Array [], + "email_address": Array [], + "given_name": Array [], + "jurisdiction_country": Array [], + "jurisdiction_locality": Array [], + "jurisdiction_province": Array [], + "locality": Array [], + "organization": Array [], + "organization_id": Array [], + "organizational_unit": Array [], + "postal_code": Array [], + "province": Array [], + "serial_number": Array [], + "street_address": Array [], + "surname": Array [], + }, + "issuer_dn": "CN=akmemontech.imtiyazmemon.website", + "names": Array [ + "www.akmemontech.imtiyazmemon.website", + "akmemontech.imtiyazmemon.website", + "akmemontech.com", + "mail.akmemontech.com", + "www.akmemontech.com", + "*.first_file_testdomain2.gov", + ], + "redacted": false, + "serial_number": "4966328060", + "signature": Object { + "self_signed": true, + "signature_algorithm": Object { + "name": "SHA256-RSA", + "oid": "1.2.840.113549.1.1.11", + }, + "valid": false, + "value": "QAREFCXiXmSFfHNFfAdrhQ7GmmszsHJrzyVzea4cbdVftExlPsNzirt+BzUsLyss3dkFv58YHcWRmRjxLYHw3zgxo9sNgkk56NKwMrrThSYlMWldbwU6v5Szkh1ZLwv0BW1KLCfmVF3CiE+uBcaSUpXmPh0XDAfAgEnNyzmQrOMgdkN21qjPDTz8WTvhPiiZyayanwxCtwcC3RnV/lcqKQJd0zU/6aKqNaFxPYiJ/ZG5j2Mz2ZZswRZkEdwqcHfgIrM5FHpxeeKNsP1XoM4XkktD09Tvp+yN8AXJY/mS1vYVMLf5xtOS+DmautWaTWlCZlOGeO7zDiJKX/thvxaaHQ==", + }, + "signature_algorithm": Object { + "name": "SHA256-RSA", + "oid": "1.2.840.113549.1.1.11", + }, + "spki_subject_fingerprint": "3c9deaeec1809b90215fe41068e88d09c6c7f3c444e2cc7074a762872d1bbdee", + "subject": Object { + "common_name": Array [ + "akmemontech.imtiyazmemon.website", + ], + "country": Array [], + "domain_component": Array [], + "email_address": Array [], + "given_name": Array [], + "jurisdiction_country": Array [], + "jurisdiction_locality": Array [], + "jurisdiction_province": Array [], + "locality": Array [], + "organization": Array [], + "organization_id": Array [], + "organizational_unit": Array [], + "postal_code": Array [], + "province": Array [], + "serial_number": Array [], + "street_address": Array [], + "surname": Array [], + }, + "subject_dn": "CN=akmemontech.imtiyazmemon.website", + "subject_key_info": Object { + "fingerprint_sha256": "e292f1b8426fb13c12df280f96f35aa4f515eb951e80a8d267091262acb98aa2", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "2048", + "modulus": "vL3d88/7/vbjdUMGhs2eGwlvfcjFbNISekYc573qwTZh4ZRzHWCGK3I9jaJOrksMzwmvfZxBY6FsUk9yFMs15Fs7uR2e+8PCsfzRB/olQcWooOq41iqqLH09n0da6uqugq6ts7ZcFaiJtqJ6JK1ug6ef5LWU2uTepDJ2ssByl9IjU7SnLM4ef5IXjh2slWYf6NsE8FN+wz9PxS8E4YEWjt2si0H565WD9ILhS2xDYapVLyIXw0DK0UbHMU0nSDGFJasHHq8Ul+LVl7Bh6gwxw6niPpol7lkUXFjPTwvtYEoG0nLa2YSW9hleJ3qaszpoYd9eZapm7NvH5SkiX6WfGw==", + }, + }, + "tbs_fingerprint": "4e8608215c79fabad19c8c88140ccb51787c0f6e1ae73ad1db1be47751e0de6a", + "tbs_noct_fingerprint": "4e8608215c79fabad19c8c88140ccb51787c0f6e1ae73ad1db1be47751e0de6a", + "unknown_extensions": Array [], + "validation_level": "unknown", + "validity": Object { + "end": "2019-03-17 12:26:13 UTC", + "length": "31536000", + "start": "2018-03-17 12:26:13 UTC", + }, + "version": "3", + }, + "precert": false, + "raw": "MIIDtjCCAp6gAwIBAgIFASgEJvwwDQYJKoZIhvcNAQELBQAwKzEpMCcGA1UEAwwgYWttZW1vbnRlY2guaW10aXlhem1lbW9uLndlYnNpdGUwHhcNMTgwMzE3MTIyNjEzWhcNMTkwMzE3MTIyNjEzWjArMSkwJwYDVQQDDCBha21lbW9udGVjaC5pbXRpeWF6bWVtb24ud2Vic2l0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALy93fPP+/7243VDBobNnhsJb33IxWzSEnpGHOe96sE2YeGUcx1ghityPY2iTq5LDM8Jr32cQWOhbFJPchTLNeRbO7kdnvvDwrH80Qf6JUHFqKDquNYqqix9PZ9HWurqroKurbO2XBWoibaieiStboOnn+S1lNrk3qQydrLAcpfSI1O0pyzOHn+SF44drJVmH+jbBPBTfsM/T8UvBOGBFo7drItB+euVg/SC4UtsQ2GqVS8iF8NAytFGxzFNJ0gxhSWrBx6vFJfi1ZewYeoMMcOp4j6aJe5ZFFxYz08L7WBKBtJy2tmElvYZXid6mrM6aGHfXmWqZuzbx+UpIl+lnxsCAwEAAaOB4DCB3TAdBgNVHQ4EFgQUKWdZ+gTWwdVD5ZKdodNk9RMHytQwHwYDVR0jBBgwFoAUKWdZ+gTWwdVD5ZKdodNk9RMHytQwCQYDVR0TBAIwADCBjwYDVR0RBIGHMIGEgiBha21lbW9udGVjaC5pbXRpeWF6bWVtb24ud2Vic2l0ZYIPYWttZW1vbnRlY2guY29tghRtYWlsLmFrbWVtb250ZWNoLmNvbYITd3d3LmFrbWVtb250ZWNoLmNvbYIkd3d3LmFrbWVtb250ZWNoLmltdGl5YXptZW1vbi53ZWJzaXRlMA0GCSqGSIb3DQEBCwUAA4IBAQBABEQUJeJeZIV8c0V8B2uFDsaaazOwcmvPJXN5rhxt1V+0TGU+w3OKu34HNSwvKyzd2QW/nxgdxZGZGPEtgfDfODGj2w2CSTno0rAyutOFJiUxaV1vBTq/lLOSHVkvC/QFbUosJ+ZUXcKIT64FxpJSleY+HRcMB8CASc3LOZCs4yB2Q3bWqM8NPPxZO+E+KJnJrJqfDEK3BwLdGdX+VyopAl3TNT/poqo1oXE9iIn9kbmPYzPZlmzBFmQR3Cpwd+AiszkUenF54o2w/VegzheSS0PT1O+n7I3wBclj+ZLW9hUwt/nG05L4OZq61ZpNaUJmU4Z47vMOIkpf+2G/Fpod", + "tags": Array [ + "expired", + ], + "validation": Object { + "apple": Object { + "blacklisted": false, + "had_trusted_path": false, + "in_revocation_set": false, + "parents": Array [], + "paths": Array [], + "trusted_path": false, + "type": "unknown", + "valid": false, + "was_valid": false, + "whitelisted": false, + }, + "google_ct_primary": Object { + "blacklisted": false, + "had_trusted_path": false, + "in_revocation_set": false, + "parents": Array [], + "paths": Array [], + "trusted_path": false, + "type": "unknown", + "valid": false, + "was_valid": false, + "whitelisted": false, + }, + "microsoft": Object { + "blacklisted": false, + "had_trusted_path": false, + "in_revocation_set": false, + "parents": Array [], + "paths": Array [], + "trusted_path": false, + "type": "unknown", + "valid": false, + "was_valid": false, + "whitelisted": false, + }, + "nss": Object { + "blacklisted": false, + "had_trusted_path": false, + "in_revocation_set": false, + "parents": Array [], + "paths": Array [], + "trusted_path": false, + "type": "unknown", + "valid": false, + "was_valid": false, + "whitelisted": false, + }, + }, + "zlint": Object { + "errors_present": true, + "fatals_present": false, + "lints": Object { + "e_basic_constraints_not_critical": "na", + "e_ca_common_name_missing": "na", + "e_ca_country_name_invalid": "na", + "e_ca_country_name_missing": "na", + "e_ca_crl_sign_not_set": "na", + "e_ca_is_ca": "na", + "e_ca_key_cert_sign_not_set": "na", + "e_ca_key_usage_missing": "na", + "e_ca_key_usage_not_critical": "na", + "e_ca_organization_name_missing": "na", + "e_ca_subject_field_empty": "na", + "e_cab_dv_conflicts_with_locality": "na", + "e_cab_dv_conflicts_with_org": "na", + "e_cab_dv_conflicts_with_postal": "na", + "e_cab_dv_conflicts_with_province": "na", + "e_cab_dv_conflicts_with_street": "na", + "e_cab_iv_requires_personal_name": "na", + "e_cab_ov_requires_org": "na", + "e_cert_contains_unique_identifier": "pass", + "e_cert_extensions_version_not_3": "pass", + "e_cert_policy_iv_requires_country": "na", + "e_cert_policy_iv_requires_province_or_locality": "na", + "e_cert_policy_ov_requires_country": "na", + "e_cert_policy_ov_requires_province_or_locality": "na", + "e_cert_unique_identifier_version_not_2_or_3": "na", + "e_distribution_point_incomplete": "na", + "e_dnsname_bad_character_in_label": "na", + "e_dnsname_contains_bare_iana_suffix": "na", + "e_dnsname_empty_label": "na", + "e_dnsname_hyphen_in_sld": "na", + "e_dnsname_label_too_long": "na", + "e_dnsname_left_label_wildcard_correct": "pass", + "e_dnsname_not_valid_tld": "na", + "e_dnsname_underscore_in_sld": "na", + "e_dnsname_wildcard_only_in_left_label": "pass", + "e_dsa_correct_order_in_subgroup": "na", + "e_dsa_improper_modulus_or_divisor_size": "na", + "e_dsa_params_missing": "na", + "e_dsa_shorter_than_2048_bits": "na", + "e_dsa_unique_correct_representation": "na", + "e_ec_improper_curves": "na", + "e_ev_business_category_missing": "na", + "e_ev_country_name_missing": "na", + "e_ev_organization_name_missing": "na", + "e_ev_serial_number_missing": "na", + "e_ev_valid_time_too_long": "na", + "e_ext_aia_marked_critical": "na", + "e_ext_authority_key_identifier_critical": "pass", + "e_ext_authority_key_identifier_missing": "pass", + "e_ext_authority_key_identifier_no_key_identifier": "pass", + "e_ext_cert_policy_disallowed_any_policy_qualifier": "na", + "e_ext_cert_policy_duplicate": "na", + "e_ext_cert_policy_explicit_text_ia5_string": "na", + "e_ext_cert_policy_explicit_text_too_long": "na", + "e_ext_duplicate_extension": "pass", + "e_ext_freshest_crl_marked_critical": "na", + "e_ext_ian_dns_not_ia5_string": "na", + "e_ext_ian_empty_name": "na", + "e_ext_ian_no_entries": "na", + "e_ext_ian_rfc822_format_invalid": "na", + "e_ext_ian_space_dns_name": "na", + "e_ext_ian_uri_format_invalid": "na", + "e_ext_ian_uri_host_not_fqdn_or_ip": "na", + "e_ext_ian_uri_not_ia5": "na", + "e_ext_ian_uri_relative": "na", + "e_ext_key_usage_cert_sign_without_ca": "na", + "e_ext_key_usage_without_bits": "na", + "e_ext_name_constraints_not_critical": "na", + "e_ext_name_constraints_not_in_ca": "na", + "e_ext_policy_constraints_empty": "na", + "e_ext_policy_constraints_not_critical": "na", + "e_ext_policy_map_any_policy": "na", + "e_ext_san_contains_reserved_ip": "pass", + "e_ext_san_directory_name_present": "pass", + "e_ext_san_dns_name_too_long": "pass", + "e_ext_san_dns_not_ia5_string": "pass", + "e_ext_san_edi_party_name_present": "pass", + "e_ext_san_empty_name": "pass", + "e_ext_san_missing": "pass", + "e_ext_san_no_entries": "pass", + "e_ext_san_not_critical_without_subject": "pass", + "e_ext_san_other_name_present": "pass", + "e_ext_san_registered_id_present": "pass", + "e_ext_san_rfc822_format_invalid": "pass", + "e_ext_san_rfc822_name_present": "pass", + "e_ext_san_space_dns_name": "pass", + "e_ext_san_uniform_resource_identifier_present": "pass", + "e_ext_san_uri_format_invalid": "pass", + "e_ext_san_uri_host_not_fqdn_or_ip": "pass", + "e_ext_san_uri_not_ia5": "pass", + "e_ext_san_uri_relative": "pass", + "e_ext_subject_directory_attr_critical": "na", + "e_ext_subject_key_identifier_critical": "pass", + "e_ext_subject_key_identifier_missing_ca": "na", + "e_generalized_time_does_not_include_seconds": "na", + "e_generalized_time_includes_fraction_seconds": "na", + "e_generalized_time_not_in_zulu": "na", + "e_ian_bare_wildcard": "na", + "e_ian_dns_name_includes_null_char": "na", + "e_ian_dns_name_starts_with_period": "na", + "e_ian_wildcard_not_first": "na", + "e_inhibit_any_policy_not_critical": "na", + "e_international_dns_name_not_unicode": "pass", + "e_invalid_certificate_version": "pass", + "e_issuer_field_empty": "pass", + "e_name_constraint_empty": "na", + "e_name_constraint_maximum_not_absent": "na", + "e_name_constraint_minimum_non_zero": "na", + "e_old_root_ca_rsa_mod_less_than_2048_bits": "na", + "e_old_sub_ca_rsa_mod_less_than_1024_bits": "na", + "e_old_sub_cert_rsa_mod_less_than_1024_bits": "na", + "e_path_len_constraint_improperly_included": "pass", + "e_path_len_constraint_zero_or_less": "pass", + "e_public_key_type_not_allowed": "pass", + "e_root_ca_extended_key_usage_present": "na", + "e_root_ca_key_usage_must_be_critical": "na", + "e_root_ca_key_usage_present": "na", + "e_rsa_exp_negative": "pass", + "e_rsa_mod_less_than_2048_bits": "pass", + "e_rsa_no_public_key": "pass", + "e_rsa_public_exponent_not_odd": "pass", + "e_rsa_public_exponent_too_small": "pass", + "e_san_bare_wildcard": "pass", + "e_san_dns_name_includes_null_char": "pass", + "e_san_dns_name_starts_with_period": "pass", + "e_san_wildcard_not_first": "pass", + "e_serial_number_longer_than_20_octets": "pass", + "e_serial_number_not_positive": "pass", + "e_signature_algorithm_not_supported": "pass", + "e_sub_ca_aia_does_not_contain_ocsp_url": "na", + "e_sub_ca_aia_marked_critical": "na", + "e_sub_ca_aia_missing": "na", + "e_sub_ca_certificate_policies_missing": "na", + "e_sub_ca_crl_distribution_points_does_not_contain_url": "na", + "e_sub_ca_crl_distribution_points_marked_critical": "na", + "e_sub_ca_crl_distribution_points_missing": "na", + "e_sub_cert_aia_does_not_contain_ocsp_url": "error", + "e_sub_cert_aia_marked_critical": "na", + "e_sub_cert_aia_missing": "error", + "e_sub_cert_cert_policy_empty": "error", + "e_sub_cert_certificate_policies_missing": "error", + "e_sub_cert_country_name_must_appear": "na", + "e_sub_cert_crl_distribution_points_does_not_contain_url": "na", + "e_sub_cert_crl_distribution_points_marked_critical": "na", + "e_sub_cert_eku_missing": "error", + "e_sub_cert_eku_server_auth_client_auth_missing": "na", + "e_sub_cert_given_name_surname_contains_correct_policy": "na", + "e_sub_cert_key_usage_cert_sign_bit_set": "na", + "e_sub_cert_key_usage_crl_sign_bit_set": "na", + "e_sub_cert_locality_name_must_appear": "na", + "e_sub_cert_locality_name_must_not_appear": "na", + "e_sub_cert_not_is_ca": "na", + "e_sub_cert_or_sub_ca_using_sha1": "pass", + "e_sub_cert_postal_code_must_not_appear": "na", + "e_sub_cert_province_must_appear": "na", + "e_sub_cert_province_must_not_appear": "na", + "e_sub_cert_street_address_should_not_exist": "na", + "e_subject_common_name_max_length": "pass", + "e_subject_common_name_not_from_san": "pass", + "e_subject_contains_noninformational_value": "pass", + "e_subject_contains_reserved_ip": "pass", + "e_subject_country_not_iso": "pass", + "e_subject_empty_without_san": "pass", + "e_subject_info_access_marked_critical": "na", + "e_subject_locality_name_max_length": "pass", + "e_subject_not_dn": "pass", + "e_subject_organization_name_max_length": "pass", + "e_subject_organizational_unit_name_max_length": "pass", + "e_subject_state_name_max_length": "pass", + "e_utc_time_does_not_include_seconds": "pass", + "e_utc_time_not_in_zulu": "pass", + "e_validity_time_not_positive": "pass", + "e_wrong_time_format_pre2050": "pass", + "n_ca_digital_signature_not_set": "na", + "n_contains_redacted_dnsname": "na", + "n_sub_ca_eku_not_technically_constrained": "na", + "n_subject_common_name_included": "notice", + "w_distribution_point_missing_ldap_or_uri": "na", + "w_dnsname_underscore_in_trd": "na", + "w_dnsname_wildcard_left_of_public_suffix": "na", + "w_eku_critical_improperly": "na", + "w_ext_aia_access_location_missing": "na", + "w_ext_cert_policy_contains_noticeref": "na", + "w_ext_cert_policy_explicit_text_includes_control": "na", + "w_ext_cert_policy_explicit_text_not_nfc": "na", + "w_ext_cert_policy_explicit_text_not_utf8": "na", + "w_ext_crl_distribution_marked_critical": "na", + "w_ext_ian_critical": "na", + "w_ext_key_usage_not_critical": "na", + "w_ext_policy_map_not_critical": "na", + "w_ext_policy_map_not_in_cert_policy": "na", + "w_ext_san_critical_with_subject_dn": "pass", + "w_ext_subject_key_identifier_missing_sub_cert": "pass", + "w_ian_iana_pub_suffix_empty": "na", + "w_issuer_dn_leading_whitespace": "pass", + "w_issuer_dn_trailing_whitespace": "pass", + "w_multiple_issuer_rdn": "pass", + "w_name_constraint_on_edi_party_name": "na", + "w_name_constraint_on_registered_id": "na", + "w_name_constraint_on_x400": "na", + "w_root_ca_basic_constraints_path_len_constraint_field_present": "na", + "w_root_ca_contains_cert_policy": "na", + "w_rsa_mod_factors_smaller_than_752": "pass", + "w_rsa_mod_not_odd": "pass", + "w_rsa_public_exponent_not_in_range": "pass", + "w_san_iana_pub_suffix_empty": "pass", + "w_serial_number_low_entropy": "warn", + "w_sub_ca_aia_does_not_contain_issuing_ca_url": "na", + "w_sub_ca_certificate_policies_marked_critical": "na", + "w_sub_ca_eku_critical": "na", + "w_sub_ca_name_constraints_not_critical": "na", + "w_sub_cert_aia_does_not_contain_issuing_ca_url": "na", + "w_sub_cert_certificate_policies_marked_critical": "na", + "w_sub_cert_eku_extra_values": "na", + "w_sub_cert_sha1_expiration_too_long": "na", + "w_subject_dn_leading_whitespace": "pass", + "w_subject_dn_trailing_whitespace": "pass", + }, + "notices_present": true, + "version": "3", + "warnings_present": true, + }, + }, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": "subdomain.first_file_testdomain2.gov", + "organization": null, + "reverseName": "gov.first_file_testdomain2.subdomain", + "screenshot": null, + "services": Array [], + "ssl": Object { + "altNames": Array [ + "www.akmemontech.imtiyazmemon.website", + "akmemontech.imtiyazmemon.website", + "akmemontech.com", + "mail.akmemontech.com", + "www.akmemontech.com", + "*.first_file_testdomain2.gov", + ], + "fingerprint": "MIIDtjCCAp6gAwIBAgIFASgEJvwwDQYJKoZIhvcNAQELBQAwKzEpMCcGA1UEAwwgYWttZW1vbnRlY2guaW10aXlhem1lbW9uLndlYnNpdGUwHhcNMTgwMzE3MTIyNjEzWhcNMTkwMzE3MTIyNjEzWjArMSkwJwYDVQQDDCBha21lbW9udGVjaC5pbXRpeWF6bWVtb24ud2Vic2l0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALy93fPP+/7243VDBobNnhsJb33IxWzSEnpGHOe96sE2YeGUcx1ghityPY2iTq5LDM8Jr32cQWOhbFJPchTLNeRbO7kdnvvDwrH80Qf6JUHFqKDquNYqqix9PZ9HWurqroKurbO2XBWoibaieiStboOnn+S1lNrk3qQydrLAcpfSI1O0pyzOHn+SF44drJVmH+jbBPBTfsM/T8UvBOGBFo7drItB+euVg/SC4UtsQ2GqVS8iF8NAytFGxzFNJ0gxhSWrBx6vFJfi1ZewYeoMMcOp4j6aJe5ZFFxYz08L7WBKBtJy2tmElvYZXid6mrM6aGHfXmWqZuzbx+UpIl+lnxsCAwEAAaOB4DCB3TAdBgNVHQ4EFgQUKWdZ+gTWwdVD5ZKdodNk9RMHytQwHwYDVR0jBBgwFoAUKWdZ+gTWwdVD5ZKdodNk9RMHytQwCQYDVR0TBAIwADCBjwYDVR0RBIGHMIGEgiBha21lbW9udGVjaC5pbXRpeWF6bWVtb24ud2Vic2l0ZYIPYWttZW1vbnRlY2guY29tghRtYWlsLmFrbWVtb250ZWNoLmNvbYITd3d3LmFrbWVtb250ZWNoLmNvbYIkd3d3LmFrbWVtb250ZWNoLmltdGl5YXptZW1vbi53ZWJzaXRlMA0GCSqGSIb3DQEBCwUAA4IBAQBABEQUJeJeZIV8c0V8B2uFDsaaazOwcmvPJXN5rhxt1V+0TGU+w3OKu34HNSwvKyzd2QW/nxgdxZGZGPEtgfDfODGj2w2CSTno0rAyutOFJiUxaV1vBTq/lLOSHVkvC/QFbUosJ+ZUXcKIT64FxpJSleY+HRcMB8CASc3LOZCs4yB2Q3bWqM8NPPxZO+E+KJnJrJqfDEK3BwLdGdX+VyopAl3TNT/poqo1oXE9iIn9kbmPYzPZlmzBFmQR3Cpwd+AiszkUenF54o2w/VegzheSS0PT1O+n7I3wBclj+ZLW9hUwt/nG05L4OZq61ZpNaUJmU4Z47vMOIkpf+2G/Fpod", + "issuerCN": Array [ + "akmemontech.imtiyazmemon.website", + ], + "issuerOrg": Array [], + "validFrom": "2018-03-17 12:26:13 UTC", + "validTo": "2019-03-17 12:26:13 UTC", + }, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object { + "added_at": "2018-03-19 14:19:01 UTC", + "fingerprint_sha256": "ed93d6dfbbca976e798864b747410763464b3328929a94371ad15d57217c92a5", + "metadata": Object { + "added_at": "2018-03-19 14:19:01 UTC", + "parse_status": "success", + "parse_version": "1", + "post_processed": true, + "post_processed_at": "2019-02-14 00:48:51 UTC", + "seen_in_scan": true, + "source": "scan", + "updated_at": "2019-02-14 00:48:54 UTC", + }, + "parents": Array [], + "parsed": Object { + "extensions": Object { + "authority_key_id": "aa8d75538faa8fe4bc32a5d91bf49f25b53a0bb0", + "basic_constraints": Object { + "is_ca": false, + }, + "certificate_policies": Array [], + "crl_distribution_points": Array [], + "signed_certificate_timestamps": Array [], + "subject_key_id": "aa8d75538faa8fe4bc32a5d91bf49f25b53a0bb0", + }, + "fingerprint_md5": "01287df208bc96c6da4b19e1882555e4", + "fingerprint_sha1": "8c696a4d2afa2dc5ddd1258ae78ac222ae567865", + "fingerprint_sha256": "ed93d6dfbbca976e798864b747410763464b3328929a94371ad15d57217c92a5", + "issuer": Object { + "common_name": Array [ + "tavarantarkastaja.com", + ], + "country": Array [ + "FI", + ], + "domain_component": Array [], + "email_address": Array [ + "tuki@webhotelli.fi", + ], + "given_name": Array [], + "jurisdiction_country": Array [], + "jurisdiction_locality": Array [], + "jurisdiction_province": Array [], + "locality": Array [ + "Helsinki", + ], + "organization": Array [ + "Nordic Web Hotel Oy", + ], + "organization_id": Array [], + "organizational_unit": Array [ + "Webhotelli.fi", + ], + "postal_code": Array [], + "province": Array [ + "Uusimaa", + ], + "serial_number": Array [], + "street_address": Array [], + "surname": Array [], + }, + "issuer_dn": "C=FI, L=Helsinki, O=Nordic Web Hotel Oy, OU=Webhotelli.fi, CN=tavarantarkastaja.com, emailAddress=tuki@webhotelli.fi, ST=Uusimaa", + "names": Array [ + "tavarantarkastaja.com", + "subdomain.first_file_testdomain4.gov", + ], + "redacted": false, + "serial_number": "157943845", + "signature": Object { + "self_signed": true, + "signature_algorithm": Object { + "name": "SHA256-RSA", + "oid": "1.2.840.113549.1.1.11", + }, + "valid": false, + "value": "laDNmY7+h2FQ2a1R/4lkN3C1p1JJ5w1sydqQJ95Xp6Jzu8yQ+p3FQeHQlIGy6Cv1fPURTq0aTjKK4v2M2sXheLP43Yg5ak9wIuHojpiiYDmKbDWlMjTD34WHEWO9F4w9apeQtTlEDlEpvUWtoqUQphJNZkTdu1HG0T4OyrCvsSONMCvYvxJy7TgEHTDmTT4NzjNLk25AcfzeBc6siOfcMwKQLmMgvKHOHIePPzvekFkstC3UM+z7kqih+1YEJpdeMU176Bm2Zw92DlyISXXmFfjmj6EY76e6Lz1jvg7x4D53NJhzjnQ+YGvS7t0wNa1YiRUjo2AYn6qpZAXA3r0PcA==", + }, + "signature_algorithm": Object { + "name": "SHA256-RSA", + "oid": "1.2.840.113549.1.1.11", + }, + "spki_subject_fingerprint": "c2bdc1a2112f732023a71fe64034613f7bbc0fbb7527747e7309c3319726ecf6", + "subject": Object { + "common_name": Array [ + "tavarantarkastaja.com", + ], + "country": Array [ + "FI", + ], + "domain_component": Array [], + "email_address": Array [ + "tuki@webhotelli.fi", + ], + "given_name": Array [], + "jurisdiction_country": Array [], + "jurisdiction_locality": Array [], + "jurisdiction_province": Array [], + "locality": Array [ + "Helsinki", + ], + "organization": Array [ + "Nordic Web Hotel Oy", + ], + "organization_id": Array [], + "organizational_unit": Array [ + "Webhotelli.fi", + ], + "postal_code": Array [], + "province": Array [ + "Uusimaa", + ], + "serial_number": Array [], + "street_address": Array [], + "surname": Array [], + }, + "subject_dn": "C=FI, L=Helsinki, O=Nordic Web Hotel Oy, OU=Webhotelli.fi, CN=tavarantarkastaja.com, emailAddress=tuki@webhotelli.fi, ST=Uusimaa", + "subject_key_info": Object { + "fingerprint_sha256": "bb6d492ff73eb585f1289e02570e785c41a9f66c98507850570721283ae91626", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "2048", + "modulus": "zZyGfg+Sil+OsCJh/xxw0tSVTtFHKv1yok/g7Ev/fdqhnsBlERjhuotevy+9g3QZcPwaw7bquxAQ4JRY+hL4D+/o7vNOFynIOo1NmP5yY/x+OFyugwRBPgvY8eSxj8yY0y3hPzgQPtIWdHo5c7+t9bjuyGTpK2UIr64UTHAxjSkibo8CCTI2UMn/EP3eHgLlkBpeiFUGo9BwMBHpJyR9hVa2POOu7gSC6nPg7KDzV1nfWmb/rHkRX+wdDRCG87cMkkcV1IqlLKY1v2vS+tiNNrf/GyBgPfzyMQ86/27msbHks9YQSHbTtfarRXAvP8+w++dLFfIJj7SeeLOCr8kPVw==", + }, + }, + "tbs_fingerprint": "eca30f5ff0cc15e5085f7420a2ab5c0597e94f1532c76b76f2dd66b04a5ed20d", + "tbs_noct_fingerprint": "eca30f5ff0cc15e5085f7420a2ab5c0597e94f1532c76b76f2dd66b04a5ed20d", + "unknown_extensions": Array [], + "validation_level": "unknown", + "validity": Object { + "end": "2019-02-13 13:36:26 UTC", + "length": "31536000", + "start": "2018-02-13 13:36:26 UTC", + }, + "version": "3", + }, + "precert": false, + "raw": "MIIEIzCCAwugAwIBAgIECWoIJTANBgkqhkiG9w0BAQsFADCBqzELMAkGA1UEBhMCRkkxETAPBgNVBAcMCEhlbHNpbmtpMRwwGgYDVQQKDBNOb3JkaWMgV2ViIEhvdGVsIE95MRYwFAYDVQQLDA1XZWJob3RlbGxpLmZpMR4wHAYDVQQDDBV0YXZhcmFudGFya2FzdGFqYS5jb20xITAfBgkqhkiG9w0BCQEWEnR1a2lAd2ViaG90ZWxsaS5maTEQMA4GA1UECAwHVXVzaW1hYTAeFw0xODAyMTMxMzM2MjZaFw0xOTAyMTMxMzM2MjZaMIGrMQswCQYDVQQGEwJGSTERMA8GA1UEBwwISGVsc2lua2kxHDAaBgNVBAoME05vcmRpYyBXZWIgSG90ZWwgT3kxFjAUBgNVBAsMDVdlYmhvdGVsbGkuZmkxHjAcBgNVBAMMFXRhdmFyYW50YXJrYXN0YWphLmNvbTEhMB8GCSqGSIb3DQEJARYSdHVraUB3ZWJob3RlbGxpLmZpMRAwDgYDVQQIDAdVdXNpbWFhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzZyGfg+Sil+OsCJh/xxw0tSVTtFHKv1yok/g7Ev/fdqhnsBlERjhuotevy+9g3QZcPwaw7bquxAQ4JRY+hL4D+/o7vNOFynIOo1NmP5yY/x+OFyugwRBPgvY8eSxj8yY0y3hPzgQPtIWdHo5c7+t9bjuyGTpK2UIr64UTHAxjSkibo8CCTI2UMn/EP3eHgLlkBpeiFUGo9BwMBHpJyR9hVa2POOu7gSC6nPg7KDzV1nfWmb/rHkRX+wdDRCG87cMkkcV1IqlLKY1v2vS+tiNNrf/GyBgPfzyMQ86/27msbHks9YQSHbTtfarRXAvP8+w++dLFfIJj7SeeLOCr8kPVwIDAQABo00wSzAdBgNVHQ4EFgQUqo11U4+qj+S8MqXZG/SfJbU6C7AwHwYDVR0jBBgwFoAUqo11U4+qj+S8MqXZG/SfJbU6C7AwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAlaDNmY7+h2FQ2a1R/4lkN3C1p1JJ5w1sydqQJ95Xp6Jzu8yQ+p3FQeHQlIGy6Cv1fPURTq0aTjKK4v2M2sXheLP43Yg5ak9wIuHojpiiYDmKbDWlMjTD34WHEWO9F4w9apeQtTlEDlEpvUWtoqUQphJNZkTdu1HG0T4OyrCvsSONMCvYvxJy7TgEHTDmTT4NzjNLk25AcfzeBc6siOfcMwKQLmMgvKHOHIePPzvekFkstC3UM+z7kqih+1YEJpdeMU176Bm2Zw92DlyISXXmFfjmj6EY76e6Lz1jvg7x4D53NJhzjnQ+YGvS7t0wNa1YiRUjo2AYn6qpZAXA3r0PcA==", + "tags": Array [ + "expired", + ], + "validation": Object { + "apple": Object { + "blacklisted": false, + "had_trusted_path": false, + "in_revocation_set": false, + "parents": Array [], + "paths": Array [], + "trusted_path": false, + "type": "unknown", + "valid": false, + "was_valid": false, + "whitelisted": false, + }, + "google_ct_primary": Object { + "blacklisted": false, + "had_trusted_path": false, + "in_revocation_set": false, + "parents": Array [], + "paths": Array [], + "trusted_path": false, + "type": "unknown", + "valid": false, + "was_valid": false, + "whitelisted": false, + }, + "microsoft": Object { + "blacklisted": false, + "had_trusted_path": false, + "in_revocation_set": false, + "parents": Array [], + "paths": Array [], + "trusted_path": false, + "type": "unknown", + "valid": false, + "was_valid": false, + "whitelisted": false, + }, + "nss": Object { + "blacklisted": false, + "had_trusted_path": false, + "in_revocation_set": false, + "parents": Array [], + "paths": Array [], + "trusted_path": false, + "type": "unknown", + "valid": false, + "was_valid": false, + "whitelisted": false, + }, + }, + "zlint": Object { + "errors_present": true, + "fatals_present": false, + "lints": Object { + "e_basic_constraints_not_critical": "na", + "e_ca_common_name_missing": "na", + "e_ca_country_name_invalid": "na", + "e_ca_country_name_missing": "na", + "e_ca_crl_sign_not_set": "na", + "e_ca_is_ca": "na", + "e_ca_key_cert_sign_not_set": "na", + "e_ca_key_usage_missing": "na", + "e_ca_key_usage_not_critical": "na", + "e_ca_organization_name_missing": "na", + "e_ca_subject_field_empty": "na", + "e_cab_dv_conflicts_with_locality": "na", + "e_cab_dv_conflicts_with_org": "na", + "e_cab_dv_conflicts_with_postal": "na", + "e_cab_dv_conflicts_with_province": "na", + "e_cab_dv_conflicts_with_street": "na", + "e_cab_iv_requires_personal_name": "na", + "e_cab_ov_requires_org": "na", + "e_cert_contains_unique_identifier": "pass", + "e_cert_extensions_version_not_3": "pass", + "e_cert_policy_iv_requires_country": "na", + "e_cert_policy_iv_requires_province_or_locality": "na", + "e_cert_policy_ov_requires_country": "na", + "e_cert_policy_ov_requires_province_or_locality": "na", + "e_cert_unique_identifier_version_not_2_or_3": "na", + "e_distribution_point_incomplete": "na", + "e_dnsname_bad_character_in_label": "na", + "e_dnsname_contains_bare_iana_suffix": "na", + "e_dnsname_empty_label": "na", + "e_dnsname_hyphen_in_sld": "na", + "e_dnsname_label_too_long": "na", + "e_dnsname_left_label_wildcard_correct": "pass", + "e_dnsname_not_valid_tld": "na", + "e_dnsname_underscore_in_sld": "na", + "e_dnsname_wildcard_only_in_left_label": "pass", + "e_dsa_correct_order_in_subgroup": "na", + "e_dsa_improper_modulus_or_divisor_size": "na", + "e_dsa_params_missing": "na", + "e_dsa_shorter_than_2048_bits": "na", + "e_dsa_unique_correct_representation": "na", + "e_ec_improper_curves": "na", + "e_ev_business_category_missing": "na", + "e_ev_country_name_missing": "na", + "e_ev_organization_name_missing": "na", + "e_ev_serial_number_missing": "na", + "e_ev_valid_time_too_long": "na", + "e_ext_aia_marked_critical": "na", + "e_ext_authority_key_identifier_critical": "pass", + "e_ext_authority_key_identifier_missing": "pass", + "e_ext_authority_key_identifier_no_key_identifier": "pass", + "e_ext_cert_policy_disallowed_any_policy_qualifier": "na", + "e_ext_cert_policy_duplicate": "na", + "e_ext_cert_policy_explicit_text_ia5_string": "na", + "e_ext_cert_policy_explicit_text_too_long": "na", + "e_ext_duplicate_extension": "pass", + "e_ext_freshest_crl_marked_critical": "na", + "e_ext_ian_dns_not_ia5_string": "na", + "e_ext_ian_empty_name": "na", + "e_ext_ian_no_entries": "na", + "e_ext_ian_rfc822_format_invalid": "na", + "e_ext_ian_space_dns_name": "na", + "e_ext_ian_uri_format_invalid": "na", + "e_ext_ian_uri_host_not_fqdn_or_ip": "na", + "e_ext_ian_uri_not_ia5": "na", + "e_ext_ian_uri_relative": "na", + "e_ext_key_usage_cert_sign_without_ca": "na", + "e_ext_key_usage_without_bits": "na", + "e_ext_name_constraints_not_critical": "na", + "e_ext_name_constraints_not_in_ca": "na", + "e_ext_policy_constraints_empty": "na", + "e_ext_policy_constraints_not_critical": "na", + "e_ext_policy_map_any_policy": "na", + "e_ext_san_contains_reserved_ip": "pass", + "e_ext_san_directory_name_present": "na", + "e_ext_san_dns_name_too_long": "na", + "e_ext_san_dns_not_ia5_string": "na", + "e_ext_san_edi_party_name_present": "na", + "e_ext_san_empty_name": "na", + "e_ext_san_missing": "error", + "e_ext_san_no_entries": "na", + "e_ext_san_not_critical_without_subject": "na", + "e_ext_san_other_name_present": "na", + "e_ext_san_registered_id_present": "na", + "e_ext_san_rfc822_format_invalid": "na", + "e_ext_san_rfc822_name_present": "na", + "e_ext_san_space_dns_name": "na", + "e_ext_san_uniform_resource_identifier_present": "na", + "e_ext_san_uri_format_invalid": "na", + "e_ext_san_uri_host_not_fqdn_or_ip": "na", + "e_ext_san_uri_not_ia5": "na", + "e_ext_san_uri_relative": "na", + "e_ext_subject_directory_attr_critical": "na", + "e_ext_subject_key_identifier_critical": "pass", + "e_ext_subject_key_identifier_missing_ca": "na", + "e_generalized_time_does_not_include_seconds": "na", + "e_generalized_time_includes_fraction_seconds": "na", + "e_generalized_time_not_in_zulu": "na", + "e_ian_bare_wildcard": "na", + "e_ian_dns_name_includes_null_char": "na", + "e_ian_dns_name_starts_with_period": "na", + "e_ian_wildcard_not_first": "na", + "e_inhibit_any_policy_not_critical": "na", + "e_international_dns_name_not_unicode": "na", + "e_invalid_certificate_version": "pass", + "e_issuer_field_empty": "pass", + "e_name_constraint_empty": "na", + "e_name_constraint_maximum_not_absent": "na", + "e_name_constraint_minimum_non_zero": "na", + "e_old_root_ca_rsa_mod_less_than_2048_bits": "na", + "e_old_sub_ca_rsa_mod_less_than_1024_bits": "na", + "e_old_sub_cert_rsa_mod_less_than_1024_bits": "na", + "e_path_len_constraint_improperly_included": "pass", + "e_path_len_constraint_zero_or_less": "pass", + "e_public_key_type_not_allowed": "pass", + "e_root_ca_extended_key_usage_present": "na", + "e_root_ca_key_usage_must_be_critical": "na", + "e_root_ca_key_usage_present": "na", + "e_rsa_exp_negative": "pass", + "e_rsa_mod_less_than_2048_bits": "pass", + "e_rsa_no_public_key": "pass", + "e_rsa_public_exponent_not_odd": "pass", + "e_rsa_public_exponent_too_small": "pass", + "e_san_bare_wildcard": "na", + "e_san_dns_name_includes_null_char": "na", + "e_san_dns_name_starts_with_period": "na", + "e_san_wildcard_not_first": "na", + "e_serial_number_longer_than_20_octets": "pass", + "e_serial_number_not_positive": "pass", + "e_signature_algorithm_not_supported": "pass", + "e_sub_ca_aia_does_not_contain_ocsp_url": "na", + "e_sub_ca_aia_marked_critical": "na", + "e_sub_ca_aia_missing": "na", + "e_sub_ca_certificate_policies_missing": "na", + "e_sub_ca_crl_distribution_points_does_not_contain_url": "na", + "e_sub_ca_crl_distribution_points_marked_critical": "na", + "e_sub_ca_crl_distribution_points_missing": "na", + "e_sub_cert_aia_does_not_contain_ocsp_url": "error", + "e_sub_cert_aia_marked_critical": "na", + "e_sub_cert_aia_missing": "error", + "e_sub_cert_cert_policy_empty": "error", + "e_sub_cert_certificate_policies_missing": "error", + "e_sub_cert_country_name_must_appear": "na", + "e_sub_cert_crl_distribution_points_does_not_contain_url": "na", + "e_sub_cert_crl_distribution_points_marked_critical": "na", + "e_sub_cert_eku_missing": "error", + "e_sub_cert_eku_server_auth_client_auth_missing": "na", + "e_sub_cert_given_name_surname_contains_correct_policy": "na", + "e_sub_cert_key_usage_cert_sign_bit_set": "na", + "e_sub_cert_key_usage_crl_sign_bit_set": "na", + "e_sub_cert_locality_name_must_appear": "na", + "e_sub_cert_locality_name_must_not_appear": "na", + "e_sub_cert_not_is_ca": "na", + "e_sub_cert_or_sub_ca_using_sha1": "pass", + "e_sub_cert_postal_code_must_not_appear": "na", + "e_sub_cert_province_must_appear": "na", + "e_sub_cert_province_must_not_appear": "na", + "e_sub_cert_street_address_should_not_exist": "na", + "e_subject_common_name_max_length": "pass", + "e_subject_common_name_not_from_san": "error", + "e_subject_contains_noninformational_value": "pass", + "e_subject_contains_reserved_ip": "pass", + "e_subject_country_not_iso": "pass", + "e_subject_empty_without_san": "pass", + "e_subject_info_access_marked_critical": "na", + "e_subject_locality_name_max_length": "pass", + "e_subject_not_dn": "pass", + "e_subject_organization_name_max_length": "pass", + "e_subject_organizational_unit_name_max_length": "pass", + "e_subject_state_name_max_length": "pass", + "e_utc_time_does_not_include_seconds": "pass", + "e_utc_time_not_in_zulu": "pass", + "e_validity_time_not_positive": "pass", + "e_wrong_time_format_pre2050": "pass", + "n_ca_digital_signature_not_set": "na", + "n_contains_redacted_dnsname": "na", + "n_sub_ca_eku_not_technically_constrained": "na", + "n_subject_common_name_included": "notice", + "w_distribution_point_missing_ldap_or_uri": "na", + "w_dnsname_underscore_in_trd": "na", + "w_dnsname_wildcard_left_of_public_suffix": "na", + "w_eku_critical_improperly": "na", + "w_ext_aia_access_location_missing": "na", + "w_ext_cert_policy_contains_noticeref": "na", + "w_ext_cert_policy_explicit_text_includes_control": "na", + "w_ext_cert_policy_explicit_text_not_nfc": "na", + "w_ext_cert_policy_explicit_text_not_utf8": "na", + "w_ext_crl_distribution_marked_critical": "na", + "w_ext_ian_critical": "na", + "w_ext_key_usage_not_critical": "na", + "w_ext_policy_map_not_critical": "na", + "w_ext_policy_map_not_in_cert_policy": "na", + "w_ext_san_critical_with_subject_dn": "na", + "w_ext_subject_key_identifier_missing_sub_cert": "pass", + "w_ian_iana_pub_suffix_empty": "na", + "w_issuer_dn_leading_whitespace": "pass", + "w_issuer_dn_trailing_whitespace": "pass", + "w_multiple_issuer_rdn": "pass", + "w_name_constraint_on_edi_party_name": "na", + "w_name_constraint_on_registered_id": "na", + "w_name_constraint_on_x400": "na", + "w_root_ca_basic_constraints_path_len_constraint_field_present": "na", + "w_root_ca_contains_cert_policy": "na", + "w_rsa_mod_factors_smaller_than_752": "pass", + "w_rsa_mod_not_odd": "pass", + "w_rsa_public_exponent_not_in_range": "pass", + "w_san_iana_pub_suffix_empty": "na", + "w_serial_number_low_entropy": "warn", + "w_sub_ca_aia_does_not_contain_issuing_ca_url": "na", + "w_sub_ca_certificate_policies_marked_critical": "na", + "w_sub_ca_eku_critical": "na", + "w_sub_ca_name_constraints_not_critical": "na", + "w_sub_cert_aia_does_not_contain_issuing_ca_url": "na", + "w_sub_cert_certificate_policies_marked_critical": "na", + "w_sub_cert_eku_extra_values": "na", + "w_sub_cert_sha1_expiration_too_long": "na", + "w_subject_dn_leading_whitespace": "pass", + "w_subject_dn_trailing_whitespace": "pass", + }, + "notices_present": true, + "version": "3", + "warnings_present": true, + }, + }, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "85.24.146.152", + "ipOnly": false, + "name": "subdomain.first_file_testdomain4.gov", + "organization": null, + "reverseName": "gov.first_file_testdomain4.subdomain", + "screenshot": null, + "services": Array [], + "ssl": Object { + "altNames": Array [ + "tavarantarkastaja.com", + "subdomain.first_file_testdomain4.gov", + ], + "fingerprint": "MIIEIzCCAwugAwIBAgIECWoIJTANBgkqhkiG9w0BAQsFADCBqzELMAkGA1UEBhMCRkkxETAPBgNVBAcMCEhlbHNpbmtpMRwwGgYDVQQKDBNOb3JkaWMgV2ViIEhvdGVsIE95MRYwFAYDVQQLDA1XZWJob3RlbGxpLmZpMR4wHAYDVQQDDBV0YXZhcmFudGFya2FzdGFqYS5jb20xITAfBgkqhkiG9w0BCQEWEnR1a2lAd2ViaG90ZWxsaS5maTEQMA4GA1UECAwHVXVzaW1hYTAeFw0xODAyMTMxMzM2MjZaFw0xOTAyMTMxMzM2MjZaMIGrMQswCQYDVQQGEwJGSTERMA8GA1UEBwwISGVsc2lua2kxHDAaBgNVBAoME05vcmRpYyBXZWIgSG90ZWwgT3kxFjAUBgNVBAsMDVdlYmhvdGVsbGkuZmkxHjAcBgNVBAMMFXRhdmFyYW50YXJrYXN0YWphLmNvbTEhMB8GCSqGSIb3DQEJARYSdHVraUB3ZWJob3RlbGxpLmZpMRAwDgYDVQQIDAdVdXNpbWFhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzZyGfg+Sil+OsCJh/xxw0tSVTtFHKv1yok/g7Ev/fdqhnsBlERjhuotevy+9g3QZcPwaw7bquxAQ4JRY+hL4D+/o7vNOFynIOo1NmP5yY/x+OFyugwRBPgvY8eSxj8yY0y3hPzgQPtIWdHo5c7+t9bjuyGTpK2UIr64UTHAxjSkibo8CCTI2UMn/EP3eHgLlkBpeiFUGo9BwMBHpJyR9hVa2POOu7gSC6nPg7KDzV1nfWmb/rHkRX+wdDRCG87cMkkcV1IqlLKY1v2vS+tiNNrf/GyBgPfzyMQ86/27msbHks9YQSHbTtfarRXAvP8+w++dLFfIJj7SeeLOCr8kPVwIDAQABo00wSzAdBgNVHQ4EFgQUqo11U4+qj+S8MqXZG/SfJbU6C7AwHwYDVR0jBBgwFoAUqo11U4+qj+S8MqXZG/SfJbU6C7AwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAlaDNmY7+h2FQ2a1R/4lkN3C1p1JJ5w1sydqQJ95Xp6Jzu8yQ+p3FQeHQlIGy6Cv1fPURTq0aTjKK4v2M2sXheLP43Yg5ak9wIuHojpiiYDmKbDWlMjTD34WHEWO9F4w9apeQtTlEDlEpvUWtoqUQphJNZkTdu1HG0T4OyrCvsSONMCvYvxJy7TgEHTDmTT4NzjNLk25AcfzeBc6siOfcMwKQLmMgvKHOHIePPzvekFkstC3UM+z7kqih+1YEJpdeMU176Bm2Zw92DlyISXXmFfjmj6EY76e6Lz1jvg7x4D53NJhzjnQ+YGvS7t0wNa1YiRUjo2AYn6qpZAXA3r0PcA==", + "issuerCN": Array [ + "tavarantarkastaja.com", + ], + "issuerOrg": Array [ + "Nordic Web Hotel Oy", + ], + "validFrom": "2018-02-13 13:36:26 UTC", + "validTo": "2019-02-13 13:36:26 UTC", + }, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, +] +`; + +exports[`censys certificates http failure triggers retry 1`] = ` +Array [ + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.60", + "ipOnly": false, + "name": "first_file_testdomain1", + "organization": null, + "reverseName": "first_file_testdomain1", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "52.74.149.117", + "ipOnly": false, + "name": "first_file_testdomain10", + "organization": null, + "reverseName": "first_file_testdomain10", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": "first_file_testdomain11", + "organization": null, + "reverseName": "first_file_testdomain11", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "1.1.1.1", + "ipOnly": false, + "name": "first_file_testdomain12", + "organization": null, + "reverseName": "first_file_testdomain12", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.61", + "ipOnly": false, + "name": "first_file_testdomain3.gov", + "organization": null, + "reverseName": "gov.first_file_testdomain3", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "45.79.207.117", + "ipOnly": false, + "name": "first_file_testdomain5", + "organization": null, + "reverseName": "first_file_testdomain5", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "156.249.159.119", + "ipOnly": false, + "name": "first_file_testdomain6", + "organization": null, + "reverseName": "first_file_testdomain6", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "221.10.15.220", + "ipOnly": false, + "name": "first_file_testdomain7", + "organization": null, + "reverseName": "first_file_testdomain7", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "81.141.166.145", + "ipOnly": false, + "name": "first_file_testdomain8", + "organization": null, + "reverseName": "first_file_testdomain8", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "24.65.82.187", + "ipOnly": false, + "name": "first_file_testdomain9", + "organization": null, + "reverseName": "first_file_testdomain9", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": "subdomain.first_file_testdomain2.gov", + "organization": null, + "reverseName": "gov.first_file_testdomain2.subdomain", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "85.24.146.152", + "ipOnly": false, + "name": "subdomain.first_file_testdomain4.gov", + "organization": null, + "reverseName": "gov.first_file_testdomain4.subdomain", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, +] +`; + +exports[`censys certificates repeated http failures throw an error 1`] = ` +Array [ + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.60", + "ipOnly": false, + "name": "first_file_testdomain1", + "organization": null, + "reverseName": "first_file_testdomain1", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "52.74.149.117", + "ipOnly": false, + "name": "first_file_testdomain10", + "organization": null, + "reverseName": "first_file_testdomain10", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": "first_file_testdomain11", + "organization": null, + "reverseName": "first_file_testdomain11", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "1.1.1.1", + "ipOnly": false, + "name": "first_file_testdomain12", + "organization": null, + "reverseName": "first_file_testdomain12", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.61", + "ipOnly": false, + "name": "first_file_testdomain3.gov", + "organization": null, + "reverseName": "gov.first_file_testdomain3", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "45.79.207.117", + "ipOnly": false, + "name": "first_file_testdomain5", + "organization": null, + "reverseName": "first_file_testdomain5", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "156.249.159.119", + "ipOnly": false, + "name": "first_file_testdomain6", + "organization": null, + "reverseName": "first_file_testdomain6", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "221.10.15.220", + "ipOnly": false, + "name": "first_file_testdomain7", + "organization": null, + "reverseName": "first_file_testdomain7", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "81.141.166.145", + "ipOnly": false, + "name": "first_file_testdomain8", + "organization": null, + "reverseName": "first_file_testdomain8", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "24.65.82.187", + "ipOnly": false, + "name": "first_file_testdomain9", + "organization": null, + "reverseName": "first_file_testdomain9", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": "subdomain.first_file_testdomain2.gov", + "organization": null, + "reverseName": "gov.first_file_testdomain2.subdomain", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "85.24.146.152", + "ipOnly": false, + "name": "subdomain.first_file_testdomain4.gov", + "organization": null, + "reverseName": "gov.first_file_testdomain4.subdomain", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, +] +`; diff --git a/backend/src/tasks/test/__snapshots__/censysIpv4.test.ts.snap b/backend/src/tasks/test/__snapshots__/censysIpv4.test.ts.snap new file mode 100644 index 00000000..418b24d8 --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/censysIpv4.test.ts.snap @@ -0,0 +1,5630 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`censys ipv4 basic test 1`] = ` +Array [ + Object { + "asn": "7684", + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": "JP", + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.60", + "ipOnly": false, + "name": "first_file_testdomain1", + "organization": null, + "reverseName": "first_file_testdomain1", + "screenshot": null, + "services": Array [ + Object { + "banner": " + +403 Forbidden + +

            Forbidden

            +

            You don't have permission to access / +on this server.

            + +", + "censysIpv4Results": Object { + "http": Object { + "get": Object { + "body": " + +403 Forbidden + +

            Forbidden

            +

            You don't have permission to access / +on this server.

            + +", + "body_sha256": "e6134491cb1cd3e211b94d20b48482caeec46813007e918bc824a06f102ff021", + "headers": Object { + "content_type": "text/html; charset=iso-8859-1", + "server": "Apache", + "unknown": Array [ + Object { + "key": "date", + "value": "Tue, 30 Jun 2020 15:46:46 GMT", + }, + ], + "vary": "Accept-Encoding", + }, + "metadata": Object { + "description": "Apache httpd", + "manufacturer": "Apache", + "product": "httpd", + }, + "status_code": "403", + "status_line": "403 Forbidden", + "timestamp": "2020-06-30T15:46:45Z", + "title": "403 Forbidden", + }, + }, + }, + "censysMetadata": Object { + "description": "Apache httpd", + "manufacturer": "Apache", + "product": "httpd", + }, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 80, + "products": Array [ + Object { + "cpe": "cpe:/a:apache:httpd", + "description": "Apache httpd", + "name": "httpd", + "product": "httpd", + "tags": Array [], + }, + ], + "service": "http", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": " + +403 Forbidden + +

            Forbidden

            +

            You don't have permission to access / +on this server.

            + +", + "censysIpv4Results": Object { + "https": Object { + "dhe": Object { + "dh_params": Object { + "generator": Object { + "length": "8", + "value": "Ag==", + }, + "prime": Object { + "length": "2048", + "value": "///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqsqmj//////////w==", + }, + }, + "support": true, + "timestamp": "2020-07-12T12:50:39Z", + }, + "dhe_export": Object { + "support": false, + "timestamp": "2020-07-09T05:39:47Z", + }, + "get": Object { + "body": " + +403 Forbidden + +

            Forbidden

            +

            You don't have permission to access / +on this server.

            + +", + "body_sha256": "e6134491cb1cd3e211b94d20b48482caeec46813007e918bc824a06f102ff021", + "headers": Object { + "content_type": "text/html; charset=iso-8859-1", + "server": "Apache", + "strict_transport_security": "max-age=15768000", + "unknown": Array [ + Object { + "key": "date", + "value": "Mon, 13 Jul 2020 12:50:53 GMT", + }, + ], + "vary": "Accept-Encoding", + }, + "metadata": Object { + "description": "Apache httpd", + "manufacturer": "Apache", + "product": "httpd", + }, + "status_code": "403", + "status_line": "403 Forbidden", + "timestamp": "2020-07-13T12:50:53Z", + "title": "403 Forbidden", + }, + "heartbleed": Object { + "heartbeat_enabled": true, + "heartbleed_vulnerable": false, + "timestamp": "2020-07-14T11:48:41Z", + }, + "rsa_export": Object { + "support": false, + "timestamp": "2020-07-09T10:08:24Z", + }, + "tls": Object { + "certificate": Object { + "parsed": Object { + "extensions": Object { + "basic_constraints": Object { + "is_ca": false, + }, + "key_usage": Object { + "content_commitment": true, + "digital_signature": true, + "key_encipherment": true, + "value": "7", + }, + }, + "fingerprint_md5": "9b29ecc02f7ae02b752aed672b40a840", + "fingerprint_sha1": "f66395f114727c71daec03acf99d3de5e6b10766", + "fingerprint_sha256": "720bf95038fd667b7e958b6773d90b9dfb18b194725d364859ead4755e10e5ca", + "issuer": Object { + "common_name": Array [ + "otakukonkatsu.com", + ], + "country": Array [ + "--", + ], + "email_address": Array [ + "root@otakukonkatsu.com", + ], + "locality": Array [ + "SomeCity", + ], + "organization": Array [ + "SomeOrganization", + ], + "organizational_unit": Array [ + "SomeOrganizationalUnit", + ], + "province": Array [ + "SomeState", + ], + }, + "issuer_dn": "C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com", + "names": Array [ + "otakukonkatsu.com", + ], + "redacted": false, + "serial_number": "10308", + "signature": Object { + "self_signed": true, + "signature_algorithm": Object { + "name": "SHA256WithRSA", + "oid": "1.2.840.113549.1.1.11", + }, + "valid": false, + "value": "Ybk9fBqSCCWOpnpa9KGvONfCzHaaM5NpebUHk1tuC2TF0jrMi6ba5S2uEsQfGybxEk0Iv2j8kQYwnUnST4+uWFUj2+nuj0dfjGwlBEtA3PL97WSyjbblaLChdJ7quGkzOohzO7lTdVKCv2iR7mEp9ac2ldPdPxTkOmzx8diFnHGotL2vcNP0sfEqkJzvFdpwJnQMoPx7erDyeVb/SE4lieIUpAdn7LUVsAAnJf0C7lIgs5bpOiGF9nbwIOxv5a5pJNtTalNOC0+kamK3KPTobxWhbmkl39HNqD6m3AhksBzSifvC0seVHpbWn6AEA8w4ITzY0eyxNTSt+TvO1/Mk5A==", + }, + "signature_algorithm": Object { + "name": "SHA256WithRSA", + "oid": "1.2.840.113549.1.1.11", + }, + "spki_subject_fingerprint": "d2f3b9238775b2ff36a5194d808c7b59892dcad94e4bddc8a83224a6a08aa83f", + "subject": Object { + "common_name": Array [ + "otakukonkatsu.com", + ], + "country": Array [ + "--", + ], + "email_address": Array [ + "root@otakukonkatsu.com", + ], + "locality": Array [ + "SomeCity", + ], + "organization": Array [ + "SomeOrganization", + ], + "organizational_unit": Array [ + "SomeOrganizationalUnit", + ], + "province": Array [ + "SomeState", + ], + }, + "subject_dn": "C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com", + "subject_key_info": Object { + "fingerprint_sha256": "f73b8fb390a439ec73a10655f9ae3fd5fcef470f3b141b9c5f1cc4e3bde10b40", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "2048", + "modulus": "wVLn3KpwCaMbah5ScJpVaq9WvOAxzo1U/jv1Yg5iRrpACCszP7IPBe7pzSB/duhXwqUAMLRwebX5VR9oY96PZfOvjnidGvB8hSqLwmEdvTiA1q4H8kX8eYDhtz8fzle1qTtXb6nQnuRvhYKg0O3Cci2EPuSTOObJce4KYq+kKsuqqXto6wGgUe1zG4aHBN5C+J193laZcp+OV9ds94sl9dWqtXhB6x3TJDeXIEiGSo3lEwI8GewbxZW53ryRUqLjMg30rkCXfxvCAiGhDzYQTvwgm/cz8Lg0PSSPfK2NPaCuE/v0hF/hexDu9xKisEyacHLeY98VjKJXSXxfcMUPHQ==", + }, + }, + "tbs_fingerprint": "e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6", + "tbs_noct_fingerprint": "e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6", + "validation_level": "unknown", + "validity": Object { + "end": "2019-08-21T06:54:56Z", + "length": "31536000", + "start": "2018-08-21T06:54:56Z", + }, + "version": "3", + }, + }, + "cipher_suite": Object { + "id": "0xC02F", + "name": "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", + }, + "ocsp_stapling": false, + "server_key_exchange": Object { + "ecdh_params": Object { + "curve_id": Object { + "id": "23", + "name": "secp256r1", + }, + }, + }, + "session_ticket": Object { + "length": "192", + "lifetime_hint": "300", + }, + "signature": Object { + "hash_algorithm": "sha512", + "signature_algorithm": "rsa", + "valid": true, + }, + "timestamp": "2020-07-09T23:00:58Z", + "validation": Object { + "browser_error": "x509: unknown error", + "browser_trusted": false, + }, + "version": "TLSv1.2", + }, + }, + }, + "censysMetadata": Object { + "description": "Apache httpd", + "manufacturer": "Apache", + "product": "httpd", + }, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 443, + "products": Array [ + Object { + "cpe": "cpe:/a:apache:httpd", + "description": "Apache httpd", + "name": "httpd", + "product": "httpd", + "tags": Array [], + }, + ], + "service": "https", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": "220 mail.otakukonkatsu.com ESMTP unknown", + "censysIpv4Results": Object { + "smtp": Object { + "tls": Object { + "banner": "220 mail.otakukonkatsu.com ESMTP unknown", + "ehlo": "250-mail.otakukonkatsu.com +250-PIPELINING +250-SIZE 10240000 +250-ETRN +250-AUTH PLAIN LOGIN +250-ENHANCEDSTATUSCODES +250-8BITMIME +250 DSN", + "timestamp": "2020-07-14T01:08:23Z", + "tls": Object { + "certificate": Object { + "parsed": Object { + "extensions": Object { + "basic_constraints": Object { + "is_ca": false, + }, + "key_usage": Object { + "content_commitment": true, + "digital_signature": true, + "key_encipherment": true, + "value": "7", + }, + }, + "fingerprint_md5": "9b29ecc02f7ae02b752aed672b40a840", + "fingerprint_sha1": "f66395f114727c71daec03acf99d3de5e6b10766", + "fingerprint_sha256": "720bf95038fd667b7e958b6773d90b9dfb18b194725d364859ead4755e10e5ca", + "issuer": Object { + "common_name": Array [ + "otakukonkatsu.com", + ], + "country": Array [ + "--", + ], + "email_address": Array [ + "root@otakukonkatsu.com", + ], + "locality": Array [ + "SomeCity", + ], + "organization": Array [ + "SomeOrganization", + ], + "organizational_unit": Array [ + "SomeOrganizationalUnit", + ], + "province": Array [ + "SomeState", + ], + }, + "issuer_dn": "C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com", + "names": Array [ + "otakukonkatsu.com", + ], + "redacted": false, + "serial_number": "10308", + "signature": Object { + "self_signed": true, + "signature_algorithm": Object { + "name": "SHA256WithRSA", + "oid": "1.2.840.113549.1.1.11", + }, + "valid": false, + "value": "Ybk9fBqSCCWOpnpa9KGvONfCzHaaM5NpebUHk1tuC2TF0jrMi6ba5S2uEsQfGybxEk0Iv2j8kQYwnUnST4+uWFUj2+nuj0dfjGwlBEtA3PL97WSyjbblaLChdJ7quGkzOohzO7lTdVKCv2iR7mEp9ac2ldPdPxTkOmzx8diFnHGotL2vcNP0sfEqkJzvFdpwJnQMoPx7erDyeVb/SE4lieIUpAdn7LUVsAAnJf0C7lIgs5bpOiGF9nbwIOxv5a5pJNtTalNOC0+kamK3KPTobxWhbmkl39HNqD6m3AhksBzSifvC0seVHpbWn6AEA8w4ITzY0eyxNTSt+TvO1/Mk5A==", + }, + "signature_algorithm": Object { + "name": "SHA256WithRSA", + "oid": "1.2.840.113549.1.1.11", + }, + "spki_subject_fingerprint": "d2f3b9238775b2ff36a5194d808c7b59892dcad94e4bddc8a83224a6a08aa83f", + "subject": Object { + "common_name": Array [ + "otakukonkatsu.com", + ], + "country": Array [ + "--", + ], + "email_address": Array [ + "root@otakukonkatsu.com", + ], + "locality": Array [ + "SomeCity", + ], + "organization": Array [ + "SomeOrganization", + ], + "organizational_unit": Array [ + "SomeOrganizationalUnit", + ], + "province": Array [ + "SomeState", + ], + }, + "subject_dn": "C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com", + "subject_key_info": Object { + "fingerprint_sha256": "f73b8fb390a439ec73a10655f9ae3fd5fcef470f3b141b9c5f1cc4e3bde10b40", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "2048", + "modulus": "wVLn3KpwCaMbah5ScJpVaq9WvOAxzo1U/jv1Yg5iRrpACCszP7IPBe7pzSB/duhXwqUAMLRwebX5VR9oY96PZfOvjnidGvB8hSqLwmEdvTiA1q4H8kX8eYDhtz8fzle1qTtXb6nQnuRvhYKg0O3Cci2EPuSTOObJce4KYq+kKsuqqXto6wGgUe1zG4aHBN5C+J193laZcp+OV9ds94sl9dWqtXhB6x3TJDeXIEiGSo3lEwI8GewbxZW53ryRUqLjMg30rkCXfxvCAiGhDzYQTvwgm/cz8Lg0PSSPfK2NPaCuE/v0hF/hexDu9xKisEyacHLeY98VjKJXSXxfcMUPHQ==", + }, + }, + "tbs_fingerprint": "e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6", + "tbs_noct_fingerprint": "e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6", + "validation_level": "unknown", + "validity": Object { + "end": "2019-08-21T06:54:56Z", + "length": "31536000", + "start": "2018-08-21T06:54:56Z", + }, + "version": "3", + }, + }, + "cipher_suite": Object { + "id": "0x0005", + "name": "TLS_RSA_WITH_RC4_128_SHA", + }, + "ocsp_stapling": false, + "validation": Object { + "browser_error": "x509: unknown error", + "browser_trusted": false, + }, + "version": "TLSv1.2", + }, + }, + }, + }, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 465, + "products": Array [], + "service": "smtp", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": "* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.", + "censysIpv4Results": Object { + "imaps": Object { + "tls": Object { + "banner": "* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.", + "timestamp": "2020-07-15T04:50:02Z", + "tls": Object { + "certificate": Object { + "parsed": Object { + "fingerprint_md5": "75a9c8c50cd65b0d20ff590ec16720bc", + "fingerprint_sha1": "316f85e231f9e623dc746ec837f69ba21605efb9", + "fingerprint_sha256": "2fc1e7271275a9000cd30a120082532b8d5d829df0f43e424ea984283a8561ca", + "issuer": Object { + "common_name": Array [ + "imap.example.com", + ], + "email_address": Array [ + "postmaster@example.com", + ], + "organizational_unit": Array [ + "IMAP server", + ], + }, + "issuer_dn": "OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com", + "names": Array [ + "imap.example.com", + ], + "redacted": false, + "serial_number": "17014858658541463133", + "signature": Object { + "self_signed": true, + "signature_algorithm": Object { + "name": "SHA1WithRSA", + "oid": "1.2.840.113549.1.1.5", + }, + "valid": false, + "value": "X1y1HOlbWb/UCb1ZiUveVit1/onKvvGC88Lu7uUeHAG0Kyg0a+vCGNeUc5p2LhjHDvps+hqXsUgj6Pc5xAxG1Z+t/SjGgMQfW0TXRZyHz1dcBsZgUcdS8n1MCfYnqTkOK4xM9VJ9s0fCexcEPNJZm8CCc7c/7pidUYb9mhjBn0I=", + }, + "signature_algorithm": Object { + "name": "SHA1WithRSA", + "oid": "1.2.840.113549.1.1.5", + }, + "spki_subject_fingerprint": "f0bbae564b9009140c3a7dee962721b20183b0ce08302b96925f5ca40aa6ec0a", + "subject": Object { + "common_name": Array [ + "imap.example.com", + ], + "email_address": Array [ + "postmaster@example.com", + ], + "organizational_unit": Array [ + "IMAP server", + ], + }, + "subject_dn": "OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com", + "subject_key_info": Object { + "fingerprint_sha256": "500cba1cd900964c5cf45caee7fd5b1d0d9f4bd4e2d6922b165000e871ee4f71", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "1024", + "modulus": "33h1UpbthpCviIeKbhn6og9sA1sRGVHTyq50Eqfj/4sJlybCgjg3XX3EsplRmqhoY6iFizMenXSgpb2rdcg0a4O0XLOUDOroUlwg1YuEhvWmykwKsmFpuY+1UpCnqspEHBxpbX10dk9BbUNO76eyk5jxAbVEOARonh5XHV/xiVU=", + }, + }, + "tbs_fingerprint": "61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d", + "tbs_noct_fingerprint": "61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d", + "unknown_extensions": Array [ + Object { + "critical": false, + "id": "2.16.840.1.113730.1.1", + "value": "AwIGQA==", + }, + ], + "validation_level": "unknown", + "validity": Object { + "end": "2019-08-21T06:54:04Z", + "length": "31536000", + "start": "2018-08-21T06:54:04Z", + }, + "version": "3", + }, + }, + "cipher_suite": Object { + "id": "0x0005", + "name": "TLS_RSA_WITH_RC4_128_SHA", + }, + "ocsp_stapling": false, + "validation": Object { + "browser_error": "x509: unknown error", + "browser_trusted": false, + }, + "version": "TLSv1.2", + }, + }, + }, + }, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 993, + "products": Array [], + "service": "imaps", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": "220 mail.otakukonkatsu.com ESMTP unknown", + "censysIpv4Results": Object { + "smtp": Object { + "starttls": Object { + "banner": "220 mail.otakukonkatsu.com ESMTP unknown", + "ehlo": "250-mail.otakukonkatsu.com +250-PIPELINING +250-SIZE 10240000 +250-ETRN +250-STARTTLS +250-AUTH PLAIN LOGIN +250-ENHANCEDSTATUSCODES +250-8BITMIME +250 DSN", + "starttls": "220 2.0.0 Ready to start TLS", + "timestamp": "2020-07-11T14:58:09Z", + "tls": Object { + "certificate": Object { + "parsed": Object { + "extensions": Object { + "basic_constraints": Object { + "is_ca": false, + }, + "key_usage": Object { + "content_commitment": true, + "digital_signature": true, + "key_encipherment": true, + "value": "7", + }, + }, + "fingerprint_md5": "9b29ecc02f7ae02b752aed672b40a840", + "fingerprint_sha1": "f66395f114727c71daec03acf99d3de5e6b10766", + "fingerprint_sha256": "720bf95038fd667b7e958b6773d90b9dfb18b194725d364859ead4755e10e5ca", + "issuer": Object { + "common_name": Array [ + "otakukonkatsu.com", + ], + "country": Array [ + "--", + ], + "email_address": Array [ + "root@otakukonkatsu.com", + ], + "locality": Array [ + "SomeCity", + ], + "organization": Array [ + "SomeOrganization", + ], + "organizational_unit": Array [ + "SomeOrganizationalUnit", + ], + "province": Array [ + "SomeState", + ], + }, + "issuer_dn": "C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com", + "names": Array [ + "otakukonkatsu.com", + ], + "redacted": false, + "serial_number": "10308", + "signature": Object { + "self_signed": true, + "signature_algorithm": Object { + "name": "SHA256WithRSA", + "oid": "1.2.840.113549.1.1.11", + }, + "valid": false, + "value": "Ybk9fBqSCCWOpnpa9KGvONfCzHaaM5NpebUHk1tuC2TF0jrMi6ba5S2uEsQfGybxEk0Iv2j8kQYwnUnST4+uWFUj2+nuj0dfjGwlBEtA3PL97WSyjbblaLChdJ7quGkzOohzO7lTdVKCv2iR7mEp9ac2ldPdPxTkOmzx8diFnHGotL2vcNP0sfEqkJzvFdpwJnQMoPx7erDyeVb/SE4lieIUpAdn7LUVsAAnJf0C7lIgs5bpOiGF9nbwIOxv5a5pJNtTalNOC0+kamK3KPTobxWhbmkl39HNqD6m3AhksBzSifvC0seVHpbWn6AEA8w4ITzY0eyxNTSt+TvO1/Mk5A==", + }, + "signature_algorithm": Object { + "name": "SHA256WithRSA", + "oid": "1.2.840.113549.1.1.11", + }, + "spki_subject_fingerprint": "d2f3b9238775b2ff36a5194d808c7b59892dcad94e4bddc8a83224a6a08aa83f", + "subject": Object { + "common_name": Array [ + "otakukonkatsu.com", + ], + "country": Array [ + "--", + ], + "email_address": Array [ + "root@otakukonkatsu.com", + ], + "locality": Array [ + "SomeCity", + ], + "organization": Array [ + "SomeOrganization", + ], + "organizational_unit": Array [ + "SomeOrganizationalUnit", + ], + "province": Array [ + "SomeState", + ], + }, + "subject_dn": "C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com", + "subject_key_info": Object { + "fingerprint_sha256": "f73b8fb390a439ec73a10655f9ae3fd5fcef470f3b141b9c5f1cc4e3bde10b40", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "2048", + "modulus": "wVLn3KpwCaMbah5ScJpVaq9WvOAxzo1U/jv1Yg5iRrpACCszP7IPBe7pzSB/duhXwqUAMLRwebX5VR9oY96PZfOvjnidGvB8hSqLwmEdvTiA1q4H8kX8eYDhtz8fzle1qTtXb6nQnuRvhYKg0O3Cci2EPuSTOObJce4KYq+kKsuqqXto6wGgUe1zG4aHBN5C+J193laZcp+OV9ds94sl9dWqtXhB6x3TJDeXIEiGSo3lEwI8GewbxZW53ryRUqLjMg30rkCXfxvCAiGhDzYQTvwgm/cz8Lg0PSSPfK2NPaCuE/v0hF/hexDu9xKisEyacHLeY98VjKJXSXxfcMUPHQ==", + }, + }, + "tbs_fingerprint": "e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6", + "tbs_noct_fingerprint": "e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6", + "validation_level": "unknown", + "validity": Object { + "end": "2019-08-21T06:54:56Z", + "length": "31536000", + "start": "2018-08-21T06:54:56Z", + }, + "version": "3", + }, + }, + "cipher_suite": Object { + "id": "0x0005", + "name": "TLS_RSA_WITH_RC4_128_SHA", + }, + "ocsp_stapling": false, + "validation": Object { + "browser_error": "x509: unknown error", + "browser_trusted": false, + }, + "version": "TLSv1.2", + }, + }, + }, + }, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 25, + "products": Array [], + "service": "smtp", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": "+OK Dovecot ready.", + "censysIpv4Results": Object { + "pop3": Object { + "starttls": Object { + "banner": "+OK Dovecot ready.", + "metadata": Object { + "description": "Dovecot", + "product": "Dovecot", + }, + "starttls": "+OK Begin TLS negotiation now.", + "timestamp": "2020-07-12T00:31:30Z", + "tls": Object { + "certificate": Object { + "parsed": Object { + "fingerprint_md5": "75a9c8c50cd65b0d20ff590ec16720bc", + "fingerprint_sha1": "316f85e231f9e623dc746ec837f69ba21605efb9", + "fingerprint_sha256": "2fc1e7271275a9000cd30a120082532b8d5d829df0f43e424ea984283a8561ca", + "issuer": Object { + "common_name": Array [ + "imap.example.com", + ], + "email_address": Array [ + "postmaster@example.com", + ], + "organizational_unit": Array [ + "IMAP server", + ], + }, + "issuer_dn": "OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com", + "names": Array [ + "imap.example.com", + ], + "redacted": false, + "serial_number": "17014858658541463133", + "signature": Object { + "self_signed": true, + "signature_algorithm": Object { + "name": "SHA1WithRSA", + "oid": "1.2.840.113549.1.1.5", + }, + "valid": false, + "value": "X1y1HOlbWb/UCb1ZiUveVit1/onKvvGC88Lu7uUeHAG0Kyg0a+vCGNeUc5p2LhjHDvps+hqXsUgj6Pc5xAxG1Z+t/SjGgMQfW0TXRZyHz1dcBsZgUcdS8n1MCfYnqTkOK4xM9VJ9s0fCexcEPNJZm8CCc7c/7pidUYb9mhjBn0I=", + }, + "signature_algorithm": Object { + "name": "SHA1WithRSA", + "oid": "1.2.840.113549.1.1.5", + }, + "spki_subject_fingerprint": "f0bbae564b9009140c3a7dee962721b20183b0ce08302b96925f5ca40aa6ec0a", + "subject": Object { + "common_name": Array [ + "imap.example.com", + ], + "email_address": Array [ + "postmaster@example.com", + ], + "organizational_unit": Array [ + "IMAP server", + ], + }, + "subject_dn": "OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com", + "subject_key_info": Object { + "fingerprint_sha256": "500cba1cd900964c5cf45caee7fd5b1d0d9f4bd4e2d6922b165000e871ee4f71", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "1024", + "modulus": "33h1UpbthpCviIeKbhn6og9sA1sRGVHTyq50Eqfj/4sJlybCgjg3XX3EsplRmqhoY6iFizMenXSgpb2rdcg0a4O0XLOUDOroUlwg1YuEhvWmykwKsmFpuY+1UpCnqspEHBxpbX10dk9BbUNO76eyk5jxAbVEOARonh5XHV/xiVU=", + }, + }, + "tbs_fingerprint": "61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d", + "tbs_noct_fingerprint": "61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d", + "unknown_extensions": Array [ + Object { + "critical": false, + "id": "2.16.840.1.113730.1.1", + "value": "AwIGQA==", + }, + ], + "validation_level": "unknown", + "validity": Object { + "end": "2019-08-21T06:54:04Z", + "length": "31536000", + "start": "2018-08-21T06:54:04Z", + }, + "version": "3", + }, + }, + "cipher_suite": Object { + "id": "0x0005", + "name": "TLS_RSA_WITH_RC4_128_SHA", + }, + "ocsp_stapling": false, + "validation": Object { + "browser_error": "x509: unknown error", + "browser_trusted": false, + }, + "version": "TLSv1.2", + }, + }, + }, + }, + "censysMetadata": Object { + "description": "Dovecot", + "product": "Dovecot", + }, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 110, + "products": Array [ + Object { + "description": "Dovecot", + "name": "Dovecot", + "product": "Dovecot", + "tags": Array [], + }, + ], + "service": "pop3", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": "* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.", + "censysIpv4Results": Object { + "imap": Object { + "starttls": Object { + "banner": "* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.", + "metadata": Object { + "description": "Dovecot", + "product": "Dovecot", + }, + "starttls": "a001 OK Begin TLS negotiation now.", + "timestamp": "2020-07-12T06:54:10Z", + "tls": Object { + "certificate": Object { + "parsed": Object { + "fingerprint_md5": "75a9c8c50cd65b0d20ff590ec16720bc", + "fingerprint_sha1": "316f85e231f9e623dc746ec837f69ba21605efb9", + "fingerprint_sha256": "2fc1e7271275a9000cd30a120082532b8d5d829df0f43e424ea984283a8561ca", + "issuer": Object { + "common_name": Array [ + "imap.example.com", + ], + "email_address": Array [ + "postmaster@example.com", + ], + "organizational_unit": Array [ + "IMAP server", + ], + }, + "issuer_dn": "OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com", + "names": Array [ + "imap.example.com", + ], + "redacted": false, + "serial_number": "17014858658541463133", + "signature": Object { + "self_signed": true, + "signature_algorithm": Object { + "name": "SHA1WithRSA", + "oid": "1.2.840.113549.1.1.5", + }, + "valid": false, + "value": "X1y1HOlbWb/UCb1ZiUveVit1/onKvvGC88Lu7uUeHAG0Kyg0a+vCGNeUc5p2LhjHDvps+hqXsUgj6Pc5xAxG1Z+t/SjGgMQfW0TXRZyHz1dcBsZgUcdS8n1MCfYnqTkOK4xM9VJ9s0fCexcEPNJZm8CCc7c/7pidUYb9mhjBn0I=", + }, + "signature_algorithm": Object { + "name": "SHA1WithRSA", + "oid": "1.2.840.113549.1.1.5", + }, + "spki_subject_fingerprint": "f0bbae564b9009140c3a7dee962721b20183b0ce08302b96925f5ca40aa6ec0a", + "subject": Object { + "common_name": Array [ + "imap.example.com", + ], + "email_address": Array [ + "postmaster@example.com", + ], + "organizational_unit": Array [ + "IMAP server", + ], + }, + "subject_dn": "OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com", + "subject_key_info": Object { + "fingerprint_sha256": "500cba1cd900964c5cf45caee7fd5b1d0d9f4bd4e2d6922b165000e871ee4f71", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "1024", + "modulus": "33h1UpbthpCviIeKbhn6og9sA1sRGVHTyq50Eqfj/4sJlybCgjg3XX3EsplRmqhoY6iFizMenXSgpb2rdcg0a4O0XLOUDOroUlwg1YuEhvWmykwKsmFpuY+1UpCnqspEHBxpbX10dk9BbUNO76eyk5jxAbVEOARonh5XHV/xiVU=", + }, + }, + "tbs_fingerprint": "61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d", + "tbs_noct_fingerprint": "61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d", + "unknown_extensions": Array [ + Object { + "critical": false, + "id": "2.16.840.1.113730.1.1", + "value": "AwIGQA==", + }, + ], + "validation_level": "unknown", + "validity": Object { + "end": "2019-08-21T06:54:04Z", + "length": "31536000", + "start": "2018-08-21T06:54:04Z", + }, + "version": "3", + }, + }, + "cipher_suite": Object { + "id": "0x0005", + "name": "TLS_RSA_WITH_RC4_128_SHA", + }, + "ocsp_stapling": false, + "validation": Object { + "browser_error": "x509: unknown error", + "browser_trusted": false, + }, + "version": "TLSv1.2", + }, + }, + }, + }, + "censysMetadata": Object { + "description": "Dovecot", + "product": "Dovecot", + }, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 143, + "products": Array [ + Object { + "description": "Dovecot", + "name": "Dovecot", + "product": "Dovecot", + "tags": Array [], + }, + ], + "service": "imap", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": "+OK Dovecot ready.", + "censysIpv4Results": Object { + "pop3s": Object { + "tls": Object { + "banner": "+OK Dovecot ready.", + "timestamp": "2020-07-10T15:49:08Z", + "tls": Object { + "certificate": Object { + "parsed": Object { + "fingerprint_md5": "75a9c8c50cd65b0d20ff590ec16720bc", + "fingerprint_sha1": "316f85e231f9e623dc746ec837f69ba21605efb9", + "fingerprint_sha256": "2fc1e7271275a9000cd30a120082532b8d5d829df0f43e424ea984283a8561ca", + "issuer": Object { + "common_name": Array [ + "imap.example.com", + ], + "email_address": Array [ + "postmaster@example.com", + ], + "organizational_unit": Array [ + "IMAP server", + ], + }, + "issuer_dn": "OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com", + "names": Array [ + "imap.example.com", + ], + "redacted": false, + "serial_number": "17014858658541463133", + "signature": Object { + "self_signed": true, + "signature_algorithm": Object { + "name": "SHA1WithRSA", + "oid": "1.2.840.113549.1.1.5", + }, + "valid": false, + "value": "X1y1HOlbWb/UCb1ZiUveVit1/onKvvGC88Lu7uUeHAG0Kyg0a+vCGNeUc5p2LhjHDvps+hqXsUgj6Pc5xAxG1Z+t/SjGgMQfW0TXRZyHz1dcBsZgUcdS8n1MCfYnqTkOK4xM9VJ9s0fCexcEPNJZm8CCc7c/7pidUYb9mhjBn0I=", + }, + "signature_algorithm": Object { + "name": "SHA1WithRSA", + "oid": "1.2.840.113549.1.1.5", + }, + "spki_subject_fingerprint": "f0bbae564b9009140c3a7dee962721b20183b0ce08302b96925f5ca40aa6ec0a", + "subject": Object { + "common_name": Array [ + "imap.example.com", + ], + "email_address": Array [ + "postmaster@example.com", + ], + "organizational_unit": Array [ + "IMAP server", + ], + }, + "subject_dn": "OU=IMAP server, CN=imap.example.com, emailAddress=postmaster@example.com", + "subject_key_info": Object { + "fingerprint_sha256": "500cba1cd900964c5cf45caee7fd5b1d0d9f4bd4e2d6922b165000e871ee4f71", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "1024", + "modulus": "33h1UpbthpCviIeKbhn6og9sA1sRGVHTyq50Eqfj/4sJlybCgjg3XX3EsplRmqhoY6iFizMenXSgpb2rdcg0a4O0XLOUDOroUlwg1YuEhvWmykwKsmFpuY+1UpCnqspEHBxpbX10dk9BbUNO76eyk5jxAbVEOARonh5XHV/xiVU=", + }, + }, + "tbs_fingerprint": "61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d", + "tbs_noct_fingerprint": "61368b020ba895fdf15278c004f63d6474466a37b7bba061441381b228ed6d7d", + "unknown_extensions": Array [ + Object { + "critical": false, + "id": "2.16.840.1.113730.1.1", + "value": "AwIGQA==", + }, + ], + "validation_level": "unknown", + "validity": Object { + "end": "2019-08-21T06:54:04Z", + "length": "31536000", + "start": "2018-08-21T06:54:04Z", + }, + "version": "3", + }, + }, + "cipher_suite": Object { + "id": "0x0005", + "name": "TLS_RSA_WITH_RC4_128_SHA", + }, + "ocsp_stapling": false, + "validation": Object { + "browser_error": "x509: unknown error", + "browser_trusted": false, + }, + "version": "TLSv1.2", + }, + }, + }, + }, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 995, + "products": Array [], + "service": "pop3s", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": "220 mail.otakukonkatsu.com ESMTP unknown", + "censysIpv4Results": Object { + "smtp": Object { + "starttls": Object { + "banner": "220 mail.otakukonkatsu.com ESMTP unknown", + "ehlo": "250-mail.otakukonkatsu.com +250-PIPELINING +250-SIZE 10240000 +250-ETRN +250-STARTTLS +250-AUTH PLAIN LOGIN +250-ENHANCEDSTATUSCODES +250-8BITMIME +250 DSN", + "starttls": "220 2.0.0 Ready to start TLS", + "timestamp": "2020-07-11T09:50:03Z", + "tls": Object { + "certificate": Object { + "parsed": Object { + "extensions": Object { + "basic_constraints": Object { + "is_ca": false, + }, + "key_usage": Object { + "content_commitment": true, + "digital_signature": true, + "key_encipherment": true, + "value": "7", + }, + }, + "fingerprint_md5": "9b29ecc02f7ae02b752aed672b40a840", + "fingerprint_sha1": "f66395f114727c71daec03acf99d3de5e6b10766", + "fingerprint_sha256": "720bf95038fd667b7e958b6773d90b9dfb18b194725d364859ead4755e10e5ca", + "issuer": Object { + "common_name": Array [ + "otakukonkatsu.com", + ], + "country": Array [ + "--", + ], + "email_address": Array [ + "root@otakukonkatsu.com", + ], + "locality": Array [ + "SomeCity", + ], + "organization": Array [ + "SomeOrganization", + ], + "organizational_unit": Array [ + "SomeOrganizationalUnit", + ], + "province": Array [ + "SomeState", + ], + }, + "issuer_dn": "C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com", + "names": Array [ + "otakukonkatsu.com", + ], + "redacted": false, + "serial_number": "10308", + "signature": Object { + "self_signed": true, + "signature_algorithm": Object { + "name": "SHA256WithRSA", + "oid": "1.2.840.113549.1.1.11", + }, + "valid": false, + "value": "Ybk9fBqSCCWOpnpa9KGvONfCzHaaM5NpebUHk1tuC2TF0jrMi6ba5S2uEsQfGybxEk0Iv2j8kQYwnUnST4+uWFUj2+nuj0dfjGwlBEtA3PL97WSyjbblaLChdJ7quGkzOohzO7lTdVKCv2iR7mEp9ac2ldPdPxTkOmzx8diFnHGotL2vcNP0sfEqkJzvFdpwJnQMoPx7erDyeVb/SE4lieIUpAdn7LUVsAAnJf0C7lIgs5bpOiGF9nbwIOxv5a5pJNtTalNOC0+kamK3KPTobxWhbmkl39HNqD6m3AhksBzSifvC0seVHpbWn6AEA8w4ITzY0eyxNTSt+TvO1/Mk5A==", + }, + "signature_algorithm": Object { + "name": "SHA256WithRSA", + "oid": "1.2.840.113549.1.1.11", + }, + "spki_subject_fingerprint": "d2f3b9238775b2ff36a5194d808c7b59892dcad94e4bddc8a83224a6a08aa83f", + "subject": Object { + "common_name": Array [ + "otakukonkatsu.com", + ], + "country": Array [ + "--", + ], + "email_address": Array [ + "root@otakukonkatsu.com", + ], + "locality": Array [ + "SomeCity", + ], + "organization": Array [ + "SomeOrganization", + ], + "organizational_unit": Array [ + "SomeOrganizationalUnit", + ], + "province": Array [ + "SomeState", + ], + }, + "subject_dn": "C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=otakukonkatsu.com, emailAddress=root@otakukonkatsu.com", + "subject_key_info": Object { + "fingerprint_sha256": "f73b8fb390a439ec73a10655f9ae3fd5fcef470f3b141b9c5f1cc4e3bde10b40", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "2048", + "modulus": "wVLn3KpwCaMbah5ScJpVaq9WvOAxzo1U/jv1Yg5iRrpACCszP7IPBe7pzSB/duhXwqUAMLRwebX5VR9oY96PZfOvjnidGvB8hSqLwmEdvTiA1q4H8kX8eYDhtz8fzle1qTtXb6nQnuRvhYKg0O3Cci2EPuSTOObJce4KYq+kKsuqqXto6wGgUe1zG4aHBN5C+J193laZcp+OV9ds94sl9dWqtXhB6x3TJDeXIEiGSo3lEwI8GewbxZW53ryRUqLjMg30rkCXfxvCAiGhDzYQTvwgm/cz8Lg0PSSPfK2NPaCuE/v0hF/hexDu9xKisEyacHLeY98VjKJXSXxfcMUPHQ==", + }, + }, + "tbs_fingerprint": "e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6", + "tbs_noct_fingerprint": "e26550ab8d9e84345a8d61c840d97270ec973406256ea66cad195e43955d08e6", + "validation_level": "unknown", + "validity": Object { + "end": "2019-08-21T06:54:56Z", + "length": "31536000", + "start": "2018-08-21T06:54:56Z", + }, + "version": "3", + }, + }, + "cipher_suite": Object { + "id": "0x0005", + "name": "TLS_RSA_WITH_RC4_128_SHA", + }, + "ocsp_stapling": false, + "validation": Object { + "browser_error": "x509: unknown error", + "browser_trusted": false, + }, + "version": "TLSv1.2", + }, + }, + }, + }, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 587, + "products": Array [], + "service": "smtp", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": "16509", + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": "SG", + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "52.74.149.117", + "ipOnly": false, + "name": "first_file_testdomain10", + "organization": null, + "reverseName": "first_file_testdomain10", + "screenshot": null, + "services": Array [ + Object { + "banner": " + + + + + + + + + + + + + + + + + + + + +
            +
            + +
            +
            +
            +
            +
            + + + + + + + + +", + "censysIpv4Results": Object { + "http": Object { + "get": Object { + "body": " + + + + + + + + + + + + + + + + + + + + +
            +
            + +
            +
            +
            +
            +
            + + + + + + + + +", + "body_sha256": "c546fde38e668872101dc4397c9d224bbb1655281b9624407de4e35f4240cdd0", + "headers": Object { + "accept_ranges": "bytes", + "content_type": "text/html", + "last_modified": "Thu, 19 Sep 2019 10:07:28 GMT", + "server": "Apache/2.4.18 (Ubuntu)", + "unknown": Array [ + Object { + "key": "date", + "value": "Tue, 14 Jul 2020 07:16:59 GMT", + }, + Object { + "key": "etag", + "value": "\\"7cb-592e51ef39800-gzip\\"", + }, + ], + "vary": "Accept-Encoding", + }, + "metadata": Object { + "description": "Apache httpd 2.4.18", + "manufacturer": "Apache", + "product": "httpd", + "version": "2.4.18", + }, + "status_code": "200", + "status_line": "200 OK", + "timestamp": "2020-07-14T07:16:45Z", + }, + }, + }, + "censysMetadata": Object { + "description": "Apache httpd 2.4.18", + "manufacturer": "Apache", + "product": "httpd", + "version": "2.4.18", + }, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 80, + "products": Array [ + Object { + "cpe": "cpe:/a:apache:httpd", + "description": "Apache httpd 2.4.18", + "name": "httpd", + "product": "httpd", + "tags": Array [], + "version": "2.4.18", + }, + ], + "service": "http", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": " + + + + + Qutrix | Redefining Quality + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            +
            + +
            + + +

            \\"cloudautom

            +
            + + + +
            +
            + + + +
            +
            +
            + +
              + +
              + +
              +
              \\"\\"
              +
              +
              +



              Get The Quality You Deserve...

              +

              For every data-center product development or testing challenges in R&D engineering, there are many solutions. Experience the best with Qutrix Solution for the quality matrix you deserve.

              + Go Qutrix +
              +
              +
              + +
              +
              \\"\\"
              +
              +
              +



              DevTestOps, STLC, Test Automation

              +

              QaaSBox & CloudAuTOM - Pace The Race with our next-generation framework and solution for all your product test operations and test automation requirements. Get-Set-Test!

              + Simplify It! +
              +
              +
              + +
              +
              \\"\\"
              +
              +
              +



              Software Solutions, Services

              +

              The uniqueness of our offerings comes from the DNA of blending product company's innovation with excellence of service company's commitment. Grow your business world non-stop.

              + At Your Service +
              +
              +
              + +
              +
              \\"\\"
              +
              +
              +



              Building, Nurturing Talent Pool

              +

              Evergrowing data-center industry needs fresh talent in India and nurturing of skills. Qutrix Academia invests time in identifying and building talent pool through efficient inhouse workshops.

              + Build Talent +
              +
              +
              + +
              +
              \\"\\"
              +
              +
              +



              Beyond Auditing, Certification

              +

              Qutrix Quality Quotient assessment program provides you blueprint of your engineering quotient beyond any auditing or certification programs offer. Have a WILL to know? This is the WAY.

              + Quotient'ify +
              +
              +
              + +
              + + + + Previous + + + + + Next + + +
              +
              +
              + + +
              + + +
              +
              +
              + +
              + +

              DEARER TO R&D OPEX

              +

              Beat your target with better value for investment when you engage us in your SDLC, STLC phases.

              +
              + +
              + +

              GTM AT EASE

              +

              Go-To-Market at ease. Eliminate 11th hour blocker product defects. Tame your fast ticking clock.

              +
              + +
              + +

              REDEFINE QUALITY

              +

              A quality partner to rely on. Start the journey to redefine your product quality to newer heights.

              +
              + +
              +
              +
              + + + +
              +
              + +
              +

              QaaSBox, Quality Testing Simplified

              +

              Unbox Quality-As-A-Solution software and a platform for your product that empowers your product management, development and test experts to adapt STLC at ease for achieving quality testing. QaaSBox enables the users gain competitive advantage and achieve faster go-to-market cycle.
              + Sign Up Today & Avail Benefits As Beta User!

              +
              + +
              + + \\"\\" + +
              + + +
              +
              +

              Product Test Management

              +

              Come and join to access the get-set-go* tests or create your own online collaboration team or setup enterprise QaaS edition. Explore our innovative and niche offerings for you. System Softwares or Enterprise Products or Mobile/Web Apps - QaaSBox is your new TestOps Compass.

              + Explore More +
              +
              + + +
              +
              + +
              +
              + +
              +

              CloudAuTOM, Test Automation Solution

              +

              We offer custom-build Test Automation SaaS and AaaS products with integrated STLC management modules, which enable our partners gain competitive advantage and achieve faster go-to-market cycle. As subject matter experts, we understand the domain and micro-aspects of complexity involved in building an effective product test automation eco-system for your R&D engineering operations.

              +
              + +
              + +
              + 3 +

              Superior Frameworks

              +
              + +
              + 18 +

              Powerful Features

              +
              + +
              + 45 +

              *Minutes To Deploy AaaS Cloud

              +
              + +
              + 1010 +

              Man Days Crafted (*Ticking)

              +
              + +
              + +
              + + \\"\\" + +
              + + +
              +
              +

              Product Test Automation

              +

              There are 8 unique ways to revolutionize the operations of your R&D Product Engineering Development and Testing. We customize test automation solutions and help our customers by creating private or hybrid cloud ecosystem for data-center product testing of Servers, Adapters, Controllers, Drives, Flash, Arrays, Modules and many more. Explore our innovative and niche offerings for you.

              + Explore More +
              +
              + + +
              +
              + + + +
              +
              +
              +

              Software Solutions, Services

              +

              Experience a highly reliable solution or outstanding service when you engage us for your R&D software engineering development and testing requirements of STORAGE, NETWORK products. Quality is just a consequence of our relentless effort. Our success is to make you succeed.

              +
              + +
              + +

              +
              + +
              +

              Engineering Development Services, Solutions


              +

              Respecting talent and balancing your RoI are essential. Find a new genre of business strategist in us. Access the true developers!

              +
              +
              + +
              + +
              +
              +

              ENG Dev

              +

              Whether offshore development or demand basis engagement model, our business SLAs might reveal unexplored possibilities.

              +

              +
              + +
              +
              +

              ENG Tools

              +

              Offload the hassles of developing tools or utilites for your day-to-day SW engineering activities in any programming languages.

              +
              + +
              +
              +

              ENG Web

              +

              Build your powerful intranet sites while you design core products. We know pulse of software engineering and art of app.

              +
              + + +
              + +
              +

              Product Test Automation Services, Solutions


              +

              In software engineering, test automation is an unique breed of thinking. Testers in Breaking! Developers in Logic! Hackers in Approach!

              +
              +
              + +
              + +
              +
              +

              AuTOM-Creator

              +

              Creating test automation framework for data-center products is synonymous to us. Get it created from the scratch.

              +

              +
              + +
              +
              +

              AuTOM-Developer

              +

              Optimizing/developing existing framework and library is totally a different skill. We also enhance your proprietary framework.

              +
              + +
              +
              +

              AuTOM-Maintainer

              +

              At times, test automation regression is underestimated. Maintenance is a quality and not a mere work. We never overlook.

              +

              +
              +
              + +
              +

              Testing/Quality Assurance Services, Solutions


              +

              Feel the subtle differences of business minds running technology projects vs subject matter experts running business in technology.

              +
              +
              + +
              + +
              +
              +

              ArchiTest

              +

              Engage subject matter expert Test Architects on full-time or flexible terms. Their influence on product is multi-fold.

              +
              + +
              +
              +

              Q-Bench

              +

              Benchmark Desk: Get deeper insights of your product performance, benchmarking metrics dissected and analyzed.

              +

              +
              + +
              +
              +

              IndepTest

              +

              Offers End-To-End independent and indepth testing services/solution for all your data-center product validation.

              +
              + +
              + +
              + +
            + + + + +
            +
            + +
            +

            Academia Workshops

            +

            Only less than 5% of engineers graduating in India are employable for software start-ups and IT product companies (Source: Industry, Media, Expert Reports). Qutrix academia designed career awareness workshop programs in data-center domain for college students, fresh graduates in an attempt to find the hidden-gems from the left-out 95% for the benefit of national and international talent needs.

            +

            Did You Know? It just takes less than 1/4th of a second for your social-networking Likes or Posts to reach your friend in USA from India? It's time you learn HOW! Come, explore, learn the magnitude and sophistication involved behind your Internet World - conceptually and practically. THE ONLY THING THAT CAN STOP YOU IS YOUR OWN APPETITE TO DEEP-DIVE!!!

            +

            Career Workshop Programs - Learn From Experts

            +
            + +
            + +
            +
            +
            + \\"\\" + + +
            + +
            +
            #1 Domain/Technology Awareness
            +

            Conceptual + Hands-On Exposure

            +
            +
            +
            + +
            +
            +
            + \\"\\" + + +
            + +
            +
            #2 Data-Center Test Expertise
            +

            Architectural Testing Exposure

            +
            +
            +
            + +
            +
            +
            + \\"\\" + + +
            + +
            +
            #3 Data-Center Test Automation
            +

            Product Test Automation Exposure

            +
            +
            +
            + +
            + +
            +
            + + + + +
            +
            + +
            +

            Assess Engineering Quotient

            +

            Enroll for Qutrix Quality Quotient (Q-Cube) assessment program and benefit immensely from the insightful data on your R&D Engineering Operations. Q-Cube assessment is offerred in TWO modes. a) Team Mode (Basic Method) b) Expert Mode (Advance Method)

            +
            + +
            + +

            Sample Report With 52.9 Points Scored Based On 10x10 (100-Scale) Point Assessment Model:

            + +
            +
            + Hiring Quotient 25% +
            +
            + +
            +
            + Talent Quotient 39% +
            +
            + +
            +
            + Domain Quotient 39% +
            +
            + +
            +
            + Product Quotient 24% +
            +
            + +
            +
            + Process Quotient 39% +
            +
            + +
            +
            + Development Quotient 42% +
            +
            + +
            +
            + Testing Quotient 75% +
            +
            + +
            +
            + Synergy Quotient 90% +
            +
            + +
            +
            + Innovation Quotient 90% +
            +
            + +
            +
            + Operations Quotient 66% +
            +
            + +
            + +
            +
            + + + + +
            +
            + +
            +

            About Qutrix

            +

            Qutrix is a private limited company established in Bangalore, Silicon Valley Of India. Our culture is built upon the values of product company's innovation and service company's commitment. We offer world-class experience to our customers partnering with us. Our success stories have all the compelling reasons to scale up the business operations with the blessings of satisfied customers.

            +
            + +
            + +
            +
            +
            + \\"\\" +
            +
            +

            Qutrix Mission

            +

            +

            To accomplish a purposeful existence in the industry,

            + By creating employment opportunity for deserving, + By treating suppliers as valuable as customers, + By partnering with visionary customers & investors +
            +

            +
            +
            + +
            +
            +
            + \\"\\" +
            +
            +

            Qutrix Vision

            +

            +

            To be your next generation business partner with perfection in every step we take with our creative minds at work
            +

            +
            +
            + +
            +
            +
            + \\"\\" +
            +
            +

            Qutrix Commitment

            +

            +

            Our commitment to grow your business is essentially built over 9 pillars of traits:

            + Creativity and Innovation
            + Trust and Transperancy
            + Commitment and Ethics
            + Quality and Excellence
            + Business Continuity
            +
            +

            +
            +
            + + +
            + +
            +
            + + + + + +
            +
            +
            +

            Our Team

            +

            Meet our passionate team working towards building every atom of the company. Start-up in energy and attitude! Corporate in focus and execution!

            +
            + +
            + +
            +
            + +
            +
            +

            + +
            + + + + +
            +
            +
            +
            +
            + +
            +
            + \\"\\" +
            +
            +

            Vijay Koteeswaran

            + Founder Director +
            + + + + +
            +
            +
            +
            +
            + +
            +
            Vijay Koteeswaran +
            Founder Director +
            +

            A Stanford IGNITE'd technology entrepreneur with deep expertise in storage and networking domains. Holds Masters Degree in Information Science and Application. Created strong foot-prints in key roles like Test Intrapreneur, Global Test Architect, Product Test and Project Manager. With 19 Years of data-center industry experience, played significant roles in many global companies like Broadcom, LSI, Cisco, Wipro and many associated clients.

            +
            + +
            +
            + +
            +
            +

            + +
            + + + + +
            +
            +
            +
            +
            + +
            + +
            + +
            + +

            Team Qutrix

            +

            Our vibrant team having fun after coding & business hours. We Are Qutrixians!

            +
            + +
            +

            *Ex-Qutrixians are also shown in the team pictures.

            +
            + +
            +
            + + + +
            +
            +
            +

            Career Path

            +

            Nothing fancy about working for start-up unless you think your growth and knowledge matter to you. Dare to build the wall together? Please Apply.

            +
            + +
            +
            + \\"career + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            Job ID Title Type Job RoleApply
            QJR1801IC R&D Engineer (Level 1-3) + Full-Time or Part-Time + + Web & Database Architecture/Programming Mailto: career@qutrixsolution.com
            QJR1802 + IC R&D Engineer (Level 1-3)Full-Time or Part-Time + Test Automation Designing/Programming Mailto: career@qutrixsolution.com
            QJR1803 + Business Development Executive Full-Time or Part-Time + Product & Service Business Development Mailto: career@qutrixsolution.com
            +
            +
            +
            +

            Note: Internship opportunities are available. Interested candidates can mail their profiles to career@qutrixsolution.com

            +
            + +
            + +
            +
            + + +
            +
            + +
            +

            Startup Social Responsibility (SSR)

            + \\"ssr +
            + +

            SSR Initiatives

            +

            We believe that engaging in social responsibility activities even in startup stage is good for setting up the culture of the company. This creates ample opportunity for employees to look aspects beyond business goals and lead a difference in human's life however small it may be. We dedicate half a day every month in programs listed below. Qutrix SSR plans to increase the list of activities over the time.

            +
            + +
            +
            Program
            +

            Fun Day @ Old-Age Homes

            +

            Celebration @ Children Homes

            +

            Career Insights & Guidance

            + +
            + +
            +
            Description
            +

            Celebrate life with old-age citizens to cheer them up with fun-filled activities

            +

            Birthday celebration for underprivileged kids and games to cheer them up

            +

            Career guidance program to empower women engineering & managment graduates

            + +
            + +
            + +
            +
            + + +
            +
            + +
            +

            Contact Us

            +

            Thank you for your interest in Qutrix. Engaging with us is just a ping away.

            +
            + +
            + +
            +
            + +

            Email

            +

            info@qutrixsolution.com

            +
            +
            + + + +
            +
            + +

            Phone Number

            +

            India: +91 984 530 7360

            +
            +
            + +
            + + + +
            +
            + + + + + + +
            +
            +
            +
            + +
            + +

            Qutrix Solution

            +

            Qutrix emanated from Quality Matrix as we envision to redefine your product quality to greater heights with our creative minds at work and innovative products lined up for you.

            +
            + +
            +

            Useful Links

            + +
            + +
            +

            Contact Us

            +

            + Qutrix Solution Private Limited
            + Synerge II Workspace,
            + #362/7, 2nd Floor, 16th Main Rd,
            + 4th T Block East, Jayanagar,
            + Bangalore - 560 041,
            + KA, INDIA.
            + Phone: +91 984 530 7360
            + Email: info@qutrixsolution.com
            +

            + +
            + + + + + +
            + +
            + + + +
            +
            +
            + +
            +
            + © 2018-19 Qutrix Solution Private Limited. All Rights Reserved. +
            + +
            + + + + + + +
            + + + + + + + + + + + + + + + + + + + + + + + + + + +", + "censysIpv4Results": Object { + "https": Object { + "dhe": Object { + "dh_params": Object { + "generator": Object { + "length": "8", + "value": "Ag==", + }, + "prime": Object { + "length": "2048", + "value": "///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqsqmj//////////w==", + }, + }, + "support": true, + "timestamp": "2020-07-12T07:52:51Z", + }, + "dhe_export": Object { + "support": false, + "timestamp": "2020-07-09T06:46:33Z", + }, + "get": Object { + "body": " + + + + + Qutrix | Redefining Quality + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            +
            + +
            + + +

            \\"cloudautom

            +
            + + + +
            +
            + + + +
            +
            +
            + +
              + +
              + +
              +
              \\"\\"
              +
              +
              +



              Get The Quality You Deserve...

              +

              For every data-center product development or testing challenges in R&D engineering, there are many solutions. Experience the best with Qutrix Solution for the quality matrix you deserve.

              + Go Qutrix +
              +
              +
              + +
              +
              \\"\\"
              +
              +
              +



              DevTestOps, STLC, Test Automation

              +

              QaaSBox & CloudAuTOM - Pace The Race with our next-generation framework and solution for all your product test operations and test automation requirements. Get-Set-Test!

              + Simplify It! +
              +
              +
              + +
              +
              \\"\\"
              +
              +
              +



              Software Solutions, Services

              +

              The uniqueness of our offerings comes from the DNA of blending product company's innovation with excellence of service company's commitment. Grow your business world non-stop.

              + At Your Service +
              +
              +
              + +
              +
              \\"\\"
              +
              +
              +



              Building, Nurturing Talent Pool

              +

              Evergrowing data-center industry needs fresh talent in India and nurturing of skills. Qutrix Academia invests time in identifying and building talent pool through efficient inhouse workshops.

              + Build Talent +
              +
              +
              + +
              +
              \\"\\"
              +
              +
              +



              Beyond Auditing, Certification

              +

              Qutrix Quality Quotient assessment program provides you blueprint of your engineering quotient beyond any auditing or certification programs offer. Have a WILL to know? This is the WAY.

              + Quotient'ify +
              +
              +
              + +
              + + + + Previous + + + + + Next + + +
              +
              +
              + + +
              + + +
              +
              +
              + +
              + +

              DEARER TO R&D OPEX

              +

              Beat your target with better value for investment when you engage us in your SDLC, STLC phases.

              +
              + +
              + +

              GTM AT EASE

              +

              Go-To-Market at ease. Eliminate 11th hour blocker product defects. Tame your fast ticking clock.

              +
              + +
              + +

              REDEFINE QUALITY

              +

              A quality partner to rely on. Start the journey to redefine your product quality to newer heights.

              +
              + +
              +
              +
              + + + +
              +
              + +
              +

              QaaSBox, Quality Testing Simplified

              +

              Unbox Quality-As-A-Solution software and a platform for your product that empowers your product management, development and test experts to adapt STLC at ease for achieving quality testing. QaaSBox enables the users gain competitive advantage and achieve faster go-to-market cycle.
              + Sign Up Today & Avail Benefits As Beta User!

              +
              + +
              + + \\"\\" + +
              + + +
              +
              +

              Product Test Management

              +

              Come and join to access the get-set-go* tests or create your own online collaboration team or setup enterprise QaaS edition. Explore our innovative and niche offerings for you. System Softwares or Enterprise Products or Mobile/Web Apps - QaaSBox is your new TestOps Compass.

              + Explore More +
              +
              + + +
              +
              + +
              +
              + +
              +

              CloudAuTOM, Test Automation Solution

              +

              We offer custom-build Test Automation SaaS and AaaS products with integrated STLC management modules, which enable our partners gain competitive advantage and achieve faster go-to-market cycle. As subject matter experts, we understand the domain and micro-aspects of complexity involved in building an effective product test automation eco-system for your R&D engineering operations.

              +
              + +
              + +
              + 3 +

              Superior Frameworks

              +
              + +
              + 18 +

              Powerful Features

              +
              + +
              + 45 +

              *Minutes To Deploy AaaS Cloud

              +
              + +
              + 1010 +

              Man Days Crafted (*Ticking)

              +
              + +
              + +
              + + \\"\\" + +
              + + +
              +
              +

              Product Test Automation

              +

              There are 8 unique ways to revolutionize the operations of your R&D Product Engineering Development and Testing. We customize test automation solutions and help our customers by creating private or hybrid cloud ecosystem for data-center product testing of Servers, Adapters, Controllers, Drives, Flash, Arrays, Modules and many more. Explore our innovative and niche offerings for you.

              + Explore More +
              +
              + + +
              +
              + + + +
              +
              +
              +

              Software Solutions, Services

              +

              Experience a highly reliable solution or outstanding service when you engage us for your R&D software engineering development and testing requirements of STORAGE, NETWORK products. Quality is just a consequence of our relentless effort. Our success is to make you succeed.

              +
              + +
              + +

              +
              + +
              +

              Engineering Development Services, Solutions


              +

              Respecting talent and balancing your RoI are essential. Find a new genre of business strategist in us. Access the true developers!

              +
              +
              + +
              + +
              +
              +

              ENG Dev

              +

              Whether offshore development or demand basis engagement model, our business SLAs might reveal unexplored possibilities.

              +

              +
              + +
              +
              +

              ENG Tools

              +

              Offload the hassles of developing tools or utilites for your day-to-day SW engineering activities in any programming languages.

              +
              + +
              +
              +

              ENG Web

              +

              Build your powerful intranet sites while you design core products. We know pulse of software engineering and art of app.

              +
              + + +
              + +
              +

              Product Test Automation Services, Solutions


              +

              In software engineering, test automation is an unique breed of thinking. Testers in Breaking! Developers in Logic! Hackers in Approach!

              +
              +
              + +
              + +
              +
              +

              AuTOM-Creator

              +

              Creating test automation framework for data-center products is synonymous to us. Get it created from the scratch.

              +

              +
              + +
              +
              +

              AuTOM-Developer

              +

              Optimizing/developing existing framework and library is totally a different skill. We also enhance your proprietary framework.

              +
              + +
              +
              +

              AuTOM-Maintainer

              +

              At times, test automation regression is underestimated. Maintenance is a quality and not a mere work. We never overlook.

              +

              +
              +
              + +
              +

              Testing/Quality Assurance Services, Solutions


              +

              Feel the subtle differences of business minds running technology projects vs subject matter experts running business in technology.

              +
              +
              + +
              + +
              +
              +

              ArchiTest

              +

              Engage subject matter expert Test Architects on full-time or flexible terms. Their influence on product is multi-fold.

              +
              + +
              +
              +

              Q-Bench

              +

              Benchmark Desk: Get deeper insights of your product performance, benchmarking metrics dissected and analyzed.

              +

              +
              + +
              +
              +

              IndepTest

              +

              Offers End-To-End independent and indepth testing services/solution for all your data-center product validation.

              +
              + +
              + +
              + +
            + + + + +
            +
            + +
            +

            Academia Workshops

            +

            Only less than 5% of engineers graduating in India are employable for software start-ups and IT product companies (Source: Industry, Media, Expert Reports). Qutrix academia designed career awareness workshop programs in data-center domain for college students, fresh graduates in an attempt to find the hidden-gems from the left-out 95% for the benefit of national and international talent needs.

            +

            Did You Know? It just takes less than 1/4th of a second for your social-networking Likes or Posts to reach your friend in USA from India? It's time you learn HOW! Come, explore, learn the magnitude and sophistication involved behind your Internet World - conceptually and practically. THE ONLY THING THAT CAN STOP YOU IS YOUR OWN APPETITE TO DEEP-DIVE!!!

            +

            Career Workshop Programs - Learn From Experts

            +
            + +
            + +
            +
            +
            + \\"\\" + + +
            + +
            +
            #1 Domain/Technology Awareness
            +

            Conceptual + Hands-On Exposure

            +
            +
            +
            + +
            +
            +
            + \\"\\" + + +
            + +
            +
            #2 Data-Center Test Expertise
            +

            Architectural Testing Exposure

            +
            +
            +
            + +
            +
            +
            + \\"\\" + + +
            + +
            +
            #3 Data-Center Test Automation
            +

            Product Test Automation Exposure

            +
            +
            +
            + +
            + +
            +
            + + + + +
            +
            + +
            +

            Assess Engineering Quotient

            +

            Enroll for Qutrix Quality Quotient (Q-Cube) assessment program and benefit immensely from the insightful data on your R&D Engineering Operations. Q-Cube assessment is offerred in TWO modes. a) Team Mode (Basic Method) b) Expert Mode (Advance Method)

            +
            + +
            + +

            Sample Report With 52.9 Points Scored Based On 10x10 (100-Scale) Point Assessment Model:

            + +
            +
            + Hiring Quotient 25% +
            +
            + +
            +
            + Talent Quotient 39% +
            +
            + +
            +
            + Domain Quotient 39% +
            +
            + +
            +
            + Product Quotient 24% +
            +
            + +
            +
            + Process Quotient 39% +
            +
            + +
            +
            + Development Quotient 42% +
            +
            + +
            +
            + Testing Quotient 75% +
            +
            + +
            +
            + Synergy Quotient 90% +
            +
            + +
            +
            + Innovation Quotient 90% +
            +
            + +
            +
            + Operations Quotient 66% +
            +
            + +
            + +
            +
            + + + + +
            +
            + +
            +

            About Qutrix

            +

            Qutrix is a private limited company established in Bangalore, Silicon Valley Of India. Our culture is built upon the values of product company's innovation and service company's commitment. We offer world-class experience to our customers partnering with us. Our success stories have all the compelling reasons to scale up the business operations with the blessings of satisfied customers.

            +
            + +
            + +
            +
            +
            + \\"\\" +
            +
            +

            Qutrix Mission

            +

            +

            To accomplish a purposeful existence in the industry,

            + By creating employment opportunity for deserving, + By treating suppliers as valuable as customers, + By partnering with visionary customers & investors +
            +

            +
            +
            + +
            +
            +
            + \\"\\" +
            +
            +

            Qutrix Vision

            +

            +

            To be your next generation business partner with perfection in every step we take with our creative minds at work
            +

            +
            +
            + +
            +
            +
            + \\"\\" +
            +
            +

            Qutrix Commitment

            +

            +

            Our commitment to grow your business is essentially built over 9 pillars of traits:

            + Creativity and Innovation
            + Trust and Transperancy
            + Commitment and Ethics
            + Quality and Excellence
            + Business Continuity
            +
            +

            +
            +
            + + +
            + +
            +
            + + + + + +
            +
            +
            +

            Our Team

            +

            Meet our passionate team working towards building every atom of the company. Start-up in energy and attitude! Corporate in focus and execution!

            +
            + +
            + +
            +
            + +
            +
            +

            + +
            + + + + +
            +
            +
            +
            +
            + +
            +
            + \\"\\" +
            +
            +

            Vijay Koteeswaran

            + Founder Director +
            + + + + +
            +
            +
            +
            +
            + +
            +
            Vijay Koteeswaran +
            Founder Director +
            +

            A Stanford IGNITE'd technology entrepreneur with deep expertise in storage and networking domains. Holds Masters Degree in Information Science and Application. Created strong foot-prints in key roles like Test Intrapreneur, Global Test Architect, Product Test and Project Manager. With 19 Years of data-center industry experience, played significant roles in many global companies like Broadcom, LSI, Cisco, Wipro and many associated clients.

            +
            + +
            +
            + +
            +
            +

            + +
            + + + + +
            +
            +
            +
            +
            + +
            + +
            + +
            + +

            Team Qutrix

            +

            Our vibrant team having fun after coding & business hours. We Are Qutrixians!

            +
            + +
            +

            *Ex-Qutrixians are also shown in the team pictures.

            +
            + +
            +
            + + + +
            +
            +
            +

            Career Path

            +

            Nothing fancy about working for start-up unless you think your growth and knowledge matter to you. Dare to build the wall together? Please Apply.

            +
            + +
            +
            + \\"career + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            Job ID Title Type Job RoleApply
            QJR1801IC R&D Engineer (Level 1-3) + Full-Time or Part-Time + + Web & Database Architecture/Programming Mailto: career@qutrixsolution.com
            QJR1802 + IC R&D Engineer (Level 1-3)Full-Time or Part-Time + Test Automation Designing/Programming Mailto: career@qutrixsolution.com
            QJR1803 + Business Development Executive Full-Time or Part-Time + Product & Service Business Development Mailto: career@qutrixsolution.com
            +
            +
            +
            +

            Note: Internship opportunities are available. Interested candidates can mail their profiles to career@qutrixsolution.com

            +
            + +
            + +
            +
            + + +
            +
            + +
            +

            Startup Social Responsibility (SSR)

            + \\"ssr +
            + +

            SSR Initiatives

            +

            We believe that engaging in social responsibility activities even in startup stage is good for setting up the culture of the company. This creates ample opportunity for employees to look aspects beyond business goals and lead a difference in human's life however small it may be. We dedicate half a day every month in programs listed below. Qutrix SSR plans to increase the list of activities over the time.

            +
            + +
            +
            Program
            +

            Fun Day @ Old-Age Homes

            +

            Celebration @ Children Homes

            +

            Career Insights & Guidance

            + +
            + +
            +
            Description
            +

            Celebrate life with old-age citizens to cheer them up with fun-filled activities

            +

            Birthday celebration for underprivileged kids and games to cheer them up

            +

            Career guidance program to empower women engineering & managment graduates

            + +
            + +
            + +
            +
            + + +
            +
            + +
            +

            Contact Us

            +

            Thank you for your interest in Qutrix. Engaging with us is just a ping away.

            +
            + +
            + +
            +
            + +

            Email

            +

            info@qutrixsolution.com

            +
            +
            + + + +
            +
            + +

            Phone Number

            +

            India: +91 984 530 7360

            +
            +
            + +
            + + + +
            +
            + + + + + + +
            +
            +
            +
            + +
            + +

            Qutrix Solution

            +

            Qutrix emanated from Quality Matrix as we envision to redefine your product quality to greater heights with our creative minds at work and innovative products lined up for you.

            +
            + +
            +

            Useful Links

            + +
            + +
            +

            Contact Us

            +

            + Qutrix Solution Private Limited
            + Synerge II Workspace,
            + #362/7, 2nd Floor, 16th Main Rd,
            + 4th T Block East, Jayanagar,
            + Bangalore - 560 041,
            + KA, INDIA.
            + Phone: +91 984 530 7360
            + Email: info@qutrixsolution.com
            +

            + +
            + + + + + +
            + +
            + + + +
            +
            +
            + +
            +
            + © 2018-19 Qutrix Solution Private Limited. All Rights Reserved. +
            + +
            + + + + + + +
            + + + + + + + + + + + + + + + + + + + + + + + + + + +", + "body_sha256": "9c1487d94deba78126aedf06640325567d712176bd905601a86774eccf27acf3", + "headers": Object { + "accept_ranges": "bytes", + "content_type": "text/html", + "last_modified": "Tue, 22 Oct 2019 07:51:03 GMT", + "server": "Apache/2.4.18 (Ubuntu)", + "unknown": Array [ + Object { + "key": "date", + "value": "Mon, 13 Jul 2020 06:27:22 GMT", + }, + Object { + "key": "etag", + "value": "\\"b3ed-5957b0fdbdb00-gzip\\"", + }, + ], + "vary": "Accept-Encoding", + }, + "metadata": Object { + "description": "Apache httpd 2.4.18", + "manufacturer": "Apache", + "product": "httpd", + "version": "2.4.18", + }, + "status_code": "200", + "status_line": "200 OK", + "timestamp": "2020-07-13T06:27:08Z", + "title": "Qutrix | Redefining Quality", + }, + "heartbleed": Object { + "heartbeat_enabled": true, + "heartbleed_vulnerable": false, + "timestamp": "2020-07-14T09:59:29Z", + }, + "rsa_export": Object { + "support": false, + "timestamp": "2020-07-09T09:56:24Z", + }, + "tls": Object { + "certificate": Object { + "parsed": Object { + "extensions": Object { + "authority_info_access": Object { + "issuer_urls": Array [ + "http://cert.int-x3.letsencrypt.org/", + ], + "ocsp_urls": Array [ + "http://ocsp.int-x3.letsencrypt.org", + ], + }, + "authority_key_id": "a84a6a63047dddbae6d139b7a64565eff3a8eca1", + "basic_constraints": Object { + "is_ca": false, + }, + "certificate_policies": Array [ + Object { + "id": "2.23.140.1.2.1", + }, + Object { + "cps": Array [ + "http://cps.letsencrypt.org", + ], + "id": "1.3.6.1.4.1.44947.1.1.1", + }, + ], + "extended_key_usage": Object { + "client_auth": true, + "server_auth": true, + }, + "key_usage": Object { + "digital_signature": true, + "key_encipherment": true, + "value": "5", + }, + "signed_certificate_timestamps": Array [ + Object { + "log_id": "sh4FzIuizYogTodm+Su5iiUgZ2va+nDnsklTLe+LkF4=", + "signature": "BAMARzBFAiEAwhO5IAdK5G5mYt5fUWYrK8DtmZrcerkzuGPyEILUsJ0CIFr7AzhyL+9Aresjg3w+naLXwbjx+1gYCZbx66qYniow", + "timestamp": "1583670380", + "version": "0", + }, + Object { + "log_id": "b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=", + "signature": "BAMASDBGAiEA+UvPCa63vZpGFr8tENEoD6HzEpmKmiRaErsKsJ2MJLwCIQCuQY9COEO90fsRA3Fw2YWOPz/NbII+gPptzMgLgGyhwg==", + "timestamp": "1583670380", + "version": "0", + }, + ], + "subject_alt_name": Object { + "dns_names": Array [ + "www.qutrix.io", + ], + }, + "subject_key_id": "15fe468b1082e83f74a63bff89e7e43f121ab981", + }, + "fingerprint_md5": "a036039237681543846d469f6ec7a91f", + "fingerprint_sha1": "eb7b949bc27b8658028d2e281c87c915f718f27a", + "fingerprint_sha256": "2b0c0742cc20379124cac9a5033197f23c5017860b29f3fca01801da20b75298", + "issuer": Object { + "common_name": Array [ + "Let's Encrypt Authority X3", + ], + "country": Array [ + "US", + ], + "organization": Array [ + "Let's Encrypt", + ], + }, + "issuer_dn": "C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3", + "names": Array [ + "www.qutrix.io", + ], + "redacted": false, + "serial_number": "272865425057829337380701653641131382618839", + "signature": Object { + "self_signed": false, + "signature_algorithm": Object { + "name": "SHA256WithRSA", + "oid": "1.2.840.113549.1.1.11", + }, + "valid": true, + "value": "RVMlDKSXEIwCAsM+DmRZXJBsWRuJr9xPe7VsT6QBFVcoI214Gq1HagThzUWnx47c5tElI1U+6Ew6eU0RunXgWsRauRR72DGhjr0MWLkWHivuD7icNepWgviIrMwWN2Cw+wL966qwhw1/CBWyOilCfEYuH++G7zOgjxWBbVUXB5ZBoWeZyRALy43yIZ9FlLy2aFr/eRcfDkk8O2FyZv5bVTzhtEk1zdarMUAGSOWcC2Jr4alReeLUVNaf3tTdxQ4vXCU7Y1bVLtNYHaxLs4WevhVYnoNVaiEIudOnk6PUOq9l7QJuBr1xU83qFdrzpju8A+wRWggX6xh9NjHmvPGpuA==", + }, + "signature_algorithm": Object { + "name": "SHA256WithRSA", + "oid": "1.2.840.113549.1.1.11", + }, + "spki_subject_fingerprint": "52da5b0201c8006023175ebd6406427d49a940f128596467f57fd1871f32f422", + "subject": Object { + "common_name": Array [ + "www.qutrix.io", + ], + }, + "subject_dn": "CN=www.qutrix.io", + "subject_key_info": Object { + "fingerprint_sha256": "c2e20a68d40c74d7e31bafb7482871aac340a46528d6656f253ae66ebe8fe56d", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "2048", + "modulus": "oESkMYc5Vk3ovqdRgmNhsXO5fWYQLopuk7DxtHAeHrnM9A+NM562YZYeNCCWYsTQMybF/jvQTLPHV6jVfOsGclu8048SW5D58IJ6/dvGhbpvhM8WzQm23u50GKg+IzjK3ZtxuhRJKw4FUD1JgsfvK8j53aiykN9brm4WKm0Piw8+Lvg+IE3BvbeogzH4BptDDUfIgsi30Kj1Ab0ug75Q43Q1KN+TSW393Qfun5evqS0SIDtNlW1JGMRw9PsEB+z9cXmTj8nDohNdmtvwvWdySY2uZJxS/1Xlblig7tioiMpaZ3Sd9elJkSPc3ETgujrjsb4Plsh+FSnAPr8x3O5p9w==", + }, + }, + "tbs_fingerprint": "2d3f8612b0d11b1d5b2267615fb29d5344355543bf9a50eb49a0b1b4c6824686", + "tbs_noct_fingerprint": "6f414c0a4fa6e3fb8a29ae97cffb38dd498bd6209564f4a84ed4882ea74b02b7", + "validation_level": "DV", + "validity": Object { + "end": "2020-06-06T11:26:20Z", + "length": "7776000", + "start": "2020-03-08T11:26:20Z", + }, + "version": "3", + }, + }, + "chain": Array [ + Object { + "parsed": Object { + "extensions": Object { + "authority_info_access": Object { + "issuer_urls": Array [ + "http://apps.identrust.com/roots/dstrootcax3.p7c", + ], + "ocsp_urls": Array [ + "http://isrg.trustid.ocsp.identrust.com", + ], + }, + "authority_key_id": "c4a7b1a47b2c71fadbe14b9075ffc41560858910", + "basic_constraints": Object { + "is_ca": true, + "max_path_len": "0", + }, + "certificate_policies": Array [ + Object { + "id": "2.23.140.1.2.1", + }, + Object { + "cps": Array [ + "http://cps.root-x1.letsencrypt.org", + ], + "id": "1.3.6.1.4.1.44947.1.1.1", + }, + ], + "crl_distribution_points": Array [ + "http://crl.identrust.com/DSTROOTCAX3CRL.crl", + ], + "key_usage": Object { + "certificate_sign": true, + "crl_sign": true, + "digital_signature": true, + "value": "97", + }, + "subject_key_id": "a84a6a63047dddbae6d139b7a64565eff3a8eca1", + }, + "fingerprint_md5": "b15409274f54ad8f023d3b85a5ecec5d", + "fingerprint_sha1": "e6a3b45b062d509b3382282d196efe97d5956ccb", + "fingerprint_sha256": "25847d668eb4f04fdd40b12b6b0740c567da7d024308eb6c2c96fe41d9de218d", + "issuer": Object { + "common_name": Array [ + "DST Root CA X3", + ], + "organization": Array [ + "Digital Signature Trust Co.", + ], + }, + "issuer_dn": "O=Digital Signature Trust Co., CN=DST Root CA X3", + "redacted": false, + "serial_number": "13298795840390663119752826058995181320", + "signature": Object { + "self_signed": false, + "signature_algorithm": Object { + "name": "SHA256WithRSA", + "oid": "1.2.840.113549.1.1.11", + }, + "valid": true, + "value": "3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJouM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwuX4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlGPfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==", + }, + "signature_algorithm": Object { + "name": "SHA256WithRSA", + "oid": "1.2.840.113549.1.1.11", + }, + "spki_subject_fingerprint": "78d2913356ad04f8f362019df6cb4f4f8b003be0d2aa0d1cb37d2fd326b09c9e", + "subject": Object { + "common_name": Array [ + "Let's Encrypt Authority X3", + ], + "country": Array [ + "US", + ], + "organization": Array [ + "Let's Encrypt", + ], + }, + "subject_dn": "C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3", + "subject_key_info": Object { + "fingerprint_sha256": "60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "2048", + "modulus": "nNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EFq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWAa6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3Dkw==", + }, + }, + "tbs_fingerprint": "3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838", + "tbs_noct_fingerprint": "3e1a1a0f6c53f3e97a492d57084b5b9807059ee057ab1505876fd83fda3db838", + "validation_level": "DV", + "validity": Object { + "end": "2021-03-17T16:40:46Z", + "length": "157766400", + "start": "2016-03-17T16:40:46Z", + }, + "version": "3", + }, + }, + ], + "cipher_suite": Object { + "id": "0xC02F", + "name": "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", + }, + "ocsp_stapling": false, + "server_key_exchange": Object { + "ecdh_params": Object { + "curve_id": Object { + "id": "23", + "name": "secp256r1", + }, + }, + }, + "session_ticket": Object { + "length": "192", + "lifetime_hint": "300", + }, + "signature": Object { + "hash_algorithm": "sha512", + "signature_algorithm": "rsa", + "valid": true, + }, + "timestamp": "2020-07-09T09:01:29Z", + "validation": Object { + "browser_error": "x509: certificate has expired or is not yet valid", + "browser_trusted": false, + }, + "version": "TLSv1.2", + }, + }, + }, + "censysMetadata": Object { + "description": "Apache httpd 2.4.18", + "manufacturer": "Apache", + "product": "httpd", + "version": "2.4.18", + }, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 443, + "products": Array [ + Object { + "cpe": "cpe:/a:apache:httpd", + "description": "Apache httpd 2.4.18", + "name": "httpd", + "product": "httpd", + "tags": Array [], + "version": "2.4.18", + }, + ], + "service": "https", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": "SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.8", + "censysIpv4Results": Object { + "ssh": Object { + "v2": Object { + "banner": Object { + "comment": "Ubuntu-4ubuntu2.8", + "raw": "SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.8", + "software": "OpenSSH_7.2p2", + "version": "2.0", + }, + "key_exchange": Object { + "curve25519_sha256_params": Object { + "server_public": "dBq0WRs9WsHGNqAt31aCy1XXMrUqJAWxEELH/d/m8Ts=", + }, + }, + "metadata": Object { + "description": "OpenSSH 7.2p2", + "product": "OpenSSH", + "version": "7.2p2", + }, + "selected": Object { + "client_to_server": Object { + "cipher": "aes128-ctr", + "compression": "none", + "mac": "hmac-sha2-256", + }, + "host_key_algorithm": "ecdsa-sha2-nistp256", + "kex_algorithm": "curve25519-sha256@libssh.org", + "server_to_client": Object { + "cipher": "aes128-ctr", + "compression": "none", + "mac": "hmac-sha2-256", + }, + }, + "server_host_key": Object { + "ecdsa_public_key": Object { + "b": "WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=", + "curve": "P-256", + "gx": "axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=", + "gy": "T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=", + "length": "256", + "n": "/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=", + "p": "/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=", + "x": "KDvemVyf618PrzfPXJZ36kEACirBP31MJqcx1eW8voA=", + "y": "5qksTDYeAnKF1cNTYztboKdVSf5QZOD/yALpsjJLjZE=", + }, + "fingerprint_sha256": "10e58d265b79146d031aad32b01fb028426c1787caf4bebdab8d72f876949831", + "key_algorithm": "ecdsa-sha2-nistp256", + }, + "support": Object { + "client_to_server": Object { + "ciphers": Array [ + "chacha20-poly1305@openssh.com", + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm@openssh.com", + "aes256-gcm@openssh.com", + ], + "compressions": Array [ + "none", + "zlib@openssh.com", + ], + "macs": Array [ + "umac-64-etm@openssh.com", + "umac-128-etm@openssh.com", + "hmac-sha2-256-etm@openssh.com", + "hmac-sha2-512-etm@openssh.com", + "hmac-sha1-etm@openssh.com", + "umac-64@openssh.com", + "umac-128@openssh.com", + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1", + ], + }, + "first_kex_follows": false, + "host_key_algorithms": Array [ + "ssh-rsa", + "rsa-sha2-512", + "rsa-sha2-256", + "ecdsa-sha2-nistp256", + "ssh-ed25519", + ], + "kex_algorithms": Array [ + "curve25519-sha256@libssh.org", + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1", + ], + "server_to_client": Object { + "ciphers": Array [ + "chacha20-poly1305@openssh.com", + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm@openssh.com", + "aes256-gcm@openssh.com", + ], + "compressions": Array [ + "none", + "zlib@openssh.com", + ], + "macs": Array [ + "umac-64-etm@openssh.com", + "umac-128-etm@openssh.com", + "hmac-sha2-256-etm@openssh.com", + "hmac-sha2-512-etm@openssh.com", + "hmac-sha1-etm@openssh.com", + "umac-64@openssh.com", + "umac-128@openssh.com", + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1", + ], + }, + }, + "timestamp": "2020-07-14T20:07:06Z", + }, + }, + }, + "censysMetadata": Object { + "description": "OpenSSH 7.2p2", + "product": "OpenSSH", + "version": "7.2p2", + }, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 22, + "products": Array [ + Object { + "description": "OpenSSH 7.2p2", + "name": "OpenSSH", + "product": "OpenSSH", + "tags": Array [], + "version": "7.2p2", + }, + ], + "service": "ssh", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": null, + "censysIpv4Results": Object { + "mongodb": Object { + "banner": Object { + "build_info": Object { + "build_environment": Object { + "cc": "/opt/mongodbtoolchain/v2/bin/gcc: gcc (GCC) 5.4.0", + "cc_flags": "-fno-omit-frame-pointer -fno-strict-aliasing -ggdb -pthread -Wall -Wsign-compare -Wno-unknown-pragmas -Winvalid-pch -Werror -O2 -Wno-unused-local-typedefs -Wno-unused-function -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-missing-braces -fstack-protector-strong -fno-builtin-memcmp", + "cxx": "/opt/mongodbtoolchain/v2/bin/g++: g++ (GCC) 5.4.0", + "cxx_flags": "-Woverloaded-virtual -Wno-maybe-uninitialized -std=c++14", + "dist_arch": "x86_64", + "dist_mod": "ubuntu1604", + "link_flags": "-pthread -Wl,-z,now -rdynamic -Wl,--fatal-warnings -fstack-protector-strong -fuse-ld=gold -Wl,--build-id -Wl,--hash-style=gnu -Wl,-z,noexecstack -Wl,--warn-execstack -Wl,-z,relro", + "target_arch": "x86_64", + "target_os": "linux", + }, + "git_version": "c389e7f69f637f7a1ac3cc9fae843b635f20b766", + "version": "4.0.10", + }, + "is_master": Object { + "is_master": true, + "logical_session_timeout_minutes": "30", + "max_bson_object_size": "16777216", + "max_message_size_bytes": "48000000", + "max_wire_version": "7", + "max_write_batch_size": "100000", + "read_only": false, + }, + "supported": true, + "timestamp": "2020-07-10T07:04:15Z", + }, + }, + }, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 27017, + "products": Array [], + "service": "mongodb", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": "48347", + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": "RU", + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": "first_file_testdomain11", + "organization": null, + "reverseName": "first_file_testdomain11", + "screenshot": null, + "services": Array [ + Object { + "banner": " + +404 Not Found + +

            Not Found

            +

            The requested URL was not found on this server.

            +
            +
            Apache/2.4.38 (Debian) Server at 31.134.10.156 Port 80
            + +", + "censysIpv4Results": Object { + "http": Object { + "get": Object { + "body": " + +404 Not Found + +

            Not Found

            +

            The requested URL was not found on this server.

            +
            +
            Apache/2.4.38 (Debian) Server at 31.134.10.156 Port 80
            + +", + "body_sha256": "edcb45301d911b82b5e4594d875d9b57d8bfd805a6d280416a18c2b500391f32", + "headers": Object { + "content_length": "275", + "content_type": "text/html; charset=iso-8859-1", + "server": "Apache/2.4.38 (Debian)", + "unknown": Array [ + Object { + "key": "date", + "value": "Tue, 14 Jul 2020 03:36:42 GMT", + }, + ], + }, + "metadata": Object { + "description": "Apache httpd 2.4.38", + "manufacturer": "Apache", + "product": "httpd", + "version": "2.4.38", + }, + "status_code": "404", + "status_line": "404 Not Found", + "timestamp": "2020-07-14T03:36:43Z", + "title": "404 Not Found", + }, + }, + }, + "censysMetadata": Object { + "description": "Apache httpd 2.4.38", + "manufacturer": "Apache", + "product": "httpd", + "version": "2.4.38", + }, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 80, + "products": Array [ + Object { + "cpe": "cpe:/a:apache:httpd", + "description": "Apache httpd 2.4.38", + "name": "httpd", + "product": "httpd", + "tags": Array [], + "version": "2.4.38", + }, + ], + "service": "http", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": "9121", + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": "TR", + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "1.1.1.1", + "ipOnly": false, + "name": "first_file_testdomain12", + "organization": null, + "reverseName": "first_file_testdomain12", + "screenshot": null, + "services": Array [ + Object { + "banner": null, + "censysIpv4Results": Object { + "dns": Object { + "lookup": Object { + "errors": false, + "open_resolver": false, + "questions": Array [ + Object { + "name": "c.afekv.com", + "type": "A", + }, + ], + "resolves_correctly": false, + "support": true, + "timestamp": "2020-07-05T15:41:45Z", + }, + }, + }, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 53, + "products": Array [], + "service": "dns", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": "these characters should not show up in the snapshot: + null: + another null: + another null: + ", + "censysIpv4Results": Object { + "http": Object { + "get": Object { + "body": "these characters should not show up in the snapshot: + null: + another null: + another null: \\\\n ", + }, + }, + }, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 8080, + "products": Array [], + "service": "http", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": "48347", + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": "RU", + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": "first_file_testdomain2", + "organization": null, + "reverseName": "first_file_testdomain2", + "screenshot": null, + "services": Array [ + Object { + "banner": " + +404 Not Found + +

            Not Found

            +

            The requested URL was not found on this server.

            +
            +
            Apache/2.4.38 (Debian) Server at 31.134.10.156 Port 80
            + +", + "censysIpv4Results": Object { + "http": Object { + "get": Object { + "body": " + +404 Not Found + +

            Not Found

            +

            The requested URL was not found on this server.

            +
            +
            Apache/2.4.38 (Debian) Server at 31.134.10.156 Port 80
            + +", + "body_sha256": "edcb45301d911b82b5e4594d875d9b57d8bfd805a6d280416a18c2b500391f32", + "headers": Object { + "content_length": "275", + "content_type": "text/html; charset=iso-8859-1", + "server": "Apache/2.4.38 (Debian)", + "unknown": Array [ + Object { + "key": "date", + "value": "Tue, 14 Jul 2020 03:36:42 GMT", + }, + ], + }, + "metadata": Object { + "description": "Apache httpd 2.4.38", + "manufacturer": "Apache", + "product": "httpd", + "version": "2.4.38", + }, + "status_code": "404", + "status_line": "404 Not Found", + "timestamp": "2020-07-14T03:36:43Z", + "title": "404 Not Found", + }, + }, + }, + "censysMetadata": Object { + "description": "Apache httpd 2.4.38", + "manufacturer": "Apache", + "product": "httpd", + "version": "2.4.38", + }, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 80, + "products": Array [ + Object { + "cpe": "cpe:/a:apache:httpd", + "description": "Apache httpd 2.4.38", + "name": "httpd", + "product": "httpd", + "tags": Array [], + "version": "2.4.38", + }, + ], + "service": "http", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.61", + "ipOnly": false, + "name": "first_file_testdomain3", + "organization": null, + "reverseName": "first_file_testdomain3", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": "8473", + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": "SE", + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "85.24.146.152", + "ipOnly": false, + "name": "first_file_testdomain4", + "organization": null, + "reverseName": "first_file_testdomain4", + "screenshot": null, + "services": Array [ + Object { + "banner": null, + "censysIpv4Results": Object { + "vnc": Object { + "banner": Object { + "security_types": Array [ + Object { + "name": "Apple Inc.", + "value": "30", + }, + Object { + "name": "Apple Inc.", + "value": "33", + }, + Object { + "name": "Unknown", + "value": "36", + }, + Object { + "name": "Apple Inc.", + "value": "35", + }, + ], + "server_protocol_version": Object { + "version_major": "3", + "version_minor": "121", + "version_string": "RFB 003.889", + }, + "supported": true, + "timestamp": "2020-07-09T11:19:40Z", + }, + }, + }, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 5900, + "products": Array [], + "service": "vnc", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": "63949", + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": "US", + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "45.79.207.117", + "ipOnly": false, + "name": "first_file_testdomain5", + "organization": null, + "reverseName": "first_file_testdomain5", + "screenshot": null, + "services": Array [ + Object { + "banner": " + + + + + + Mindvalley + + +
            +
            + + + + + +

            Mindvalley

            + +

            Oops!, something went wrong

            + +
            +
            +

            + + Callback URL mismatch.
            + The provided redirect_uri is not in the list of allowed callback URLs.
            + Please go to the Application Settings page and make sure you are sending a valid callback url from your application. + +

            +
            +
            +
            + + +

            TECHNICAL DETAILS

            + See details for this error +
            + +

            SUPPORT

            + + + Get Help + + + support@mindvalley.com + + +
            +
            +
            +

            + + unauthorized_client: Callback URL mismatch. http://45.79.207.117/auth/mindvalley/callback?origin=http%3A%2F%2F45.79.207.117%2F is not in the list of allowed callback URLs + +

            + + VIEW LOG + + + + + TRACKING ID: 54463be5f6a5f27cd315 + + +
            +
            +
            + + + +", + "censysIpv4Results": Object { + "http": Object { + "get": Object { + "body": " + + + + + + Mindvalley + + +
            +
            + + + + + +

            Mindvalley

            + +

            Oops!, something went wrong

            + +
            +
            +

            + + Callback URL mismatch.
            + The provided redirect_uri is not in the list of allowed callback URLs.
            + Please go to the Application Settings page and make sure you are sending a valid callback url from your application. + +

            +
            +
            +
            + + +

            TECHNICAL DETAILS

            + See details for this error +
            + +

            SUPPORT

            + + + Get Help + + + support@mindvalley.com + + +
            +
            +
            +

            + + unauthorized_client: Callback URL mismatch. http://45.79.207.117/auth/mindvalley/callback?origin=http%3A%2F%2F45.79.207.117%2F is not in the list of allowed callback URLs + +

            + + VIEW LOG + + + + + TRACKING ID: 54463be5f6a5f27cd315 + + +
            +
            +
            + + + +", + "body_sha256": "a8945680f53cd67ec1aef6fb34c40619f52bcc612049316502a3035a359e40fa", + "headers": Object { + "cache_control": "private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0, no-transform", + "connection": "keep-alive", + "content_type": "text/html; charset=utf-8", + "server": "nginx", + "strict_transport_security": "max-age=15724800", + "unknown": Array [ + Object { + "key": "ot_baggage_auth0_request_id", + "value": "3dc0790f280d5bfa47696ea9", + }, + Object { + "key": "x_ratelimit_reset", + "value": "1594148196", + }, + Object { + "key": "date", + "value": "Tue, 07 Jul 2020 18:56:35 GMT", + }, + Object { + "key": "ot_tracer_spanid", + "value": "5b7d921f3dcf0e9f", + }, + Object { + "key": "ot_tracer_sampled", + "value": "true", + }, + Object { + "key": "x_auth0_requestid", + "value": "54463be5f6a5f27cd315", + }, + Object { + "key": "etag", + "value": "W/\\"b22-NrsYOetfnTxV0gk4kA0wrfSdRb8\\"", + }, + Object { + "key": "ot_tracer_traceid", + "value": "00a9a65275edf0ba", + }, + Object { + "key": "x_ratelimit_limit", + "value": "1000", + }, + Object { + "key": "x_ratelimit_remaining", + "value": "998", + }, + ], + "vary": "Accept-Encoding", + }, + "metadata": Object { + "description": "nginx", + "product": "nginx", + }, + "status_code": "403", + "status_line": "403 Forbidden", + "timestamp": "2020-07-07T18:56:35Z", + "title": "Mindvalley", + }, + }, + }, + "censysMetadata": Object { + "description": "nginx", + "product": "nginx", + }, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 80, + "products": Array [ + Object { + "description": "nginx", + "name": "nginx", + "product": "nginx", + "tags": Array [], + }, + ], + "service": "http", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": "26484", + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": "US", + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "156.249.159.119", + "ipOnly": false, + "name": "first_file_testdomain6", + "organization": null, + "reverseName": "first_file_testdomain6", + "screenshot": null, + "services": Array [ + Object { + "banner": " + + + +IIS7 + + + +
            +\\"IIS7\\" +
            + +", + "censysIpv4Results": Object { + "http": Object { + "get": Object { + "body": " + + + +IIS7 + + + +
            +\\"IIS7\\" +
            + +", + "body_sha256": "370be45f65276b3b8de42a29adfb1220fc44a5e018c37e3e9b62fa7d5b523fd0", + "headers": Object { + "accept_ranges": "bytes", + "content_type": "text/html", + "last_modified": "Mon, 30 Jul 2018 12:41:17 GMT", + "server": "Microsoft-IIS/7.5", + "unknown": Array [ + Object { + "key": "etag", + "value": "\\"e5499c228d41:0\\"", + }, + Object { + "key": "date", + "value": "Tue, 07 Jul 2020 05:41:26 GMT", + }, + ], + "vary": "Accept-Encoding", + "x_powered_by": "ASP.NET", + }, + "metadata": Object { + "description": "Microsoft IIS 7.5", + "manufacturer": "Microsoft", + "product": "IIS", + "version": "7.5", + }, + "status_code": "200", + "status_line": "200 OK", + "timestamp": "2020-07-07T05:42:37Z", + "title": "IIS7", + }, + }, + }, + "censysMetadata": Object { + "description": "Microsoft IIS 7.5", + "manufacturer": "Microsoft", + "product": "IIS", + "version": "7.5", + }, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 80, + "products": Array [ + Object { + "cpe": "cpe:/a:microsoft:iis", + "description": "Microsoft IIS 7.5", + "name": "IIS", + "product": "IIS", + "tags": Array [], + "version": "7.5", + }, + ], + "service": "http", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + Object { + "banner": " +Not Found + +

            Not Found

            +

            HTTP Error 404. The requested resource is not found.

            + +", + "censysIpv4Results": Object { + "https": Object { + "dhe": Object { + "dh_params": Object { + "generator": Object { + "length": "8", + "value": "Ag==", + }, + "prime": Object { + "length": "1024", + "value": "///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5lOB//////////8=", + }, + }, + "support": true, + "timestamp": "2020-07-12T09:28:30Z", + }, + "dhe_export": Object { + "support": false, + "timestamp": "2020-07-09T11:32:14Z", + }, + "get": Object { + "body": " +Not Found + +

            Not Found

            +

            HTTP Error 404. The requested resource is not found.

            + +", + "body_sha256": "ce7127c38e30e92a021ed2bd09287713c6a923db9ffdb43f126e8965d777fbf0", + "headers": Object { + "content_length": "315", + "content_type": "text/html; charset=us-ascii", + "server": "Microsoft-HTTPAPI/2.0", + "unknown": Array [ + Object { + "key": "date", + "value": "Tue, 14 Jul 2020 05:20:23 GMT", + }, + ], + }, + "metadata": Object { + "description": "Microsoft HTTPAPI 2.0", + "manufacturer": "Microsoft", + "product": "HTTPAPI", + "version": "2.0", + }, + "status_code": "404", + "status_line": "404 Not Found", + "timestamp": "2020-07-14T05:22:24Z", + "title": "Not Found", + }, + "heartbleed": Object { + "heartbeat_enabled": false, + "heartbleed_vulnerable": false, + "timestamp": "2020-07-14T02:41:19Z", + }, + "rsa_export": Object { + "support": false, + "timestamp": "2020-07-09T06:44:25Z", + }, + "ssl_3": Object { + "support": true, + "timestamp": "2020-07-15T06:13:25Z", + }, + "tls": Object { + "certificate": Object { + "parsed": Object { + "extensions": Object { + "extended_key_usage": Object { + "server_auth": true, + }, + "key_usage": Object { + "data_encipherment": true, + "digital_signature": true, + "key_encipherment": true, + "value": "13", + }, + }, + "fingerprint_md5": "355a2a4731bb4efffbce243be3d68948", + "fingerprint_sha1": "d840933627a82b2cfa55f2a05cac785682fceb25", + "fingerprint_sha256": "a0d25fa4744f969a60abc76efd41af91fce0a20857b05d95976a989fc429300a", + "issuer": Object { + "common_name": Array [ + "WMSvc-WIN-RRGUHN51BI0", + ], + }, + "issuer_dn": "CN=WMSvc-WIN-RRGUHN51BI0", + "redacted": false, + "serial_number": "98566262313343030001206653522675179984", + "signature": Object { + "self_signed": true, + "signature_algorithm": Object { + "name": "SHA1WithRSA", + "oid": "1.2.840.113549.1.1.5", + }, + "valid": false, + "value": "Er/DFxqmv3i0bWvqnU4Fj8i6+XXW/xGeKEWmkzKe2VqnxBCUxLhmAxqCV6pnapC1O3dFMQUeVN5rkdXbZzZv94/7JzHzPSPPliV6S6cWUybXtIG/MEzJhsDLB04TPyEG0P7PF4lmzDhUfxUrO9nJGkIUOiXFCy0hzyDwyMwozX2xLZ+VMic2llEN/LPj3lfB7VJjTyjmxTJKTrPhjQEF2vYEJwQjWBfGC0T02ZTxMzqBYlOo7/ZuhN33P4k48KL41coIIbJmSxIi8FV7ibPPV58aDriZqvdwT1vRbPeWXPz2gyzBg0e44PsdFrfK4l+hkzvQ2mICcVyOf5mJsvl4iQ==", + }, + "signature_algorithm": Object { + "name": "SHA1WithRSA", + "oid": "1.2.840.113549.1.1.5", + }, + "spki_subject_fingerprint": "4e3e776d0e6e3a4abea9909bfe86b2a35af9035e0a57a4ede060e43165e7ecd0", + "subject": Object { + "common_name": Array [ + "WMSvc-WIN-RRGUHN51BI0", + ], + }, + "subject_dn": "CN=WMSvc-WIN-RRGUHN51BI0", + "subject_key_info": Object { + "fingerprint_sha256": "9d4d893113a35101f1abf987f040d00a7649b2dd323b34fb574aa0d93324954b", + "key_algorithm": Object { + "name": "RSA", + }, + "rsa_public_key": Object { + "exponent": "65537", + "length": "2048", + "modulus": "szfH8SHg0u2dEwTggR0kC1T3d7rKWfTCfnhsZPqGiUuk7KY2On24fNEy0ORmrfcqNqRY2IFHYooPYiheMpGjpfEXAUmt+YuCk5CgK6UBI5WJZCThVbVz1CHB3UJzyHwpDUZ8JpA8HV4ZfI6lhPeZcAKQhs6/1MftJoDo5cnEydtidQOMp7sYgQiOxCQG20VGHfyCkZ1bmzZKMSuVaGTJ2341gndX9ZFD4O+yq/YgzHy/1JU3EUpzwwKYa+d83vhvKFtwq7QCfwaKx2i4I54gxynQmODwAkuhZRbN268hmHBJPImimeeLjMNs6u1lnLAvAcmdCib7JKt1ziKAB/WEuQ==", + }, + }, + "tbs_fingerprint": "3077ccc30b1f9d32a9e6aa3505ecf60f915dbe168cd9531c84b52eb4036eafdd", + "tbs_noct_fingerprint": "3077ccc30b1f9d32a9e6aa3505ecf60f915dbe168cd9531c84b52eb4036eafdd", + "validation_level": "unknown", + "validity": Object { + "end": "2030-06-06T01:03:05Z", + "length": "315360000", + "start": "2020-06-08T01:03:05Z", + }, + "version": "3", + }, + }, + "cipher_suite": Object { + "id": "0xC014", + "name": "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", + }, + "ocsp_stapling": false, + "server_key_exchange": Object { + "ecdh_params": Object { + "curve_id": Object { + "id": "23", + "name": "secp256r1", + }, + }, + }, + "signature": Object { + "valid": true, + }, + "timestamp": "2020-07-09T13:34:36Z", + "validation": Object { + "browser_error": "x509: unknown error", + "browser_trusted": false, + }, + "version": "TLSv1.0", + }, + }, + }, + "censysMetadata": Object { + "description": "Microsoft HTTPAPI 2.0", + "manufacturer": "Microsoft", + "product": "HTTPAPI", + "version": "2.0", + }, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 443, + "products": Array [ + Object { + "cpe": "cpe:/a:microsoft:httpapi", + "description": "Microsoft HTTPAPI 2.0", + "name": "HTTPAPI", + "product": "HTTPAPI", + "tags": Array [], + "version": "2.0", + }, + ], + "service": "https", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "221.10.15.220", + "ipOnly": false, + "name": "first_file_testdomain7", + "organization": null, + "reverseName": "first_file_testdomain7", + "screenshot": null, + "services": Array [ + Object { + "banner": null, + "censysIpv4Results": Object { + "dns": Object { + "lookup": Object { + "answers": Array [ + Object { + "name": "c.afekv.com", + "response": "221.10.58.54", + "type": "A", + }, + Object { + "name": "c.afekv.com", + "response": "192.150.186.1", + "type": "A", + }, + ], + "errors": false, + "open_resolver": true, + "questions": Array [ + Object { + "name": "c.afekv.com", + "type": "A", + }, + ], + "resolves_correctly": true, + "support": true, + "timestamp": "2020-06-11T02:47:19Z", + }, + }, + }, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 53, + "products": Array [], + "service": "dns", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": "2856", + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": "GB", + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "81.141.166.145", + "ipOnly": false, + "name": "first_file_testdomain8", + "organization": null, + "reverseName": "first_file_testdomain8", + "screenshot": null, + "services": Array [ + Object { + "banner": null, + "censysIpv4Results": Object { + "cwmp": Object { + "get": Object { + "headers": Object { + "content_length": "0", + "server": "gSOAP/2.7", + }, + "status_code": "404", + "status_line": "404 Not Found", + "timestamp": "2020-07-15T04:07:26Z", + }, + }, + }, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 7547, + "products": Array [], + "service": "cwmp", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": "6327", + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": "CA", + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "24.65.82.187", + "ipOnly": false, + "name": "first_file_testdomain9", + "organization": null, + "reverseName": "first_file_testdomain9", + "screenshot": null, + "services": Array [ + Object { + "banner": "401 Unauthorized

            Authorization Required

            This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required


            ", + "censysIpv4Results": Object { + "cwmp": Object { + "get": Object { + "body": "401 Unauthorized

            Authorization Required

            This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required


            ", + "body_sha256": "721e96983952a29827a40e04ffddf6807212e81923bd0af4f1d90dcd482f504b", + "headers": Object { + "connection": "Keep-Alive", + "content_length": "387", + "content_type": "text/html;charset=iso-8859-1", + "server": "Cisco-CcspCwmpTcpCR/1.0", + "www_authenticate": "Digest realm=\\"Cisco_CCSP_CWMP_TCPCR\\", nonce=\\"fa43351e5566151bedff8552460bb608\\", algorithm=\\"MD5\\", domain=\\"/\\", qop=\\"auth\\", stale=\\"true\\"", + }, + "status_code": "401", + "status_line": "401 Unauthorized", + "timestamp": "2020-07-15T12:26:55Z", + "title": "401 Unauthorized", + }, + }, + }, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 7547, + "products": Array [], + "service": "cwmp", + "serviceSource": "censysIpv4", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, +] +`; + +exports[`censys ipv4 http failure triggers retry 1`] = ` +Array [ + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.60", + "ipOnly": false, + "name": "first_file_testdomain1", + "organization": null, + "reverseName": "first_file_testdomain1", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "52.74.149.117", + "ipOnly": false, + "name": "first_file_testdomain10", + "organization": null, + "reverseName": "first_file_testdomain10", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": "first_file_testdomain11", + "organization": null, + "reverseName": "first_file_testdomain11", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "1.1.1.1", + "ipOnly": false, + "name": "first_file_testdomain12", + "organization": null, + "reverseName": "first_file_testdomain12", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": "first_file_testdomain2", + "organization": null, + "reverseName": "first_file_testdomain2", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.61", + "ipOnly": false, + "name": "first_file_testdomain3", + "organization": null, + "reverseName": "first_file_testdomain3", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "85.24.146.152", + "ipOnly": false, + "name": "first_file_testdomain4", + "organization": null, + "reverseName": "first_file_testdomain4", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "45.79.207.117", + "ipOnly": false, + "name": "first_file_testdomain5", + "organization": null, + "reverseName": "first_file_testdomain5", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "156.249.159.119", + "ipOnly": false, + "name": "first_file_testdomain6", + "organization": null, + "reverseName": "first_file_testdomain6", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "221.10.15.220", + "ipOnly": false, + "name": "first_file_testdomain7", + "organization": null, + "reverseName": "first_file_testdomain7", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "81.141.166.145", + "ipOnly": false, + "name": "first_file_testdomain8", + "organization": null, + "reverseName": "first_file_testdomain8", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "24.65.82.187", + "ipOnly": false, + "name": "first_file_testdomain9", + "organization": null, + "reverseName": "first_file_testdomain9", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, +] +`; + +exports[`censys ipv4 repeated http failures throw an error 1`] = ` +Array [ + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.60", + "ipOnly": false, + "name": "first_file_testdomain1", + "organization": null, + "reverseName": "first_file_testdomain1", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "52.74.149.117", + "ipOnly": false, + "name": "first_file_testdomain10", + "organization": null, + "reverseName": "first_file_testdomain10", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": "first_file_testdomain11", + "organization": null, + "reverseName": "first_file_testdomain11", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "1.1.1.1", + "ipOnly": false, + "name": "first_file_testdomain12", + "organization": null, + "reverseName": "first_file_testdomain12", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": "first_file_testdomain2", + "organization": null, + "reverseName": "first_file_testdomain2", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.61", + "ipOnly": false, + "name": "first_file_testdomain3", + "organization": null, + "reverseName": "first_file_testdomain3", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "85.24.146.152", + "ipOnly": false, + "name": "first_file_testdomain4", + "organization": null, + "reverseName": "first_file_testdomain4", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "45.79.207.117", + "ipOnly": false, + "name": "first_file_testdomain5", + "organization": null, + "reverseName": "first_file_testdomain5", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "156.249.159.119", + "ipOnly": false, + "name": "first_file_testdomain6", + "organization": null, + "reverseName": "first_file_testdomain6", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "221.10.15.220", + "ipOnly": false, + "name": "first_file_testdomain7", + "organization": null, + "reverseName": "first_file_testdomain7", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "81.141.166.145", + "ipOnly": false, + "name": "first_file_testdomain8", + "organization": null, + "reverseName": "first_file_testdomain8", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "24.65.82.187", + "ipOnly": false, + "name": "first_file_testdomain9", + "organization": null, + "reverseName": "first_file_testdomain9", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, +] +`; diff --git a/backend/src/tasks/test/__snapshots__/cve.test.ts.snap b/backend/src/tasks/test/__snapshots__/cve.test.ts.snap new file mode 100644 index 00000000..7c9c622a --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/cve.test.ts.snap @@ -0,0 +1,159 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`cve certs expiring certs 1`] = ` +Array [ + Object { + "actions": Array [], + "cpe": null, + "createdAt": true, + "cve": null, + "cvss": null, + "cwe": null, + "description": "This domain's SSL certificate is expiring / has expired at 2019-04-22T10:20:30.000Z. Please make sure its certificate is renewed, or users may face SSL errors when trying to navigate to the site.", + "id": true, + "isKev": false, + "kevResults": Object {}, + "lastSeen": true, + "needsPopulation": false, + "notes": "", + "references": Array [], + "severity": "High", + "source": "certs", + "state": "open", + "structuredData": Object {}, + "substate": "unconfirmed", + "title": "Expiring SSL certificate", + "updatedAt": true, + }, +] +`; + +exports[`cve certs invalid certs 1`] = ` +Array [ + Object { + "actions": Array [], + "cpe": null, + "createdAt": true, + "cve": null, + "cvss": null, + "cwe": null, + "description": "This domain's SSL certificate is invalid. Please make sure its certificate is properly configured, or users may face SSL errors when trying to navigate to the site.", + "id": true, + "isKev": false, + "kevResults": Object {}, + "lastSeen": true, + "needsPopulation": false, + "notes": "", + "references": Array [], + "severity": "Low", + "source": "certs", + "state": "open", + "structuredData": Object {}, + "substate": "unconfirmed", + "title": "Invalid SSL certificate", + "updatedAt": true, + }, +] +`; + +exports[`cve product with IIS cpe cpe:/a:microsoft:iis:2.5 should include alternate cpes defined in productMap: execSync.input 1`] = ` +"0 cpe:/a:microsoft:iis:2.5,cpe:/a:microsoft:internet_information_services:2.5 +" +`; + +exports[`cve product with IIS cpe cpe:/a:microsoft:internet_information_server should include alternate cpes defined in productMap: execSync.input 1`] = ` +"0 cpe:/a:microsoft:internet_information_server:7.5,cpe:/a:microsoft:internet_information_services:7.5 +" +`; + +exports[`cve product with IIS cpe cpe:/a:microsoft:internet_information_server:8.5 should include alternate cpes defined in productMap: execSync.input 1`] = ` +"0 cpe:/a:microsoft:internet_information_server:8.5,cpe:/a:microsoft:internet_information_services:8.5 +" +`; + +exports[`cve product with cpe with trailing colon: execSync.input 1`] = ` +"0 cpe:/a:10web:form_maker::1.0.0 +" +`; + +exports[`cve product with cpe with version in it: execSync.input 1`] = ` +"0 cpe:/a:10web:form_maker:1.0.0 +" +`; + +exports[`cve product with cpe without version in it: execSync.input 1`] = ` +"0 cpe:/a:10web:form_maker:1.0.0 +" +`; + +exports[`cve product with exchange cpe with version in it: execSync.input 1`] = ` +"0 cpe:/a:microsoft:exchange_server:2019:cumulative_update_5 +" +`; + +exports[`cve simple test: execSync.input 1`] = ` +"0 cpe:/a:10web:form_maker:1.0.0 +" +`; + +exports[`cve simple test: vulnerability 1`] = ` +Object { + "actions": Any, + "cpe": "cpe:/a:10web:form_maker:1.0.0", + "createdAt": Any, + "cve": "CVE-2019-10866", + "cvss": "9.8", + "cwe": "CWE-89", + "description": "Test description", + "id": Any, + "isKev": false, + "kevResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "needsPopulation": false, + "notes": "", + "references": Array [ + Object { + "name": "https://example.com", + "source": "CONFIRM", + "tags": Array [ + "Patch", + "Vendor Advisory", + ], + "url": "https://example.com", + }, + ], + "severity": "Critical", + "source": "cpe2cve", + "state": "open", + "structuredData": Object {}, + "substate": "unconfirmed", + "title": "CVE-2019-10866", + "updatedAt": Any, +} +`; + +exports[`cve simple test: vulnerability 2`] = ` +Object { + "actions": Any, + "cpe": "cpe:/a:10web:form_maker:1.0.0", + "createdAt": Any, + "cve": "CVE-2019-11590", + "cvss": "8.8", + "cwe": "CWE-352", + "description": "", + "id": Any, + "isKev": false, + "kevResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "needsPopulation": true, + "notes": "", + "references": Array [], + "severity": "High", + "source": "cpe2cve", + "state": "open", + "structuredData": Object {}, + "substate": "unconfirmed", + "title": "CVE-2019-11590", + "updatedAt": Any, +} +`; diff --git a/backend/src/tasks/test/__snapshots__/dotgov.test.ts.snap b/backend/src/tasks/test/__snapshots__/dotgov.test.ts.snap new file mode 100644 index 00000000..a30d223f --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/dotgov.test.ts.snap @@ -0,0 +1,57 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`dotgov basic test 1`] = ` +Array [ + Object { + "name": "Administrative Conference of the United States (dotgov)", + "rootDomains": Array [ + "acus.gov", + ], + }, + Object { + "name": "Advisory Council on Historic Preservation (dotgov)", + "rootDomains": Array [ + "achp.gov", + "preserveamerica.gov", + ], + }, + Object { + "name": "American Battle Monuments Commission (dotgov)", + "rootDomains": Array [ + "abmc.gov", + "abmcscholar.gov", + "nationalmall.gov", + ], + }, + Object { + "name": "AMTRAK (dotgov)", + "rootDomains": Array [ + "amtrakoig.gov", + ], + }, + Object { + "name": "Appalachian Regional Commission (dotgov)", + "rootDomains": Array [ + "arc.gov", + ], + }, + Object { + "name": "Appraisal Subcommittee (dotgov)", + "rootDomains": Array [ + "asc.gov", + ], + }, + Object { + "name": "Armed Forces Retirement Home (dotgov)", + "rootDomains": Array [ + "afrh.gov", + ], + }, + Object { + "name": "Barry Goldwater Scholarship and Excellence in Education Foundation (dotgov)", + "rootDomains": Array [ + "goldwaterscholarship.gov", + ], + }, +] +`; diff --git a/backend/src/tasks/test/__snapshots__/ecs-client.test.ts.snap b/backend/src/tasks/test/__snapshots__/ecs-client.test.ts.snap new file mode 100644 index 00000000..824e0d1e --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/ecs-client.test.ts.snap @@ -0,0 +1,54 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`getLogs local 1`] = ` +"2020-08-24T20:43:02.017719500Z (DOCKER LOGS)commandOptions are { +2020-08-24T20:43:02.017758400Z organizationId: '174e9a8c-5c09-4194-b04f-b0d50c171bd1', +2020-08-24T20:43:02.017832700Z organizationName: 'cisa', +2020-08-24T20:43:02.017865500Z scanId: '372164e6-8df8-48d3-90a5-1319487c3ad2', +2020-08-24T20:43:02.017877600Z scanName: 'crawl', +2020-08-24T20:43:02.017885700Z scanTaskId: '5382406b-fcb1-40e7-8dd7-bac09dbfdac2' +2020-08-24T20:43:02.017896900Z } +2020-08-24T20:43:02.019558000Z Running crawl on organization cisa" +`; + +exports[`getLogs not local 1`] = ` +Object { + "logGroupName": "FARGATE_LOG_GROUP_NAME", + "logStreamName": "worker/main/f59d71c6-3d23-4ee9-ad68-c7b810bf458b", + "startFromHead": true, +} +`; + +exports[`getLogs not local 2`] = ` +"2020-08-26T13:06:26.714Z (ECS LOGS)commandOptions are { +2020-08-26T13:06:26.714Z organizationId: 'f0143eda-0e95-4748-ba49-a53069b1c738', +2020-08-26T13:06:26.714Z organizationName: 'CISA', +2020-08-26T13:06:26.714Z scanId: 'e7ff7e7a-7391-431e-9b9e-437e823be3c9', +2020-08-26T13:06:26.714Z scanName: 'amass', +2020-08-26T13:06:26.714Z scanTaskId: 'fef01b7e-2da3-4508-b27a-3d8be8618488' +2020-08-26T13:06:26.714Z } +2020-08-26T13:06:26.715Z Running amass on organization CISA +2020-08-26T13:06:26.917Z => DB Connected +2020-08-26T13:06:27.004Z Running amass with args [ +2020-08-26T13:06:27.004Z 'enum', +2020-08-26T13:06:27.004Z '-ip', +2020-08-26T13:06:27.004Z '-active', +2020-08-26T13:06:27.004Z '-d', +2020-08-26T13:06:27.004Z 'cisa.gov', +2020-08-26T13:06:27.004Z '-json', +2020-08-26T13:06:27.004Z '/out-0.6002422193137014.txt' +2020-08-26T13:06:27.004Z ] +2020-08-26T13:09:58.914Z => DB Connected +2020-08-26T13:09:59.308Z amass created/updated 2 new domains +2020-08-26T13:09:59.308Z Running amass with args [ +2020-08-26T13:09:59.308Z 'enum', +2020-08-26T13:09:59.308Z '-ip', +2020-08-26T13:09:59.308Z '-active', +2020-08-26T13:09:59.308Z '-d', +2020-08-26T13:09:59.308Z 'cyber.dhs.gov', +2020-08-26T13:09:59.308Z '-json', +2020-08-26T13:09:59.308Z '/out-0.6002422193137014.txt' +2020-08-26T13:09:59.308Z ] +2020-08-26T13:14:35.114Z => DB Connected +2020-08-26T13:14:35.463Z amass created/updated 23 new domains" +`; diff --git a/backend/src/tasks/test/__snapshots__/es-client.test.ts.snap b/backend/src/tasks/test/__snapshots__/es-client.test.ts.snap new file mode 100644 index 00000000..8d64ae01 --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/es-client.test.ts.snap @@ -0,0 +1,35 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`updateWebpages test 1`] = ` +Array [ + Object { + "parent_join": Object { + "name": "webpage", + "parent": "domainId", + }, + "suggest": Array [ + Object { + "input": "url", + "weight": 1, + }, + ], + "webpage_body": "test body", + "webpage_createdAt": 2020-10-17T22:21:17.000Z, + "webpage_discoveredById": "webpage_discoveredById", + "webpage_domainId": "domainId", + "webpage_headers": Array [ + Object { + "name": "a", + "value": "b", + }, + ], + "webpage_id": "webpage_id", + "webpage_lastSeen": 2020-10-17T22:21:17.000Z, + "webpage_responseSize": 5000, + "webpage_status": 200, + "webpage_syncedAt": 2020-10-17T22:21:17.000Z, + "webpage_updatedAt": 2020-10-17T22:21:17.000Z, + "webpage_url": "url", + }, +] +`; diff --git a/backend/src/tasks/test/__snapshots__/hibp.test.ts.snap b/backend/src/tasks/test/__snapshots__/hibp.test.ts.snap new file mode 100644 index 00000000..ec6078f1 --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/hibp.test.ts.snap @@ -0,0 +1,69 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`hibp basic test 1`] = ` +Array [ + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "", + "ipOnly": false, + "name": null, + "organization": null, + "reverseName": "gov.test-domain_1", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "", + "ipOnly": false, + "name": null, + "organization": null, + "reverseName": "gov.test-domain_2", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "", + "ipOnly": false, + "name": null, + "organization": null, + "reverseName": "gov.test-domain_3", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, +] +`; diff --git a/backend/src/tasks/test/__snapshots__/intrigue-ident.test.ts.snap b/backend/src/tasks/test/__snapshots__/intrigue-ident.test.ts.snap new file mode 100644 index 00000000..2260b6e6 --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/intrigue-ident.test.ts.snap @@ -0,0 +1,263 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`intrigue ident basic test 1`] = ` +Object { + "content": Array [ + Object { + "hide": null, + "issue": null, + "name": "Location Header", + "result": null, + "task": null, + "type": "content", + }, + Object { + "hide": null, + "issue": null, + "name": "Directory Listing Detected", + "result": false, + "task": null, + "type": "content", + }, + Object { + "hide": false, + "issue": false, + "name": "Form Detected", + "result": true, + "task": null, + "type": "content", + }, + Object { + "hide": null, + "issue": null, + "name": "File Upload Form Detected", + "result": false, + "task": null, + "type": "content", + }, + Object { + "hide": false, + "issue": false, + "name": "Email Addresses Detected", + "result": Array [], + "task": null, + "type": "content", + }, + Object { + "hide": null, + "issue": null, + "name": "Authentication - HTTP", + "result": false, + "task": null, + "type": "content", + }, + Object { + "hide": null, + "issue": null, + "name": "Authentication - NTLM", + "result": false, + "task": null, + "type": "content", + }, + Object { + "hide": null, + "issue": null, + "name": "Authentication - Forms", + "result": false, + "task": null, + "type": "content", + }, + Object { + "hide": null, + "issue": null, + "name": "Authentication - Session Identifier", + "result": false, + "task": null, + "type": "content", + }, + Object { + "hide": null, + "issue": null, + "name": "Access-Control-Allow-Origin Header", + "result": false, + "task": null, + "type": "content", + }, + Object { + "hide": null, + "issue": null, + "name": "P3P Header", + "result": false, + "task": null, + "type": "content", + }, + Object { + "hide": false, + "issue": false, + "name": "X-Frame-Options Header", + "result": true, + "task": null, + "type": "content", + }, + Object { + "hide": null, + "issue": null, + "name": "X-XSS-Protection Header", + "result": false, + "task": null, + "type": "content", + }, + Object { + "hide": null, + "issue": null, + "name": "Google Analytics", + "result": null, + "task": null, + "type": "content", + }, + Object { + "hide": null, + "issue": null, + "name": "Google Site Verification", + "result": null, + "task": null, + "type": "content", + }, + Object { + "hide": null, + "issue": null, + "name": "MyWebStats", + "result": null, + "task": null, + "type": "content", + }, + ], + "fingerprint": Array [ + Object { + "cpe": "cpe:2.3:a:bootstrap:bootstrap::", + "hide": false, + "inference": false, + "issue": null, + "match_details": "boostrap css", + "match_type": "content_body", + "product": "Bootstrap", + "tags": Array [ + "Web Framework", + ], + "task": null, + "type": "fingerprint", + "update": "", + "vendor": "Bootstrap", + "version": "", + }, + Object { + "cpe": "cpe:2.3:a:apache:http_server::", + "hide": false, + "inference": false, + "issue": null, + "match_details": "Apache server header w/o version", + "match_type": "content_headers", + "product": "HTTP Server", + "tags": Array [ + "Web Server", + ], + "task": null, + "type": "fingerprint", + "update": "", + "vendor": "Apache", + "version": "", + }, + Object { + "cpe": "cpe:2.3:a:apache:http_server::", + "hide": false, + "inference": false, + "issue": null, + "match_details": "Apache web server - server header - no version", + "match_type": "content_headers", + "product": "HTTP Server", + "tags": Array [ + "Web Server", + ], + "task": null, + "type": "fingerprint", + "update": "", + "vendor": "Apache", + "version": "", + }, + Object { + "cpe": "cpe:2.3:a:drupal:drupal:8:", + "hide": false, + "inference": false, + "issue": null, + "match_details": "Drupal headers", + "match_type": "content_headers", + "product": "Drupal", + "tags": Array [ + "CMS", + ], + "task": null, + "type": "fingerprint", + "update": "", + "vendor": "Drupal", + "version": "8", + }, + Object { + "cpe": "cpe:2.3:s:newrelic:newrelic::", + "hide": false, + "inference": null, + "issue": null, + "match_details": "NewRelic tracking code", + "match_type": "content_body", + "product": "NewRelic", + "tags": Array [ + "APM", + "Javascript", + ], + "task": null, + "type": "fingerprint", + "update": "", + "vendor": "NewRelic", + "version": "", + }, + ], +} +`; + +exports[`intrigue ident basic test 2`] = ` +Array [ + Object { + "cpe": "cpe:/a:bootstrap:bootstrap::", + "name": "Bootstrap", + "tags": Array [ + "Web Framework", + ], + "vendor": "Bootstrap", + }, + Object { + "cpe": "cpe:/a:apache:http_server::", + "name": "HTTP Server", + "tags": Array [ + "Web Server", + ], + "vendor": "Apache", + }, + Object { + "cpe": "cpe:/a:drupal:drupal:8:", + "name": "Drupal", + "tags": Array [ + "CMS", + ], + "vendor": "Drupal", + "version": "8", + }, + Object { + "cpe": "cpe:/s:newrelic:newrelic::", + "name": "NewRelic", + "tags": Array [ + "APM", + "Javascript", + ], + "vendor": "NewRelic", + }, +] +`; diff --git a/backend/src/tasks/test/__snapshots__/lookingGlass.test.ts.snap b/backend/src/tasks/test/__snapshots__/lookingGlass.test.ts.snap new file mode 100644 index 00000000..1b47c381 --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/lookingGlass.test.ts.snap @@ -0,0 +1,69 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`lookingGlass basic test 1`] = ` +Array [ + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "1.123.135.123", + "ipOnly": true, + "name": null, + "organization": null, + "reverseName": "123.135.123.1", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "100.123.100.123", + "ipOnly": true, + "name": null, + "organization": null, + "reverseName": "123.100.123.100", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "123.123.123.123", + "ipOnly": true, + "name": null, + "organization": null, + "reverseName": "123.123.123.123", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, +] +`; diff --git a/backend/src/tasks/test/__snapshots__/portscanner.test.ts.snap b/backend/src/tasks/test/__snapshots__/portscanner.test.ts.snap new file mode 100644 index 00000000..4bfb04cc --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/portscanner.test.ts.snap @@ -0,0 +1,44 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`portscanner basic test: helpers.saveServicesToDb 1`] = ` +Array [ + Service { + "discoveredBy": Object { + "id": "d0f51c16-a64a-4ed0-8373-d66485bfc678", + }, + "domain": Domain { + "ip": "104.84.119.215", + "name": "www.cisa.gov", + "services": Array [ + Object { + "port": 80, + }, + Object { + "port": 443, + }, + ], + }, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 80, + }, + Service { + "discoveredBy": Object { + "id": "d0f51c16-a64a-4ed0-8373-d66485bfc678", + }, + "domain": Domain { + "ip": "104.84.119.215", + "name": "www.cisa.gov", + "services": Array [ + Object { + "port": 80, + }, + Object { + "port": 443, + }, + ], + }, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 443, + }, +] +`; diff --git a/backend/src/tasks/test/__snapshots__/search-sync.test.ts.snap b/backend/src/tasks/test/__snapshots__/search-sync.test.ts.snap new file mode 100644 index 00000000..50e7302f --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/search-sync.test.ts.snap @@ -0,0 +1,26 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`search_sync should update a domain if a domain has changed 1`] = ` +Array [ + "id", + "createdAt", + "updatedAt", + "syncedAt", + "ip", + "fromRootDomain", + "subdomainSource", + "ipOnly", + "reverseName", + "name", + "screenshot", + "country", + "asn", + "cloudHosted", + "ssl", + "censysCertificatesResults", + "trustymailResults", + "services", + "organization", + "vulnerabilities", +] +`; diff --git a/backend/src/tasks/test/__snapshots__/shodan.test.ts.snap b/backend/src/tasks/test/__snapshots__/shodan.test.ts.snap new file mode 100644 index 00000000..54a71a2d --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/shodan.test.ts.snap @@ -0,0 +1,132 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`shodan basic test 1`] = ` +Array [ + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "153.126.148.60", + "ipOnly": false, + "name": null, + "organization": null, + "reverseName": "first_file_testdomain1", + "screenshot": null, + "services": Array [ + Object { + "banner": "* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready. +* CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN +A001 OK Capability completed. +* ID NIL +A002 OK ID completed. +A003 BAD Error in IMAP command received by server. +", + "censysIpv4Results": Object {}, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 993, + "products": Array [ + Object { + "cpe": "cpe:/a:igor_sysoev:nginx:1.18.0", + "name": "nginx", + "tags": Array [], + "vendor": "igor sysoev", + "version": "1.18.0", + }, + Object { + "cpe": "cpe:/a:atlassian:confluence", + "name": "confluence", + "tags": Array [], + "vendor": "atlassian", + }, + ], + "service": null, + "serviceSource": "shodan", + "shodanResults": Object { + "cpe": Array [ + "cpe:/a:igor_sysoev:nginx:1.18.0", + "cpe:/a:atlassian:confluence", + ], + "product": "Test", + "version": "1.1", + }, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "1.1.1.1", + "ipOnly": false, + "name": null, + "organization": null, + "reverseName": "first_file_testdomain12", + "screenshot": null, + "services": Array [ + Object { + "banner": " +Recursion: enabled +Resolver ID: AMS", + "censysIpv4Results": Object {}, + "censysMetadata": Object {}, + "createdAt": null, + "id": null, + "intrigueIdentResults": Object {}, + "lastSeen": 2019-04-22T10:20:30.000Z, + "port": 53, + "products": Array [], + "service": null, + "serviceSource": "shodan", + "shodanResults": Object {}, + "updatedAt": null, + "wappalyzerResults": Array [], + }, + ], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, + Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": null, + "fromRootDomain": null, + "id": null, + "ip": "31.134.10.156", + "ipOnly": false, + "name": null, + "organization": null, + "reverseName": "first_file_testdomain2", + "screenshot": null, + "services": Array [], + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": null, + }, +] +`; diff --git a/backend/src/tasks/test/__snapshots__/webscraper.test.ts.snap b/backend/src/tasks/test/__snapshots__/webscraper.test.ts.snap new file mode 100644 index 00000000..39e75e51 --- /dev/null +++ b/backend/src/tasks/test/__snapshots__/webscraper.test.ts.snap @@ -0,0 +1,221 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`webscraper basic test 1`] = ` +Array [ + Array [ + "scrapy", + Array [ + "crawl", + "main", + "-a", + "domains_file=/app/worker/webscraper/domains.txt", + ], + ], +] +`; + +exports[`webscraper basic test 2`] = ` +Array [ + Array [ + "/app/worker/webscraper/domains.txt", + "https://docs.crossfeed.cyber.dhs.gov", + ], +] +`; + +exports[`webscraper basic test 3`] = ` +Array [ + "https://docs.crossfeed.cyber.dhs.gov/usage/customization/", + "https://docs.crossfeed.cyber.dhs.gov/usage/administration/", + "https://docs.crossfeed.cyber.dhs.gov/usage/", + "https://docs.crossfeed.cyber.dhs.gov/scans/", + "https://docs.crossfeed.cyber.dhs.gov/contributing/setup/", + "https://docs.crossfeed.cyber.dhs.gov/contributing/deployment/", + "https://docs.crossfeed.cyber.dhs.gov/contributing/architecture/", + "https://docs.crossfeed.cyber.dhs.gov/contributing/", + "https://docs.crossfeed.cyber.dhs.gov", +] +`; + +exports[`webscraper basic test 4`] = ` +Array [ + "200", + "200", + "200", + "200", + "400", + "200", + "200", + "200", + "200", +] +`; + +exports[`webscraper basic test 5`] = ` +Array [ + Array [], + Array [], + Array [], + Array [], + Array [], + Array [], + Array [], + Array [], + Array [], +] +`; + +exports[`webscraper basic test 6`] = ` +Array [ + Object { + "webpage_body": "abc", + "webpage_createdAt": true, + "webpage_discoveredById": true, + "webpage_domainId": true, + "webpage_headers": Array [ + Object { + "a": "b", + "c": "d", + }, + ], + "webpage_id": true, + "webpage_lastSeen": true, + "webpage_responseSize": null, + "webpage_status": "200", + "webpage_syncedAt": true, + "webpage_updatedAt": true, + "webpage_url": "https://docs.crossfeed.cyber.dhs.gov", + }, + Object { + "webpage_body": undefined, + "webpage_createdAt": true, + "webpage_discoveredById": true, + "webpage_domainId": true, + "webpage_headers": Array [], + "webpage_id": true, + "webpage_lastSeen": true, + "webpage_responseSize": null, + "webpage_status": "200", + "webpage_syncedAt": true, + "webpage_updatedAt": true, + "webpage_url": "https://docs.crossfeed.cyber.dhs.gov/scans/", + }, + Object { + "webpage_body": undefined, + "webpage_createdAt": true, + "webpage_discoveredById": true, + "webpage_domainId": true, + "webpage_headers": Array [], + "webpage_id": true, + "webpage_lastSeen": true, + "webpage_responseSize": null, + "webpage_status": "200", + "webpage_syncedAt": true, + "webpage_updatedAt": true, + "webpage_url": "https://docs.crossfeed.cyber.dhs.gov/contributing/", + }, + Object { + "webpage_body": undefined, + "webpage_createdAt": true, + "webpage_discoveredById": true, + "webpage_domainId": true, + "webpage_headers": Array [], + "webpage_id": true, + "webpage_lastSeen": true, + "webpage_responseSize": null, + "webpage_status": "200", + "webpage_syncedAt": true, + "webpage_updatedAt": true, + "webpage_url": "https://docs.crossfeed.cyber.dhs.gov/usage/", + }, + Object { + "webpage_body": "abc", + "webpage_createdAt": true, + "webpage_discoveredById": true, + "webpage_domainId": true, + "webpage_headers": Array [ + Object { + "a": "b", + "c": "d", + }, + ], + "webpage_id": true, + "webpage_lastSeen": true, + "webpage_responseSize": null, + "webpage_status": "200", + "webpage_syncedAt": true, + "webpage_updatedAt": true, + "webpage_url": "https://docs.crossfeed.cyber.dhs.gov", + }, + Object { + "webpage_body": undefined, + "webpage_createdAt": true, + "webpage_discoveredById": true, + "webpage_domainId": true, + "webpage_headers": Array [], + "webpage_id": true, + "webpage_lastSeen": true, + "webpage_responseSize": null, + "webpage_status": "200", + "webpage_syncedAt": true, + "webpage_updatedAt": true, + "webpage_url": "https://docs.crossfeed.cyber.dhs.gov/contributing/deployment/", + }, + Object { + "webpage_body": undefined, + "webpage_createdAt": true, + "webpage_discoveredById": true, + "webpage_domainId": true, + "webpage_headers": Array [], + "webpage_id": true, + "webpage_lastSeen": true, + "webpage_responseSize": null, + "webpage_status": "200", + "webpage_syncedAt": true, + "webpage_updatedAt": true, + "webpage_url": "https://docs.crossfeed.cyber.dhs.gov/contributing/architecture/", + }, + Object { + "webpage_body": undefined, + "webpage_createdAt": true, + "webpage_discoveredById": true, + "webpage_domainId": true, + "webpage_headers": Array [], + "webpage_id": true, + "webpage_lastSeen": true, + "webpage_responseSize": null, + "webpage_status": "200", + "webpage_syncedAt": true, + "webpage_updatedAt": true, + "webpage_url": "https://docs.crossfeed.cyber.dhs.gov/usage/customization/", + }, + Object { + "webpage_body": undefined, + "webpage_createdAt": true, + "webpage_discoveredById": true, + "webpage_domainId": true, + "webpage_headers": Array [], + "webpage_id": true, + "webpage_lastSeen": true, + "webpage_responseSize": null, + "webpage_status": "200", + "webpage_syncedAt": true, + "webpage_updatedAt": true, + "webpage_url": "https://docs.crossfeed.cyber.dhs.gov/usage/administration/", + }, + Object { + "webpage_body": undefined, + "webpage_createdAt": true, + "webpage_discoveredById": true, + "webpage_domainId": true, + "webpage_headers": Array [], + "webpage_id": true, + "webpage_lastSeen": true, + "webpage_responseSize": null, + "webpage_status": "400", + "webpage_syncedAt": true, + "webpage_updatedAt": true, + "webpage_url": "https://docs.crossfeed.cyber.dhs.gov/contributing/setup/", + }, +] +`; diff --git a/backend/src/tasks/test/amass.test.ts b/backend/src/tasks/test/amass.test.ts new file mode 100644 index 00000000..6a0b5fca --- /dev/null +++ b/backend/src/tasks/test/amass.test.ts @@ -0,0 +1,25 @@ +import { handler as amass } from '../amass'; +jest.mock('../helpers/getRootDomains'); +jest.mock('../helpers/saveDomainsToDb'); + +jest.mock('fs', () => ({ + readFileSync: + () => `{"name":"filedrop.cisa.gov","domain":"cisa.gov","addresses":[{"ip":"2a02:26f0:7a00:195::447a","cidr":"2a02:26f0:7a00::/48","asn":6762,"desc":"SEABONE-NET TELECOM ITALIA SPARKLE S.p.A."},{"ip":"2a02:26f0:7a00:188::447a","cidr":"2a02:26f0:7a00::/48","asn":6762,"desc":"SEABONE-NET TELECOM ITALIA SPARKLE S.p.A."}],"tag":"dns","source":"DNS"} +{"name":"www.filedrop.cisa.gov","domain":"cisa.gov","addresses":[{"ip":"2a02:26f0:7a00:188::447a","cidr":"2a02:26f0:7a00::/48","asn":6762,"desc":"SEABONE-NET TELECOM ITALIA SPARKLE S.p.A."},{"ip":"2a02:26f0:7a00:195::447a","cidr":"2a02:26f0:7a00::/48","asn":6762,"desc":"SEABONE-NET TELECOM ITALIA SPARKLE S.p.A."}],"tag":"cert","source":"Crtsh"}`, + unlinkSync: () => null +})); +jest.mock('child_process', () => ({ + spawnSync: () => null +})); + +describe('amass', () => { + test('basic test', async () => { + await amass({ + organizationId: 'organizationId', + organizationName: 'organizationName', + scanId: 'ee7640ae-62d9-4e01-8a32-0e42dc8365dd', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + }); +}); diff --git a/backend/src/tasks/test/censys.test.ts b/backend/src/tasks/test/censys.test.ts new file mode 100644 index 00000000..631636a5 --- /dev/null +++ b/backend/src/tasks/test/censys.test.ts @@ -0,0 +1,1238 @@ +import { handler as censys } from '../censys'; +import * as nock from 'nock'; +jest.mock('../helpers/getRootDomains'); +jest.mock('../helpers/saveDomainsToDb'); + +jest.mock('dns', () => ({ + promises: { + lookup: async (domainName) => ({ address: '104.84.119.215' }) + } +})); + +describe('censys', () => { + afterAll(async () => { + nock.cleanAll(); + }); + test('basic test', async () => { + nock('https://search.censys.io') + .post('/api/v2/certificates/search') + .reply(200, { + code: 200, + status: 'OK', + result: { + query: 'filedrop.cisa.gov', + total: 20, + duration_ms: 655, + hits: [ + { + names: [ + 'niem.gov', + 'registration.fletc.gov', + 'filedrop.cisa.gov', + 'www.fema.org', + 'e-verify.gov', + 'www3.dhs.gov', + 'globalentry.gov', + 'scitech.dhs.gov', + 'staging.cisa.gov', + 'preview.cisa.gov', + 'ice.gov', + 'blog-es.uscis.gov', + 'firstresponder.gov', + 'www.cisa.gov', + 'www.globalentry.gov', + 'espfaq.fema.gov', + 'schoolsafety.gov', + 'www.schoolsafety.gov', + 'floodsmart.gov', + 'www.filedrop.cisa.gov', + 'fleta.gov', + 'blog.fema.gov', + 'faq.ready.gov', + 'www.fema.com', + 'readybusiness.gov', + 'cybersecurity.gov', + 'fema.gov', + 'tsa.gov', + 'secretservice.gov', + 'fema.org', + 'www.cybersecurity.gov', + 'cbp.dhs.gov', + 'disasterassistance.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'cbp.gov', + 'oig.dhs.gov', + 'fletc.gov', + 'fema.com', + 'blog.uscis.gov', + 'ready.gov', + 'cyber.gov', + 'uscis.gov', + 'firstrespondertraining.gov', + 'www.cyber.gov', + 'listo.gov', + 'cisa.gov', + 'faq.fema.gov', + 'everify.gov', + 'biometrics.gov' + ] + }, + { + names: [ + 'biometrics.cbp.gov', + 'biometrics.gov', + 'blog-es.uscis.gov', + 'blog.fema.gov', + 'blog.uscis.gov', + 'cbp.dhs.gov', + 'cbp.gov', + 'cisa.gov', + 'connect-presidentscup.cisa.gov', + 'cyber.gov', + 'cybersecurity.gov', + 'disasterassistance.gov', + 'e-verify.gov', + 'engine-presidentscup.cisa.gov', + 'espfaq.fema.gov', + 'everify.gov', + 'faq.fema.gov', + 'faq.ready.gov', + 'fema.com', + 'fema.gov', + 'fema.org', + 'filedrop.cisa.gov', + 'files-presidentscup.cisa.gov', + 'firstresponder.gov', + 'fleta.gov', + 'fletc.gov', + 'floodsmart.gov', + 'globalentry.gov', + 'ice.gov', + 'id-presidentscup.cisa.gov', + 'listo.gov', + 'niem.gov', + 'oig.dhs.gov', + 'presidentscup.cisa.gov', + 'preview-biometrics.cbp.gov', + 'preview.cisa.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'ready.gov', + 'readybusiness.gov', + 'registration.fletc.gov', + 'schoolsafety.gov', + 'scitech.dhs.gov', + 'secretservice.gov', + 'solo-presidentscup.cisa.gov', + 'staging.cisa.gov', + 'team-presidentscup.cisa.gov', + 'tsa.gov', + 'us-cert.cisa.gov', + 'uscis.gov', + 'usss.gov', + 'www.biometrics.cbp.gov', + 'www.cisa.gov', + 'www.cyber.gov', + 'www.cybersecurity.gov', + 'www.fema.com', + 'www.fema.org', + 'www.filedrop.cisa.gov', + 'www.globalentry.gov', + 'www.schoolsafety.gov', + 'www.us-cert.cisa.gov', + 'www.usss.gov', + 'www3.dhs.gov' + ] + }, + { + names: [ + 'biometrics.cbp.gov', + 'biometrics.gov', + 'blog-es.uscis.gov', + 'blog.fema.gov', + 'blog.uscis.gov', + 'cbp.dhs.gov', + 'cbp.gov', + 'cisa.gov', + 'connect-presidentscup.cisa.gov', + 'cyber.gov', + 'cybersecurity.gov', + 'disasterassistance.gov', + 'e-verify.gov', + 'engine-presidentscup.cisa.gov', + 'espfaq.fema.gov', + 'everify.gov', + 'faq.fema.gov', + 'faq.ready.gov', + 'fema.com', + 'fema.gov', + 'fema.org', + 'filedrop.cisa.gov', + 'files-presidentscup.cisa.gov', + 'firstresponder.gov', + 'firstrespondertraining.gov', + 'fleta.gov', + 'fletc.gov', + 'floodsmart.gov', + 'globalentry.gov', + 'ice.gov', + 'id-presidentscup.cisa.gov', + 'listo.gov', + 'niem.gov', + 'oig.dhs.gov', + 'presidentscup.cisa.gov', + 'preview-biometrics.cbp.gov', + 'preview.cisa.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'ready.gov', + 'readybusiness.gov', + 'registration.fletc.gov', + 'schoolsafety.gov', + 'scitech.dhs.gov', + 'secretservice.gov', + 'solo-presidentscup.cisa.gov', + 'staging.cisa.gov', + 'team-presidentscup.cisa.gov', + 'tsa.gov', + 'us-cert.cisa.gov', + 'uscis.gov', + 'usss.gov', + 'www.biometrics.cbp.gov', + 'www.cisa.gov', + 'www.cyber.gov', + 'www.cybersecurity.gov', + 'www.fema.com', + 'www.fema.org', + 'www.filedrop.cisa.gov', + 'www.globalentry.gov', + 'www.schoolsafety.gov', + 'www.us-cert.cisa.gov', + 'www.usss.gov', + 'www3.dhs.gov' + ] + }, + { + names: [ + 'biometrics.cbp.gov', + 'biometrics.gov', + 'blog-es.uscis.gov', + 'blog.fema.gov', + 'blog.uscis.gov', + 'cbp.dhs.gov', + 'cbp.gov', + 'cisa.gov', + 'connect-presidentscup.cisa.gov', + 'cyber.gov', + 'cybersecurity.gov', + 'disasterassistance.gov', + 'e-verify.gov', + 'engine-presidentscup.cisa.gov', + 'espfaq.fema.gov', + 'everify.gov', + 'faq.fema.gov', + 'faq.ready.gov', + 'fema.com', + 'fema.gov', + 'fema.org', + 'filedrop.cisa.gov', + 'files-presidentscup.cisa.gov', + 'firstresponder.gov', + 'firstrespondertraining.gov', + 'fleta.gov', + 'fletc.gov', + 'floodsmart.gov', + 'globalentry.gov', + 'ice.gov', + 'id-presidentscup.cisa.gov', + 'listo.gov', + 'niem.gov', + 'oig.dhs.gov', + 'presidentscup.cisa.gov', + 'preview-biometrics.cbp.gov', + 'preview.cisa.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'ready.gov', + 'readybusiness.gov', + 'registration.fletc.gov', + 'schoolsafety.gov', + 'scitech.dhs.gov', + 'secretservice.gov', + 'solo-presidentscup.cisa.gov', + 'staging.cisa.gov', + 'team-presidentscup.cisa.gov', + 'tsa.gov', + 'us-cert.cisa.gov', + 'uscis.gov', + 'usss.gov', + 'www.biometrics.cbp.gov', + 'www.cisa.gov', + 'www.cyber.gov', + 'www.cybersecurity.gov', + 'www.fema.com', + 'www.fema.org', + 'www.filedrop.cisa.gov', + 'www.globalentry.gov', + 'www.schoolsafety.gov', + 'www.usss.gov', + 'www3.dhs.gov' + ] + }, + { + names: [ + 'biometrics.cbp.gov', + 'biometrics.gov', + 'blog-es.uscis.gov', + 'blog.fema.gov', + 'blog.uscis.gov', + 'cbp.dhs.gov', + 'cbp.gov', + 'cisa.gov', + 'connect-presidentscup.cisa.gov', + 'cyber.gov', + 'cybersecurity.gov', + 'disasterassistance.gov', + 'e-verify.gov', + 'engine-presidentscup.cisa.gov', + 'espfaq.fema.gov', + 'everify.gov', + 'faq.fema.gov', + 'faq.ready.gov', + 'fema.com', + 'fema.gov', + 'fema.org', + 'filedrop.cisa.gov', + 'files-presidentscup.cisa.gov', + 'firstresponder.gov', + 'fleta.gov', + 'fletc.gov', + 'floodsmart.gov', + 'globalentry.gov', + 'ice.gov', + 'id-presidentscup.cisa.gov', + 'listo.gov', + 'niem.gov', + 'oig.dhs.gov', + 'presidentscup.cisa.gov', + 'preview-biometrics.cbp.gov', + 'preview.cisa.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'ready.gov', + 'readybusiness.gov', + 'registration.fletc.gov', + 'schoolsafety.gov', + 'scitech.dhs.gov', + 'secretservice.gov', + 'solo-presidentscup.cisa.gov', + 'staging.cisa.gov', + 'team-presidentscup.cisa.gov', + 'tsa.gov', + 'us-cert.cisa.gov', + 'uscis.gov', + 'usss.gov', + 'www.biometrics.cbp.gov', + 'www.cisa.gov', + 'www.cyber.gov', + 'www.cybersecurity.gov', + 'www.fema.com', + 'www.fema.org', + 'www.filedrop.cisa.gov', + 'www.globalentry.gov', + 'www.schoolsafety.gov', + 'www.us-cert.cisa.gov', + 'www.usss.gov', + 'www3.dhs.gov' + ] + }, + { + names: [ + 'blog.fema.gov', + 'readybusiness.gov', + 'scitech.dhs.gov', + 'e-verify.gov', + 'listo.gov', + 'firstresponder.gov', + 'blog.uscis.gov', + 'www.schoolsafety.gov', + 'disasterassistance.gov', + 'fema.org', + 'public-prod-elis2.uscis.dhs.gov', + 'ready.gov', + 'www.cisa.gov', + 'faq.ready.gov', + 'ice.gov', + 'filedrop.cisa.gov', + 'everify.gov', + 'niem.gov', + 'floodsmart.gov', + 'fema.com', + 'cbp.dhs.gov', + 'fleta.gov', + 'fema.gov', + 'espfaq.fema.gov', + 'www.fema.org', + 'blog-es.uscis.gov', + 'www.globalentry.gov', + 'oig.dhs.gov', + 'biometrics.gov', + 'staging.cisa.gov', + 'fletc.gov', + 'registration.fletc.gov', + 'cbp.gov', + 'www3.dhs.gov', + 'tsa.gov', + 'globalentry.gov', + 'www.fema.com', + 'secretservice.gov', + 'schoolsafety.gov', + 'uscis.gov', + 'cisa.gov', + 'firstrespondertraining.gov', + 'www.filedrop.cisa.gov', + 'preview.cisa.gov', + 'faq.fema.gov' + ] + }, + { + names: [ + 'readybusiness.gov', + 'blog-es.uscis.gov', + 'registration.fletc.gov', + 'cbp.dhs.gov', + 'faq.fema.gov', + 'blog.uscis.gov', + 'schoolsafety.gov', + 'preview.cisa.gov', + 'www.fema.org', + 'disasterassistance.gov', + 'niem.gov', + 'tsa.gov', + 'fema.com', + 'cisa.gov', + 'www3.dhs.gov', + 'espfaq.fema.gov', + 'fema.org', + 'oig.dhs.gov', + 'ready.gov', + 'firstresponder.gov', + 'secretservice.gov', + 'www.cisa.gov', + 'filedrop.cisa.gov', + 'listo.gov', + 'www.schoolsafety.gov', + 'www.cyber.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'cyber.gov', + 'scitech.dhs.gov', + 'fleta.gov', + 'firstrespondertraining.gov', + 'staging.cisa.gov', + 'www.globalentry.gov', + 'everify.gov', + 'ice.gov', + 'fletc.gov', + 'cbp.gov', + 'globalentry.gov', + 'www.fema.com', + 'fema.gov', + 'blog.fema.gov', + 'www.cybersecurity.gov', + 'e-verify.gov', + 'floodsmart.gov', + 'www.filedrop.cisa.gov', + 'cybersecurity.gov', + 'uscis.gov', + 'faq.ready.gov', + 'biometrics.gov' + ] + }, + { + names: [ + 'www.fema.org', + 'faq.ready.gov', + 'schoolsafety.gov', + 'tsa.gov', + 'everify.gov', + 'fleta.gov', + 'e-verify.gov', + 'listo.gov', + 'www3.dhs.gov', + 'blog-es.uscis.gov', + 'blog.uscis.gov', + 'blog.fema.gov', + 'registration.fletc.gov', + 'oig.dhs.gov', + 'www.schoolsafety.gov', + 'filedrop.cisa.gov', + 'www.globalentry.gov', + 'niem.gov', + 'disasterassistance.gov', + 'www.fema.com', + 'ready.gov', + 'staging.cisa.gov', + 'uscis.gov', + 'www.cisa.gov', + 'firstresponder.gov', + 'firstrespondertraining.gov', + 'fletc.gov', + 'scitech.dhs.gov', + 'faq.fema.gov', + 'fema.gov', + 'fema.com', + 'preview.cisa.gov', + 'secretservice.gov', + 'cbp.dhs.gov', + 'espfaq.fema.gov', + 'cisa.gov', + 'floodsmart.gov', + 'ice.gov', + 'globalentry.gov', + 'www.filedrop.cisa.gov', + 'readybusiness.gov', + 'cbp.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'fema.org', + 'biometrics.gov' + ] + }, + { + names: [ + 'e-verify.gov', + 'floodsmart.gov', + 'fema.gov', + 'cbp.gov', + 'fema.com', + 'firstrespondertraining.gov', + 'listo.gov', + 'scitech.dhs.gov', + 'firstresponder.gov', + 'blog.fema.gov', + 'fema.org', + 'registration.fletc.gov', + 'blog-es.uscis.gov', + 'www.usss.gov', + 'www.cyber.gov', + 'niem.gov', + 'tsa.gov', + 'oig.dhs.gov', + 'secretservice.gov', + 'ice.gov', + 'cbp.dhs.gov', + 'ready.gov', + 'preview.cisa.gov', + 'usss.gov', + 'faq.fema.gov', + 'fleta.gov', + 'www.filedrop.cisa.gov', + 'www.globalentry.gov', + 'fletc.gov', + 'disasterassistance.gov', + 'cisa.gov', + 'cybersecurity.gov', + 'uscis.gov', + 'www.cisa.gov', + 'schoolsafety.gov', + 'staging.cisa.gov', + 'faq.ready.gov', + 'globalentry.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'cyber.gov', + 'www.cybersecurity.gov', + 'filedrop.cisa.gov', + 'espfaq.fema.gov', + 'readybusiness.gov', + 'biometrics.gov', + 'www3.dhs.gov', + 'www.fema.org', + 'www.fema.com', + 'blog.uscis.gov', + 'everify.gov', + 'www.schoolsafety.gov' + ] + }, + { + names: [ + 'biometrics.cbp.gov', + 'biometrics.gov', + 'blog-es.uscis.gov', + 'blog.fema.gov', + 'blog.uscis.gov', + 'cbp.dhs.gov', + 'cbp.gov', + 'cisa.gov', + 'connect-presidentscup.cisa.gov', + 'cyber.gov', + 'cybersecurity.gov', + 'disasterassistance.gov', + 'e-verify.gov', + 'engine-presidentscup.cisa.gov', + 'espfaq.fema.gov', + 'everify.gov', + 'faq.fema.gov', + 'faq.ready.gov', + 'fema.com', + 'fema.gov', + 'fema.org', + 'filedrop.cisa.gov', + 'files-presidentscup.cisa.gov', + 'firstresponder.gov', + 'firstrespondertraining.gov', + 'fleta.gov', + 'fletc.gov', + 'floodsmart.gov', + 'globalentry.gov', + 'ice.gov', + 'id-presidentscup.cisa.gov', + 'listo.gov', + 'niem.gov', + 'oig.dhs.gov', + 'presidentscup.cisa.gov', + 'preview-biometrics.cbp.gov', + 'preview.cisa.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'ready.gov', + 'readybusiness.gov', + 'registration.fletc.gov', + 'schoolsafety.gov', + 'scitech.dhs.gov', + 'secretservice.gov', + 'solo-presidentscup.cisa.gov', + 'staging.cisa.gov', + 'team-presidentscup.cisa.gov', + 'tsa.gov', + 'us-cert.cisa.gov', + 'uscis.gov', + 'usss.gov', + 'www.biometrics.cbp.gov', + 'www.cisa.gov', + 'www.cyber.gov', + 'www.cybersecurity.gov', + 'www.fema.com', + 'www.fema.org', + 'www.filedrop.cisa.gov', + 'www.globalentry.gov', + 'www.schoolsafety.gov', + 'www.usss.gov', + 'www3.dhs.gov' + ] + }, + { + names: [ + 'solo-presidentscup.cisa.gov', + 'presidentscup.cisa.gov', + 'engine-presidentscup.cisa.gov', + 'connect-presidentscup.cisa.gov', + 'disasterassistance.gov', + 'readybusiness.gov', + 'www3.dhs.gov', + 'www.cisa.gov', + 'niem.gov', + 'preview.cisa.gov', + 'www.cybersecurity.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'blog-es.uscis.gov', + 'cyber.gov', + 'blog.uscis.gov', + 'cybersecurity.gov', + 'filedrop.cisa.gov', + 'www.schoolsafety.gov', + 'usss.gov', + 'cbp.dhs.gov', + 'tsa.gov', + 'ice.gov', + 'scitech.dhs.gov', + 'secretservice.gov', + 'team-presidentscup.cisa.gov', + 'firstresponder.gov', + 'biometrics.gov', + 'fletc.gov', + 'id-presidentscup.cisa.gov', + 'ready.gov', + 'globalentry.gov', + 'www.globalentry.gov', + 'e-verify.gov', + 'staging.cisa.gov', + 'firstrespondertraining.gov', + 'faq.ready.gov', + 'files-presidentscup.cisa.gov', + 'schoolsafety.gov', + 'oig.dhs.gov', + 'cisa.gov', + 'registration.fletc.gov', + 'fema.com', + 'cbp.gov', + 'www.fema.com', + 'fleta.gov', + 'www.filedrop.cisa.gov', + 'floodsmart.gov', + 'www.cyber.gov', + 'blog.fema.gov', + 'www.fema.org', + 'www.usss.gov', + 'fema.gov', + 'espfaq.fema.gov', + 'uscis.gov', + 'everify.gov', + 'listo.gov', + 'fema.org', + 'faq.fema.gov' + ] + }, + { + names: [ + 'biometrics.cbp.gov', + 'biometrics.gov', + 'blog-es.uscis.gov', + 'blog.fema.gov', + 'blog.uscis.gov', + 'cbp.dhs.gov', + 'cbp.gov', + 'cisa.gov', + 'connect-presidentscup.cisa.gov', + 'cyber.gov', + 'cybersecurity.gov', + 'disasterassistance.gov', + 'e-verify.gov', + 'engine-presidentscup.cisa.gov', + 'espfaq.fema.gov', + 'everify.gov', + 'faq.fema.gov', + 'faq.ready.gov', + 'fema.com', + 'fema.gov', + 'fema.org', + 'filedrop.cisa.gov', + 'files-presidentscup.cisa.gov', + 'firstresponder.gov', + 'firstrespondertraining.gov', + 'fleta.gov', + 'fletc.gov', + 'floodsmart.gov', + 'globalentry.gov', + 'ice.gov', + 'id-presidentscup.cisa.gov', + 'listo.gov', + 'niem.gov', + 'oig.dhs.gov', + 'presidentscup.cisa.gov', + 'preview-biometrics.cbp.gov', + 'preview.cisa.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'ready.gov', + 'readybusiness.gov', + 'registration.fletc.gov', + 'schoolsafety.gov', + 'scitech.dhs.gov', + 'secretservice.gov', + 'solo-presidentscup.cisa.gov', + 'staging.cisa.gov', + 'team-presidentscup.cisa.gov', + 'tsa.gov', + 'us-cert.cisa.gov', + 'uscis.gov', + 'usss.gov', + 'www.biometrics.cbp.gov', + 'www.cisa.gov', + 'www.cyber.gov', + 'www.cybersecurity.gov', + 'www.fema.com', + 'www.fema.org', + 'www.filedrop.cisa.gov', + 'www.globalentry.gov', + 'www.schoolsafety.gov', + 'www.usss.gov', + 'www3.dhs.gov' + ] + }, + { + names: [ + 'biometrics.cbp.gov', + 'biometrics.gov', + 'blog-es.uscis.gov', + 'blog.fema.gov', + 'blog.uscis.gov', + 'cbp.dhs.gov', + 'cbp.gov', + 'cisa.gov', + 'connect-presidentscup.cisa.gov', + 'cyber.gov', + 'cybersecurity.gov', + 'disasterassistance.gov', + 'e-verify.gov', + 'engine-presidentscup.cisa.gov', + 'espfaq.fema.gov', + 'everify.gov', + 'faq.fema.gov', + 'faq.ready.gov', + 'fema.com', + 'fema.gov', + 'fema.org', + 'filedrop.cisa.gov', + 'files-presidentscup.cisa.gov', + 'firstresponder.gov', + 'fleta.gov', + 'fletc.gov', + 'floodsmart.gov', + 'globalentry.gov', + 'ice.gov', + 'id-presidentscup.cisa.gov', + 'listo.gov', + 'niem.gov', + 'oig.dhs.gov', + 'presidentscup.cisa.gov', + 'preview-biometrics.cbp.gov', + 'preview.cisa.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'ready.gov', + 'readybusiness.gov', + 'registration.fletc.gov', + 'schoolsafety.gov', + 'scitech.dhs.gov', + 'secretservice.gov', + 'solo-presidentscup.cisa.gov', + 'staging.cisa.gov', + 'team-presidentscup.cisa.gov', + 'tsa.gov', + 'us-cert.cisa.gov', + 'uscis.gov', + 'usss.gov', + 'www.biometrics.cbp.gov', + 'www.cisa.gov', + 'www.cyber.gov', + 'www.cybersecurity.gov', + 'www.fema.com', + 'www.fema.org', + 'www.filedrop.cisa.gov', + 'www.globalentry.gov', + 'www.schoolsafety.gov', + 'www.us-cert.cisa.gov', + 'www.usss.gov', + 'www3.dhs.gov' + ] + }, + { + names: [ + 'biometrics.cbp.gov', + 'biometrics.gov', + 'blog-es.uscis.gov', + 'blog.fema.gov', + 'blog.uscis.gov', + 'cbp.dhs.gov', + 'cbp.gov', + 'cisa.gov', + 'connect-presidentscup.cisa.gov', + 'cyber.gov', + 'cybersecurity.gov', + 'disasterassistance.gov', + 'e-verify.gov', + 'engine-presidentscup.cisa.gov', + 'espfaq.fema.gov', + 'everify.gov', + 'faq.fema.gov', + 'faq.ready.gov', + 'fema.com', + 'fema.gov', + 'fema.org', + 'filedrop.cisa.gov', + 'files-presidentscup.cisa.gov', + 'firstresponder.gov', + 'firstrespondertraining.gov', + 'fleta.gov', + 'fletc.gov', + 'floodsmart.gov', + 'globalentry.gov', + 'ice.gov', + 'id-presidentscup.cisa.gov', + 'listo.gov', + 'niem.gov', + 'oig.dhs.gov', + 'presidentscup.cisa.gov', + 'preview-biometrics.cbp.gov', + 'preview.cisa.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'ready.gov', + 'readybusiness.gov', + 'registration.fletc.gov', + 'schoolsafety.gov', + 'scitech.dhs.gov', + 'secretservice.gov', + 'solo-presidentscup.cisa.gov', + 'staging.cisa.gov', + 'team-presidentscup.cisa.gov', + 'tsa.gov', + 'us-cert.cisa.gov', + 'uscis.gov', + 'usss.gov', + 'www.biometrics.cbp.gov', + 'www.cisa.gov', + 'www.cyber.gov', + 'www.cybersecurity.gov', + 'www.fema.com', + 'www.fema.org', + 'www.filedrop.cisa.gov', + 'www.globalentry.gov', + 'www.schoolsafety.gov', + 'www.us-cert.cisa.gov', + 'www.usss.gov', + 'www3.dhs.gov' + ] + }, + { + names: [ + 'biometrics.cbp.gov', + 'biometrics.gov', + 'blog-es.uscis.gov', + 'blog.fema.gov', + 'blog.uscis.gov', + 'cbp.dhs.gov', + 'cbp.gov', + 'cisa.gov', + 'connect-presidentscup.cisa.gov', + 'cyber.gov', + 'cybersecurity.gov', + 'disasterassistance.gov', + 'e-verify.gov', + 'engine-presidentscup.cisa.gov', + 'espfaq.fema.gov', + 'everify.gov', + 'faq.fema.gov', + 'faq.ready.gov', + 'fema.com', + 'fema.gov', + 'fema.org', + 'filedrop.cisa.gov', + 'files-presidentscup.cisa.gov', + 'firstresponder.gov', + 'firstrespondertraining.gov', + 'fleta.gov', + 'fletc.gov', + 'floodsmart.gov', + 'globalentry.gov', + 'ice.gov', + 'id-presidentscup.cisa.gov', + 'listo.gov', + 'niem.gov', + 'oig.dhs.gov', + 'presidentscup.cisa.gov', + 'preview-biometrics.cbp.gov', + 'preview.cisa.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'ready.gov', + 'readybusiness.gov', + 'registration.fletc.gov', + 'schoolsafety.gov', + 'scitech.dhs.gov', + 'secretservice.gov', + 'solo-presidentscup.cisa.gov', + 'staging.cisa.gov', + 'team-presidentscup.cisa.gov', + 'tsa.gov', + 'us-cert.cisa.gov', + 'uscis.gov', + 'usss.gov', + 'www.biometrics.cbp.gov', + 'www.cisa.gov', + 'www.cyber.gov', + 'www.cybersecurity.gov', + 'www.fema.com', + 'www.fema.org', + 'www.filedrop.cisa.gov', + 'www.globalentry.gov', + 'www.schoolsafety.gov', + 'www.us-cert.cisa.gov', + 'www.usss.gov', + 'www3.dhs.gov' + ] + }, + { + names: [ + 'ice.gov', + 'cybersecurity.gov', + 'connect-presidentscup.cisa.gov', + 'fema.com', + 'www.fema.org', + 'staging.cisa.gov', + 'globalentry.gov', + 'blog.fema.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'fema.org', + 'www.cyber.gov', + 'www.cybersecurity.gov', + 'team-presidentscup.cisa.gov', + 'faq.ready.gov', + 'e-verify.gov', + 'usss.gov', + 'tsa.gov', + 'cbp.dhs.gov', + 'everify.gov', + 'readybusiness.gov', + 'www.schoolsafety.gov', + 'biometrics.gov', + 'blog-es.uscis.gov', + 'scitech.dhs.gov', + 'cbp.gov', + 'blog.uscis.gov', + 'fleta.gov', + 'schoolsafety.gov', + 'www.filedrop.cisa.gov', + 'uscis.gov', + 'secretservice.gov', + 'firstresponder.gov', + 'www3.dhs.gov', + 'www.fema.com', + 'espfaq.fema.gov', + 'fema.gov', + 'registration.fletc.gov', + 'solo-presidentscup.cisa.gov', + 'presidentscup.cisa.gov', + 'id-presidentscup.cisa.gov', + 'www.globalentry.gov', + 'cisa.gov', + 'filedrop.cisa.gov', + 'floodsmart.gov', + 'cyber.gov', + 'listo.gov', + 'preview.cisa.gov', + 'ready.gov', + 'files-presidentscup.cisa.gov', + 'www.cisa.gov', + 'firstrespondertraining.gov', + 'oig.dhs.gov', + 'faq.fema.gov', + 'disasterassistance.gov', + 'niem.gov', + 'www.usss.gov', + 'fletc.gov', + 'engine-presidentscup.cisa.gov' + ] + }, + { + names: [ + 'uscis.gov', + 'www.filedrop.cisa.gov', + 'listo.gov', + 'fema.org', + 'registration.fletc.gov', + 'faq.fema.gov', + 'fema.gov', + 'biometrics.gov', + 'www.schoolsafety.gov', + 'team-presidentscup.cisa.gov', + 'tsa.gov', + 'cybersecurity.gov', + 'faq.ready.gov', + 'niem.gov', + 'readybusiness.gov', + 'floodsmart.gov', + 'espfaq.fema.gov', + 'filedrop.cisa.gov', + 'ice.gov', + 'fleta.gov', + 'connect-presidentscup.cisa.gov', + 'www.usss.gov', + 'www.cyber.gov', + 'blog.uscis.gov', + 'www3.dhs.gov', + 'www.fema.org', + 'firstresponder.gov', + 'secretservice.gov', + 'blog.fema.gov', + 'globalentry.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'cisa.gov', + 'www.cybersecurity.gov', + 'solo-presidentscup.cisa.gov', + 'cbp.dhs.gov', + 'scitech.dhs.gov', + 'cbp.gov', + 'disasterassistance.gov', + 'e-verify.gov', + 'fema.com', + 'oig.dhs.gov', + 'blog-es.uscis.gov', + 'id-presidentscup.cisa.gov', + 'fletc.gov', + 'www.fema.com', + 'everify.gov', + 'engine-presidentscup.cisa.gov', + 'usss.gov', + 'firstrespondertraining.gov', + 'www.globalentry.gov', + 'ready.gov', + 'schoolsafety.gov', + 'presidentscup.cisa.gov', + 'staging.cisa.gov', + 'cyber.gov', + 'files-presidentscup.cisa.gov', + 'preview.cisa.gov', + 'www.cisa.gov' + ] + }, + { + names: [ + 'cisa.gov', + 'cybersecurity.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'oig.dhs.gov', + 'www.usss.gov', + 'scitech.dhs.gov', + 'cbp.gov', + 'blog-es.uscis.gov', + 'fema.gov', + 'schoolsafety.gov', + 'staging.cisa.gov', + 'biometrics.gov', + 'www.cyber.gov', + 'www3.dhs.gov', + 'www.globalentry.gov', + 'blog.fema.gov', + 'www.fema.com', + 'secretservice.gov', + 'registration.fletc.gov', + 'faq.fema.gov', + 'tsa.gov', + 'www.filedrop.cisa.gov', + 'preview.cisa.gov', + 'firstresponder.gov', + 'readybusiness.gov', + 'firstrespondertraining.gov', + 'fleta.gov', + 'www.fema.org', + 'fletc.gov', + 'ready.gov', + 'uscis.gov', + 'filedrop.cisa.gov', + 'disasterassistance.gov', + 'www.schoolsafety.gov', + 'listo.gov', + 'everify.gov', + 'cbp.dhs.gov', + 'fema.org', + 'espfaq.fema.gov', + 'www.cisa.gov', + 'e-verify.gov', + 'faq.ready.gov', + 'usss.gov', + 'ice.gov', + 'niem.gov', + 'floodsmart.gov', + 'globalentry.gov', + 'blog.uscis.gov', + 'cyber.gov', + 'www.cybersecurity.gov', + 'fema.com' + ] + }, + { + names: [ + 'firstrespondertraining.gov', + 'www3.dhs.gov', + 'ready.gov', + 'cisa.gov', + 'globalentry.gov', + 'secretservice.gov', + 'cbp.dhs.gov', + 'espfaq.fema.gov', + 'fema.gov', + 'fema.org', + 'www.cisa.gov', + 'blog-es.uscis.gov', + 'staging.cisa.gov', + 'niem.gov', + 'registration.fletc.gov', + 'faq.fema.gov', + 'public-prod-elis2.uscis.dhs.gov', + 'www.schoolsafety.gov', + 'filedrop.cisa.gov', + 'scitech.dhs.gov', + 'www.fema.com', + 'www.filedrop.cisa.gov', + 'oig.dhs.gov', + 'cbp.gov', + 'preview.cisa.gov', + 'fleta.gov', + 'floodsmart.gov', + 'tsa.gov', + 'www.globalentry.gov', + 'disasterassistance.gov', + 'blog.uscis.gov', + 'firstresponder.gov', + 'listo.gov', + 'faq.ready.gov', + 'ice.gov', + 'fletc.gov', + 'www.fema.org', + 'readybusiness.gov', + 'schoolsafety.gov', + 'biometrics.gov', + 'fema.com', + 'e-verify.gov', + 'everify.gov', + 'blog.fema.gov', + 'uscis.gov' + ] + }, + { + names: [ + 'floodsmart.gov', + 'staging.cisa.gov', + 'www.schoolsafety.gov', + 'faq.ready.gov', + 'uscis.gov', + 'oig.dhs.gov', + 'cisa.gov', + 'secretservice.gov', + 'cbp.dhs.gov', + 'www3.dhs.gov', + 'listo.gov', + 'preview.cisa.gov', + 'fleta.gov', + 'www.fema.com', + 'www.fema.org', + 'schoolsafety.gov', + 'blog-es.uscis.gov', + 'tsa.gov', + 'disasterassistance.gov', + 'fema.org', + 'firstrespondertraining.gov', + 'www.cisa.gov', + 'biometrics.gov', + 'cbp.gov', + 'filedrop.cisa.gov', + 'scitech.dhs.gov', + 'fema.gov', + 'e-verify.gov', + 'everify.gov', + 'blog.fema.gov', + 'www.globalentry.gov', + 'globalentry.gov', + 'registration.fletc.gov', + 'espfaq.fema.gov', + 'fema.com', + 'ice.gov', + 'blog.uscis.gov', + 'ready.gov', + 'www.filedrop.cisa.gov', + 'fletc.gov', + 'readybusiness.gov', + 'firstresponder.gov', + 'faq.fema.gov', + 'niem.gov', + 'public-prod-elis2.uscis.dhs.gov' + ] + } + ], + links: { + next: '', + prev: '' + } + } + }); + + await censys({ + organizationId: 'organizationId', + organizationName: 'organizationName', + scanId: 'ddf56d43-7f87-4139-9a86-b8a1ffde9b9e', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + }); +}); diff --git a/backend/src/tasks/test/censysCertificates.test.ts b/backend/src/tasks/test/censysCertificates.test.ts new file mode 100644 index 00000000..1b786382 --- /dev/null +++ b/backend/src/tasks/test/censysCertificates.test.ts @@ -0,0 +1,559 @@ +import { handler as censysCertificates } from '../censysCertificates'; +import * as zlib from 'zlib'; +import * as nock from 'nock'; +import * as path from 'path'; +import * as fs from 'fs'; +import { connectToDatabase, Domain, Organization, Scan } from '../../models'; + +const RealDate = Date; + +const authHeaders = { + reqheaders: { + Authorization: + 'Basic ' + + Buffer.from( + `${process.env.CENSYS_API_ID}:${process.env.CENSYS_API_SECRET}` + ).toString('base64') + } +}; + +jest.setTimeout(30000); + +describe('censys certificates', () => { + let organization; + let scan; + let connection; + beforeEach(async () => { + connection = await connectToDatabase(); + global.Date.now = jest.fn(() => new Date('2019-04-22T10:20:30Z').getTime()); + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + scan = await Scan.create({ + name: 'censysCertificates', + arguments: {}, + frequency: 999 + }).save(); + await Domain.create({ + name: 'first_file_testdomain1', + ip: '153.126.148.60', + organization + }).save(); + await Domain.create({ + name: 'subdomain.first_file_testdomain2.gov', + ip: '31.134.10.156', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain3.gov', + ip: '153.126.148.61', + organization + }).save(); + await Domain.create({ + name: 'subdomain.first_file_testdomain4.gov', + ip: '85.24.146.152', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain5', + ip: '45.79.207.117', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain6', + ip: '156.249.159.119', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain7', + ip: '221.10.15.220', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain8', + ip: '81.141.166.145', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain9', + ip: '24.65.82.187', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain10', + ip: '52.74.149.117', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain11', + ip: '31.134.10.156', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain12', + ip: '1.1.1.1', + organization + }).save(); + }); + + afterEach(async () => { + global.Date = RealDate; + await connection.close(); + }); + + afterAll(async () => { + nock.cleanAll(); + }); + + const checkDomains = async (organization) => { + const domains = await Domain.find({ + where: { organization }, + relations: ['organization', 'services'] + }); + expect( + domains + .sort((a, b) => a.name.localeCompare(b.name)) + .map((e) => ({ + ...e, + services: e.services.map((s) => ({ + ...s, + id: null, + updatedAt: null, + createdAt: null + })), + organization: null, + id: null, + updatedAt: null, + createdAt: null, + syncedAt: null + })) + ).toMatchSnapshot(); + expect(domains.filter((e) => !e.organization).length).toEqual(0); + }; + + test('basic test', async () => { + nock('https://censys.io', authHeaders) + .get('/api/v1/data/certificates_2018/') + .reply(200, { + results: { + latest: { + details_url: + 'https://censys.io/api/v1/data/certificates_2018/20200719' + } + } + }); + nock('https://censys.io', authHeaders) + .get('/api/v1/data/certificates_2018/20200719') + .reply(200, { + files: { + 'first_file.json.gz': { + file_type: 'json', + compressed_size: 2568162, + compression_type: 'gzip', + compressed_md5_fingerprint: '334183d35efade2336033b38c4c528a6', + download_path: + 'https://data-01.censys.io/snapshots/certificates/20200719/first_file.json.gz' + }, + 'second_file.json.gz': { + file_type: 'json', + compressed_size: 2568162, + compression_type: 'gzip', + compressed_md5_fingerprint: '334183d35efade2336033b38c4c528a6', + download_path: + 'https://data-01.censys.io/snapshots/certificates/20200719/second_file.json.gz' + } + } + }); + const firstFileContents = fs.readFileSync( + path.join(__dirname, '../helpers/__mocks__/censysCertificatesSample.json') + ); + const secondFileContents = JSON.stringify({ + parsed: { + extensions: { + authority_info_access: { + issuer_urls: [ + 'http://crt.comodoca4.com/COMODOECCDomainValidationSecureServerCA2.crt' + ], + ocsp_urls: ['http://ocsp.comodoca4.com'] + }, + authority_key_id: '40096167f0bc83714fde12082c6fd4d42b763d96', + basic_constraints: { + is_ca: false + }, + certificate_policies: [ + { + cps: ['https://secure.comodo.com/CPS'], + id: '1.3.6.1.4.1.6449.1.2.2.7', + user_notice: [] + }, + { + cps: [], + id: '2.23.140.1.2.1', + user_notice: [] + } + ], + crl_distribution_points: [ + 'http://crl.comodoca4.com/COMODOECCDomainValidationSecureServerCA2.crl' + ], + extended_key_usage: { + client_auth: true, + server_auth: true, + unknown: [], + value: [] + }, + key_usage: { + digital_signature: true, + value: '1' + }, + signed_certificate_timestamps: [], + subject_alt_name: { + directory_names: [], + dns_names: [ + 'sni228711.cloudflaressl.com', + '*.cialishintaapteekissa.nu', + '*.diabeticmalesest.ga', + '*.discountasphaltsest.cf', + '*.discountasphaltsest.ga', + '*.discountbreastsurgerysest.ga', + '*.discountcreationssest.cf', + '*.discountcreationssest.ga', + '*.dogsweightsest.cf', + '*.domainnamemdsest.cf', + '*.domainspearsest.ga', + '*.dotofferssest.cf', + '*.downloadworkshopsest.cf', + '*.drivelongsest.ga', + '*.dummycoursessest.cf', + '*.earlyclearancesest.ga', + '*.ebizstudentsest.cf', + '*.egocheckersest.cf', + '*.electronicspatrolsest.ga', + '*.emotionblogsest.cf', + '*.eternalvitaminsest.cf', + '*.eugenetravelagencysest.cf', + '*.euroclassessest.ga', + '*.exhaustcleanersest.cf', + '*.exhaustcleanersest.ga', + '*.factoringratesest.cf', + '*.gan-info.cf', + '*.kanboard.net', + '*.kanboard.org', + '*.kidsmental.cf', + '*.miniflux.net', + '*.quocanhartsit-malay.tk', + '*.taybactravel-cr.tk', + '*.taybactravel-malay.tk', + 'cialishintaapteekissa.nu', + 'diabeticmalesest.ga', + 'discountasphaltsest.cf', + 'discountasphaltsest.ga', + 'discountbreastsurgerysest.ga', + 'discountcreationssest.cf', + 'discountcreationssest.ga', + 'dogsweightsest.cf', + 'domainnamemdsest.cf', + 'domainspearsest.ga', + 'dotofferssest.cf', + 'downloadworkshopsest.cf', + 'drivelongsest.ga', + 'dummycoursessest.cf', + 'earlyclearancesest.ga', + 'ebizstudentsest.cf', + 'egocheckersest.cf', + 'electronicspatrolsest.ga', + 'emotionblogsest.cf', + 'eternalvitaminsest.cf', + 'eugenetravelagencysest.cf', + 'euroclassessest.ga', + 'exhaustcleanersest.cf', + 'exhaustcleanersest.ga', + 'factoringratesest.cf', + 'gan-info.cf', + 'kanboard.net', + 'kanboard.org', + 'kidsmental.cf', + 'miniflux.net', + 'quocanhartsit-malay.tk', + 'taybactravel-cr.tk', + 'taybactravel-malay.tk' + ], + edi_party_names: [], + email_addresses: [], + ip_addresses: [], + other_names: [], + registered_ids: [], + uniform_resource_identifiers: [] + }, + subject_key_id: 'de3659c76fb0c533f364dea33cff62b1550f114e' + }, + fingerprint_md5: 'f3849febffbcc302bff7f1ebe70cf541', + fingerprint_sha1: 'f0c0ccafbd23229304fd96d31bcf80e5e720fa47', + fingerprint_sha256: + '2f593d42bfc72fc72ee0c02616dbc9c6bb0eec4cd05955aa817ee363fc61298a', + issuer: { + common_name: ['COMODO ECC Domain Validation Secure Server CA 2'], + country: ['GB'], + domain_component: [], + email_address: [], + given_name: [], + jurisdiction_country: [], + jurisdiction_locality: [], + jurisdiction_province: [], + locality: ['Salford'], + organization: ['COMODO CA Limited'], + organization_id: [], + organizational_unit: [], + postal_code: [], + province: ['Greater Manchester'], + serial_number: [], + street_address: [], + surname: [] + }, + issuer_dn: + 'C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO ECC Domain Validation Secure Server CA 2', + names: ['first_file_testdomain1'], + redacted: false, + serial_number: '120208144154356728597551522169858315749', + signature: { + self_signed: false, + signature_algorithm: { + name: 'ECDSA-SHA256', + oid: '1.2.840.10045.4.3.2' + }, + valid: false, + value: + 'MEQCIB25v+hk4BJJcgoD5oxv4YcPKmSdeYPW6cWJzrVGAy2tAiBtbLLS1Xrsit3yV5e75Erdd887AaJuZ60es1c509K71A==' + }, + signature_algorithm: { + name: 'ECDSA-SHA256', + oid: '1.2.840.10045.4.3.2' + }, + spki_subject_fingerprint: + 'f4ac87703f7604973bc6b14cbf6fcf4c8897b21593b68932537ddf0b567e027f', + subject: { + common_name: ['sni228711.cloudflaressl.com'], + country: [], + domain_component: [], + email_address: [], + given_name: [], + jurisdiction_country: [], + jurisdiction_locality: [], + jurisdiction_province: [], + locality: [], + organization: [], + organization_id: [], + organizational_unit: [ + 'Domain Control Validated', + 'PositiveSSL Multi-Domain' + ], + postal_code: [], + province: [], + serial_number: [], + street_address: [], + surname: [] + }, + subject_dn: + 'OU=Domain Control Validated, OU=PositiveSSL Multi-Domain, CN=sni228711.cloudflaressl.com', + subject_key_info: { + ecdsa_public_key: { + b: 'WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=', + curve: 'P-256', + gx: 'axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=', + gy: 'T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=', + length: '256', + n: '/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=', + p: '/////wAAAAEAAAAAAAAAAAAAAAD///////////////8=', + pub: 'BK/RnLux41uEKK+IpV0Dz9URFUwMC2cUlhJHvd/GZdKqgibn3YzzeEyiIUwHjnHuEgLRI6DfSFtGHBFYYw0rQsM=', + x: 'r9Gcu7HjW4Qor4ilXQPP1REVTAwLZxSWEke938Zl0qo=', + y: 'gibn3YzzeEyiIUwHjnHuEgLRI6DfSFtGHBFYYw0rQsM=' + }, + fingerprint_sha256: + '67d6dfd2e0d8114b592654cf75ec384ee4b6e3fce8751897eab1b85843d3990c', + key_algorithm: { + name: 'ECDSA' + } + }, + tbs_fingerprint: + '0ee2b5cb0e1d338cbc7a0e4dabe0339109e8a39fbad704367f9c89d604234a2a', + tbs_noct_fingerprint: + '0ee2b5cb0e1d338cbc7a0e4dabe0339109e8a39fbad704367f9c89d604234a2a', + unknown_extensions: [], + validation_level: 'DV', + validity: { + end: '2018-09-25 23:59:59 UTC', + length: '16502399', + start: '2018-03-19 00:00:00 UTC' + }, + version: '3' + }, + precert: false, + raw: 'MIIJnzCCCUagAwIBAgIQWm8/FpnHc6HzjByfs1xV5TAKBggqhkjOPQQDAjCBkjELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxODA2BgNVBAMTL0NPTU9ETyBFQ0MgRG9tYWluIFZhbGlkYXRpb24gU2VjdXJlIFNlcnZlciBDQSAyMB4XDTE4MDMxOTAwMDAwMFoXDTE4MDkyNTIzNTk1OVowbDEhMB8GA1UECxMYRG9tYWluIENvbnRyb2wgVmFsaWRhdGVkMSEwHwYDVQQLExhQb3NpdGl2ZVNTTCBNdWx0aS1Eb21haW4xJDAiBgNVBAMTG3NuaTIyODcxMS5jbG91ZGZsYXJlc3NsLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABK/RnLux41uEKK+IpV0Dz9URFUwMC2cUlhJHvd/GZdKqgibn3YzzeEyiIUwHjnHuEgLRI6DfSFtGHBFYYw0rQsOjggehMIIHnTAfBgNVHSMEGDAWgBRACWFn8LyDcU/eEggsb9TUK3Y9ljAdBgNVHQ4EFgQU3jZZx2+wxTPzZN6jPP9isVUPEU4wDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCME8GA1UdIARIMEYwOgYLKwYBBAGyMQECAgcwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLmNvbS9DUFMwCAYGZ4EMAQIBMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwuY29tb2RvY2E0LmNvbS9DT01PRE9FQ0NEb21haW5WYWxpZGF0aW9uU2VjdXJlU2VydmVyQ0EyLmNybDCBiAYIKwYBBQUHAQEEfDB6MFEGCCsGAQUFBzAChkVodHRwOi8vY3J0LmNvbW9kb2NhNC5jb20vQ09NT0RPRUNDRG9tYWluVmFsaWRhdGlvblNlY3VyZVNlcnZlckNBMi5jcnQwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLmNvbW9kb2NhNC5jb20wggXoBgNVHREEggXfMIIF24Ibc25pMjI4NzExLmNsb3VkZmxhcmVzc2wuY29tghoqLmNpYWxpc2hpbnRhYXB0ZWVraXNzYS5udYIVKi5kaWFiZXRpY21hbGVzZXN0LmdhghgqLmRpc2NvdW50YXNwaGFsdHNlc3QuY2aCGCouZGlzY291bnRhc3BoYWx0c2VzdC5nYYIeKi5kaXNjb3VudGJyZWFzdHN1cmdlcnlzZXN0LmdhghoqLmRpc2NvdW50Y3JlYXRpb25zc2VzdC5jZoIaKi5kaXNjb3VudGNyZWF0aW9uc3Nlc3QuZ2GCEyouZG9nc3dlaWdodHNlc3QuY2aCFSouZG9tYWlubmFtZW1kc2VzdC5jZoIUKi5kb21haW5zcGVhcnNlc3QuZ2GCEiouZG90b2ZmZXJzc2VzdC5jZoIZKi5kb3dubG9hZHdvcmtzaG9wc2VzdC5jZoISKi5kcml2ZWxvbmdzZXN0LmdhghUqLmR1bW15Y291cnNlc3Nlc3QuY2aCFyouZWFybHljbGVhcmFuY2VzZXN0LmdhghQqLmViaXpzdHVkZW50c2VzdC5jZoITKi5lZ29jaGVja2Vyc2VzdC5jZoIaKi5lbGVjdHJvbmljc3BhdHJvbHNlc3QuZ2GCFCouZW1vdGlvbmJsb2dzZXN0LmNmghcqLmV0ZXJuYWx2aXRhbWluc2VzdC5jZoIbKi5ldWdlbmV0cmF2ZWxhZ2VuY3lzZXN0LmNmghQqLmV1cm9jbGFzc2Vzc2VzdC5nYYIXKi5leGhhdXN0Y2xlYW5lcnNlc3QuY2aCFyouZXhoYXVzdGNsZWFuZXJzZXN0LmdhghYqLmZhY3RvcmluZ3JhdGVzZXN0LmNmgg0qLmdhbi1pbmZvLmNmgg4qLmthbmJvYXJkLm5ldIIOKi5rYW5ib2FyZC5vcmeCDyoua2lkc21lbnRhbC5jZoIOKi5taW5pZmx1eC5uZXSCGCoucXVvY2FuaGFydHNpdC1tYWxheS50a4IUKi50YXliYWN0cmF2ZWwtY3IudGuCFyoudGF5YmFjdHJhdmVsLW1hbGF5LnRrghhjaWFsaXNoaW50YWFwdGVla2lzc2EubnWCE2RpYWJldGljbWFsZXNlc3QuZ2GCFmRpc2NvdW50YXNwaGFsdHNlc3QuY2aCFmRpc2NvdW50YXNwaGFsdHNlc3QuZ2GCHGRpc2NvdW50YnJlYXN0c3VyZ2VyeXNlc3QuZ2GCGGRpc2NvdW50Y3JlYXRpb25zc2VzdC5jZoIYZGlzY291bnRjcmVhdGlvbnNzZXN0LmdhghFkb2dzd2VpZ2h0c2VzdC5jZoITZG9tYWlubmFtZW1kc2VzdC5jZoISZG9tYWluc3BlYXJzZXN0LmdhghBkb3RvZmZlcnNzZXN0LmNmghdkb3dubG9hZHdvcmtzaG9wc2VzdC5jZoIQZHJpdmVsb25nc2VzdC5nYYITZHVtbXljb3Vyc2Vzc2VzdC5jZoIVZWFybHljbGVhcmFuY2VzZXN0LmdhghJlYml6c3R1ZGVudHNlc3QuY2aCEWVnb2NoZWNrZXJzZXN0LmNmghhlbGVjdHJvbmljc3BhdHJvbHNlc3QuZ2GCEmVtb3Rpb25ibG9nc2VzdC5jZoIVZXRlcm5hbHZpdGFtaW5zZXN0LmNmghlldWdlbmV0cmF2ZWxhZ2VuY3lzZXN0LmNmghJldXJvY2xhc3Nlc3Nlc3QuZ2GCFWV4aGF1c3RjbGVhbmVyc2VzdC5jZoIVZXhoYXVzdGNsZWFuZXJzZXN0LmdhghRmYWN0b3JpbmdyYXRlc2VzdC5jZoILZ2FuLWluZm8uY2aCDGthbmJvYXJkLm5ldIIMa2FuYm9hcmQub3Jngg1raWRzbWVudGFsLmNmggxtaW5pZmx1eC5uZXSCFnF1b2NhbmhhcnRzaXQtbWFsYXkudGuCEnRheWJhY3RyYXZlbC1jci50a4IVdGF5YmFjdHJhdmVsLW1hbGF5LnRrMAoGCCqGSM49BAMCA0cAMEQCIB25v+hk4BJJcgoD5oxv4YcPKmSdeYPW6cWJzrVGAy2tAiBtbLLS1Xrsit3yV5e75Erdd887AaJuZ60es1c509K71A==' + }); + + nock('https://data-01.censys.io', authHeaders) + .persist() + .get('/snapshots/certificates/20200719/first_file.json.gz') + .reply(200, zlib.gzipSync(firstFileContents)) + .get('/snapshots/certificates/20200719/second_file.json.gz') + .reply(200, zlib.gzipSync(secondFileContents)); + jest.setTimeout(30000); + await censysCertificates({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 0, + numChunks: 1 + }); + + await checkDomains(organization); + }); + + test('http failure triggers retry', async () => { + nock('https://censys.io', authHeaders) + .get('/api/v1/data/certificates_2018/') + .reply(200, { + results: { + latest: { + details_url: + 'https://censys.io/api/v1/data/certificates_2018/20200719' + } + } + }); + nock('https://censys.io', authHeaders) + .get('/api/v1/data/certificates_2018/20200719') + .reply(200, { + files: { + 'failed_file.json.gz': { + file_type: 'json', + compressed_size: 2568162, + compression_type: 'gzip', + compressed_md5_fingerprint: '334183d35efade2336033b38c4c528a6', + download_path: + 'https://data-01.censys.io/snapshots/certificates/20200719/failed_file.json.gz' + } + } + }); + + nock('https://data-01.censys.io') + .get('/snapshots/certificates/20200719/failed_file.json.gz') + .reply(429, 'too many requests'); + + nock('https://data-01.censys.io') + .get('/snapshots/certificates/20200719/failed_file.json.gz') + .reply(200, zlib.gzipSync(JSON.stringify({}))); + + jest.setTimeout(30000); + await censysCertificates({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 0, + numChunks: 1 + }); + + await checkDomains(organization); + }); + + test('repeated http failures throw an error', async () => { + nock('https://censys.io', authHeaders) + .get('/api/v1/data/certificates_2018/') + .reply(200, { + results: { + latest: { + details_url: + 'https://censys.io/api/v1/data/certificates_2018/20200719' + } + } + }); + nock('https://censys.io', authHeaders) + .get('/api/v1/data/certificates_2018/20200719') + .reply(200, { + files: { + 'failed_file_2.json.gz': { + file_type: 'json', + compressed_size: 2568162, + compression_type: 'gzip', + compressed_md5_fingerprint: '334183d35efade2336033b38c4c528a6', + download_path: + 'https://data-01.censys.io/snapshots/certificates/20200719/failed_file_2.json.gz' + } + } + }); + + nock('https://data-01.censys.io') + .persist() + .get('/snapshots/certificates/20200719/failed_file_2.json.gz') + .reply(429, 'too many requests'); + + await expect( + censysCertificates({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 0, + numChunks: 1 + }) + ).rejects.toThrow('Response code 429'); + + await checkDomains(organization); + }); + test('undefined numChunks throws an error', async () => { + await expect( + censysCertificates({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 0 + }) + ).rejects.toThrow('Chunks not specified.'); + }); + test('undefined chunkNumber throws an error', async () => { + await expect( + censysCertificates({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + numChunks: 1 + }) + ).rejects.toThrow('Chunks not specified.'); + }); + test('chunkNumber >= numChunks throws an error', async () => { + await expect( + censysCertificates({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 1, + numChunks: 1 + }) + ).rejects.toThrow('Invalid chunk number.'); + }); + test('chunkNumber > 100 throws an error', async () => { + await expect( + censysCertificates({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 101, + numChunks: 100 + }) + ).rejects.toThrow('Invalid chunk number.'); + }); +}); diff --git a/backend/src/tasks/test/censysIpv4.test.ts b/backend/src/tasks/test/censysIpv4.test.ts new file mode 100644 index 00000000..fd87ad86 --- /dev/null +++ b/backend/src/tasks/test/censysIpv4.test.ts @@ -0,0 +1,389 @@ +import { handler as censysIpv4 } from '../censysIpv4'; +import * as zlib from 'zlib'; +import * as nock from 'nock'; +import * as path from 'path'; +import * as fs from 'fs'; +import { connectToDatabase, Domain, Organization, Scan } from '../../models'; + +const RealDate = Date; + +const authHeaders = { + reqheaders: { + Authorization: + 'Basic ' + + Buffer.from( + `${process.env.CENSYS_API_ID}:${process.env.CENSYS_API_SECRET}` + ).toString('base64') + } +}; + +jest.setTimeout(30000); + +describe('censys ipv4', () => { + let organization; + let scan; + let connection; + beforeEach(async () => { + connection = await connectToDatabase(); + global.Date.now = jest.fn(() => new Date('2019-04-22T10:20:30Z').getTime()); + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + scan = await Scan.create({ + name: 'censysIpv4', + arguments: {}, + frequency: 999 + }).save(); + await Domain.create({ + name: 'first_file_testdomain1', + ip: '153.126.148.60', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain2', + ip: '31.134.10.156', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain3', + ip: '153.126.148.61', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain4', + ip: '85.24.146.152', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain5', + ip: '45.79.207.117', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain6', + ip: '156.249.159.119', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain7', + ip: '221.10.15.220', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain8', + ip: '81.141.166.145', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain9', + ip: '24.65.82.187', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain10', + ip: '52.74.149.117', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain11', + ip: '31.134.10.156', + organization + }).save(); + await Domain.create({ + name: 'first_file_testdomain12', + ip: '1.1.1.1', + organization + }).save(); + }); + + afterEach(async () => { + global.Date = RealDate; + await connection.close(); + }); + + afterAll(async () => { + nock.cleanAll(); + }); + + const checkDomains = async (organization) => { + const domains = await Domain.find({ + where: { organization }, + relations: ['organization', 'services'] + }); + expect( + domains + .sort((a, b) => a.name.localeCompare(b.name)) + .map((e) => ({ + ...e, + services: e.services.map((s) => ({ + ...s, + id: null, + updatedAt: null, + createdAt: null + })), + organization: null, + id: null, + updatedAt: null, + createdAt: null, + syncedAt: null + })) + ).toMatchSnapshot(); + expect(domains.filter((e) => !e.organization).length).toEqual(0); + }; + + test('basic test', async () => { + nock('https://censys.io', authHeaders) + .get('/api/v1/data/ipv4_2018') + .reply(200, { + results: { + latest: { + details_url: 'https://censys.io/api/v1/data/ipv4_2018/20200719' + } + } + }); + nock('https://censys.io', authHeaders) + .get('/api/v1/data/ipv4_2018/20200719') + .reply(200, { + files: { + 'first_file.json.gz': { + file_type: 'json', + compressed_size: 2568162, + compression_type: 'gzip', + compressed_md5_fingerprint: '334183d35efade2336033b38c4c528a6', + download_path: + 'https://data-01.censys.io/snapshots/ipv4/20200719/first_file.json.gz' + }, + 'second_file.json.gz': { + file_type: 'json', + compressed_size: 2568162, + compression_type: 'gzip', + compressed_md5_fingerprint: '334183d35efade2336033b38c4c528a6', + download_path: + 'https://data-01.censys.io/snapshots/ipv4/20200719/second_file.json.gz' + } + } + }); + const firstFileContents = fs.readFileSync( + path.join(__dirname, '../helpers/__mocks__/censysIpv4Sample.json') + ); + const secondFileContents = JSON.stringify({ + address: '1.1.1.1', + ipint: '1319753985', + updated_at: '2020-07-05T15:41:45Z', + ip: '1.1.1.1', + location: { + country_code: 'TR', + continent: 'Asia', + city: 'Akalan', + postal_code: '55400', + timezone: 'Europe/Istanbul', + province: 'Samsun', + latitude: 41.2748, + longitude: 35.7197, + registered_country: 'Turkey', + registered_country_code: 'TR', + country: 'Turkey' + }, + autonomous_system: { + description: 'TTNET', + routed_prefix: '78.169.128.0/17', + asn: '9121', + country_code: 'TR', + name: 'TTNET', + path: ['7018', '3320', '9121'] + }, + ports: ['53', '8080'], + protocols: ['53/dns', '8080/http'], + ipinteger: '31041870', + version: '0', + p53: { + dns: { + lookup: { + errors: false, + open_resolver: false, + questions: [{ name: 'c.afekv.com', type: 'A' }], + resolves_correctly: false, + support: true, + timestamp: '2020-07-05T15:41:45Z' + } + } + }, + p8080: { + http: { + get: { + body: `these characters should not show up in the snapshot: + null: \u0000 + another null: \0 + another null: \\u0000 + ` + } + } + }, + tags: ['dns'] + }); + + nock('https://data-01.censys.io', authHeaders) + .persist() + .get('/snapshots/ipv4/20200719/first_file.json.gz') + .reply(200, zlib.gzipSync(firstFileContents)) + .get('/snapshots/ipv4/20200719/second_file.json.gz') + .reply(200, zlib.gzipSync(secondFileContents)); + await censysIpv4({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 0, + numChunks: 1 + }); + + await checkDomains(organization); + }); + + test('http failure triggers retry', async () => { + nock('https://censys.io', authHeaders) + .get('/api/v1/data/ipv4_2018') + .reply(200, { + results: { + latest: { + details_url: 'https://censys.io/api/v1/data/ipv4_2018/20200719' + } + } + }); + nock('https://censys.io', authHeaders) + .get('/api/v1/data/ipv4_2018/20200719') + .reply(200, { + files: { + 'failed_file.json.gz': { + file_type: 'json', + compressed_size: 2568162, + compression_type: 'gzip', + compressed_md5_fingerprint: '334183d35efade2336033b38c4c528a6', + download_path: + 'https://data-01.censys.io/snapshots/ipv4/20200719/failed_file.json.gz' + } + } + }); + + nock('https://data-01.censys.io') + .get('/snapshots/ipv4/20200719/failed_file.json.gz') + .reply(429, 'too many requests'); + + nock('https://data-01.censys.io') + .get('/snapshots/ipv4/20200719/failed_file.json.gz') + .reply(200, zlib.gzipSync(JSON.stringify({}))); + + jest.setTimeout(30000); + await censysIpv4({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 0, + numChunks: 1 + }); + + await checkDomains(organization); + }); + + test('repeated http failures throw an error', async () => { + nock('https://censys.io', authHeaders) + .get('/api/v1/data/ipv4_2018') + .reply(200, { + results: { + latest: { + details_url: 'https://censys.io/api/v1/data/ipv4_2018/20200719' + } + } + }); + nock('https://censys.io', authHeaders) + .get('/api/v1/data/ipv4_2018/20200719') + .reply(200, { + files: { + 'failed_file_2.json.gz': { + file_type: 'json', + compressed_size: 2568162, + compression_type: 'gzip', + compressed_md5_fingerprint: '334183d35efade2336033b38c4c528a6', + download_path: + 'https://data-01.censys.io/snapshots/ipv4/20200719/failed_file_2.json.gz' + } + } + }); + + nock('https://data-01.censys.io') + .persist() + .get('/snapshots/ipv4/20200719/failed_file_2.json.gz') + .reply(429, 'too many requests'); + + jest.setTimeout(30000); + await expect( + censysIpv4({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 0, + numChunks: 1 + }) + ).rejects.toThrow('Response code 429'); + + await checkDomains(organization); + }); + test('undefined numChunks throws an error', async () => { + await expect( + censysIpv4({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 0 + }) + ).rejects.toThrow('Chunks not specified.'); + }); + test('undefined chunkNumber throws an error', async () => { + await expect( + censysIpv4({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + numChunks: 1 + }) + ).rejects.toThrow('Chunks not specified.'); + }); + test('chunkNumber >= numChunks throws an error', async () => { + await expect( + censysIpv4({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 1, + numChunks: 1 + }) + ).rejects.toThrow('Invalid chunk number.'); + }); + test('chunkNumber > 100 throws an error', async () => { + await expect( + censysIpv4({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 101, + numChunks: 100 + }) + ).rejects.toThrow('Invalid chunk number.'); + }); +}); diff --git a/backend/src/tasks/test/cve-sync.test.ts b/backend/src/tasks/test/cve-sync.test.ts new file mode 100644 index 00000000..dc44ba9c --- /dev/null +++ b/backend/src/tasks/test/cve-sync.test.ts @@ -0,0 +1,118 @@ +import * as nock from 'nock'; +import { connectToDatabase, Cve, Cpe, Scan } from '../../models'; +import { handler as cveSync } from '../cve-sync'; + +const taskResponse = { + task_id: '6c84fb90-12c4-11e1-840d-7b25c5ee775a', + status: 'Processing' +}; +const dataResponse = { + task_id: '6c84fb90-12c4-11e1-840d-7b25c5ee775a', + status: 'Completed', + result: { + total_pages: 1, + current_page: 1, + data: [ + { + cve_uid: 'CVE-0000-0000', + cve_name: 'CVE-0000-0000', + published_date: '2019-01-01T00:00:00.000Z', + last_modified_date: '2019-01-01T00:00:00.000Z', + vuln_status: 'Published', + description: 'test', + cvss_v2_source: 'NVD', + cvss_v2_type: 'CVSSv2', + cvss_v2_version: '2.0', + cvss_v2_vector_string: 'AV:N/AC:L/Au:N/C:P/I:P/A:P', + cvss_v2_base_score: 7.5, + cvss_v2_base_severity: 'High', + cvss_v2_exploitability_score: 10, + cvss_v2_impact_score: 6.4, + cvss_v3_source: 'NVD', + cvss_v3_type: 'CVSSv3', + cvss_v3_version: '3.0', + cvss_v3_vector_string: 'CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H', + cvss_v3_base_score: 9.8, + cvss_v3_base_severity: 'Critical', + cvss_v3_exploitability_score: 3.9, + cvss_v3_impact_score: 5.9, + cvss_v4_source: 'NVD', + cvss_v4_type: 'CVSSv4', + cvss_v4_version: '4.0', + cvss_v4_vector_string: 'CVSS:4.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H', + cvss_v4_base_score: 9.8, + cvss_v4_base_severity: 'Critical', + cvss_v4_exploitability_score: 3.9, + cvss_v4_impact_score: 5.9, + weaknesses: [], + reference_urls: [], + cpe_list: ['cpe:/o:test:test'], + vender_product: { + company: [ + { + cpe_product_name: 'test_os', + version_number: '1.0', + vender: 'testCompany' + } + ] + } + } + ] + } +}; +describe('cve-sync', () => { + let scan; + let connection; + beforeEach(async () => { + connection = await connectToDatabase(); + scan = await Scan.create({ + name: 'cve-sync', + arguments: {}, + frequency: 999 + }).save(); + }); + afterEach(async () => { + await connection.close(); + }); + afterAll(async () => { + nock.cleanAll(); + }); + const checkCVE = async (cveName: string): Promise => { + const cve = await Cve.findOne({ + where: { name: cveName } + }); + expect(cve); + expect(cve?.name).toEqual(cveName); + const id = cve?.id || ''; + expect(id).not.toEqual(''); + return id; + }; + const checkCPE = async (cpeName: string): Promise => { + const cpe = await Cpe.findOne({ + where: { name: cpeName } + }); + expect(cpe?.vendor).toEqual('testCompany'); + const id = cpe?.id || ''; + expect(id).not.toEqual(''); + return id; + }; + + test('baseline', async () => { + nock('https://api.staging-cd.crossfeed.cyber.dhs.gov') //TODO: add pe link + .get( + '/pe/apiv1/cves_by_modified_date/task/6c84fb90-12c4-11e1-840d-7b25c5ee775a' + ) + .reply(200, dataResponse) + .post('/pe/apiv1/cves_by_modified_date') + .reply(200, taskResponse); + await cveSync({ + organizationId: 'GLOBAL SCAN', + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + await checkCVE('CVE-0000-0000'); + await checkCPE('test_os'); + }); +}); diff --git a/backend/src/tasks/test/cve.test.ts b/backend/src/tasks/test/cve.test.ts new file mode 100644 index 00000000..5983dc88 --- /dev/null +++ b/backend/src/tasks/test/cve.test.ts @@ -0,0 +1,936 @@ +import { handler as cve } from '../cve'; +import { + Organization, + Domain, + connectToDatabase, + Service, + Vulnerability +} from '../../models'; +import * as nock from 'nock'; +import * as zlib from 'zlib'; + +const unzipSyncSpy = jest.spyOn(zlib, 'unzipSync'); + +jest.mock('child_process', () => ({ + spawnSync: () => null, + execSync: (cmd, { input }) => { + expect(input).toMatchSnapshot('execSync.input'); + return [ + '0 CVE-2019-10866 cpe:/a:10web:form_maker:1.0.0 9.8 CWE-89', + '0 CVE-2019-11590 cpe:/a:10web:form_maker:1.0.0 8.8 CWE-352' + ].join('\n'); + } +})); + +jest.mock('fs', () => ({ + promises: { + readdir: (str) => ['nvdcve-1.1-2019.json.gz'], + readFile: (str) => '' + } +})); + +jest.setTimeout(30000); + +const RealDate = Date; + +describe('cve', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + unzipSyncSpy.mockImplementation((contents) => + Buffer.from( + JSON.stringify({ + CVE_Items: [ + { + cve: { + CVE_data_meta: { ID: 'CVE-2019-10866' }, + description: { + description_data: [ + { + lang: 'en', + value: 'Test description' + } + ] + }, + references: { + reference_data: [ + { + url: 'https://example.com', + name: 'https://example.com', + refsource: 'CONFIRM', + tags: ['Patch', 'Vendor Advisory'] + } + ] + } + } + } + ] + }) + ) + ); + }); + beforeEach(() => { + global.Date.now = jest.fn(() => new Date('2019-04-22T10:20:30Z').getTime()); + }); + + afterEach(() => { + global.Date = RealDate; + }); + afterAll(async () => { + unzipSyncSpy.mockRestore(); + await connection.close(); + nock.cleanAll(); + }); + test('simple test', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const service = await Service.create({ + domain, + port: 80, + censysMetadata: { + manufacturer: '10web', + product: 'form_maker', + version: '1.0.0' + } + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vulnerabilities = await Vulnerability.find({ + where: { + domain: domain, + service: service + } + }); + expect(vulnerabilities.length).toEqual(2); + for (const vulnerability of vulnerabilities) { + expect(vulnerability).toMatchSnapshot( + { + id: expect.any(String), + createdAt: expect.any(Date), + updatedAt: expect.any(Date), + actions: expect.any(Array) + }, + 'vulnerability' + ); + } + }); + + test('product with cpe with no version in it should create no vulns', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const service = await Service.create({ + domain, + port: 80, + wappalyzerResults: [ + { + technology: { + cpe: 'cpe:/a:10web:form_maker' + }, + version: '' + } + ] + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vulnerabilities = await Vulnerability.find({ + where: { + domain: domain, + service: service + } + }); + expect(vulnerabilities.length).toEqual(0); + }); + + test('product with cpe without version in it', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const service = await Service.create({ + domain, + port: 80, + wappalyzerResults: [ + { + technology: { + cpe: 'cpe:/a:10web:form_maker' + }, + version: '1.0.0' + } + ] + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vulnerabilities = await Vulnerability.find({ + where: { + domain: domain, + service: service + } + }); + expect(vulnerabilities.length).toEqual(2); + expect(vulnerabilities.map((e) => e.cve).sort()).toEqual([ + 'CVE-2019-10866', + 'CVE-2019-11590' + ]); + }); + + test('product with cpe with version in it', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const service = await Service.create({ + domain, + port: 80, + wappalyzerResults: [ + { + technology: { + cpe: 'cpe:/a:10web:form_maker:1.0.0' + }, + version: '1.0.0' + } + ] + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vulnerabilities = await Vulnerability.find({ + where: { + domain: domain, + service: service + } + }); + expect(vulnerabilities.length).toEqual(2); + expect(vulnerabilities.map((e) => e.cve).sort()).toEqual([ + 'CVE-2019-10866', + 'CVE-2019-11590' + ]); + }); + + test('product with exchange cpe with version in it', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const service = await Service.create({ + domain, + port: 80, + wappalyzerResults: [ + { + technology: { + name: 'Microsoft Exchange Server', + categories: [30], + slug: 'microsoft-exchange-server', + icon: 'Microsoft.png', + website: + 'https://www.microsoft.com/en-us/microsoft-365/exchange/email', + cpe: 'cpe:/a:microsoft:exchange_server' + }, + version: '15.2.595' + } + ] + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + }); + + test('product with cpe with trailing colon', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const service = await Service.create({ + domain, + port: 80, + wappalyzerResults: [ + { + technology: { + cpe: 'cpe:/a:10web:form_maker::' + }, + version: '1.0.0' + } + ] + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vulnerabilities = await Vulnerability.find({ + where: { + domain: domain, + service: service + } + }); + expect(vulnerabilities.length).toEqual(2); + expect(vulnerabilities.map((e) => e.cve).sort()).toEqual([ + 'CVE-2019-10866', + 'CVE-2019-11590' + ]); + }); + + const technologies = [ + { + technology: { + cpe: 'cpe:/a:microsoft:internet_information_server' + }, + version: '7.5' + }, + { + technology: { + cpe: 'cpe:/a:microsoft:internet_information_server:8.5' + }, + version: '8.5' + }, + { + technology: { + cpe: 'cpe:/a:microsoft:iis:2.5' + }, + version: '2.5' + } + ]; + for (const technology of technologies) { + test(`product with IIS cpe ${technology.technology.cpe} should include alternate cpes defined in productMap`, async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const service = await Service.create({ + domain, + port: 80, + wappalyzerResults: [technology] + }).save(); + + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + }); + } + + test('should exit if no matching domains with cpes', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vulnerabilities = await Vulnerability.find({ + domain + }); + expect(vulnerabilities.length).toEqual(0); + }); + test('closes old vulnerabilities', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const vulnerability = await Vulnerability.create({ + domain, + cve: 'CVE-123', + lastSeen: new Date( + new Date(Date.now()).setDate(new Date(Date.now()).getDate() - 10) + ), + title: '123', + description: '123' + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vuln = await Vulnerability.findOne({ + id: vulnerability.id + }); + expect(vuln?.state).toEqual('closed'); + expect(vuln?.substate).toEqual('remediated'); + }); + test('does not close new vulnerability', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const vulnerability = await Vulnerability.create({ + domain, + cve: 'CVE-123', + lastSeen: new Date(Date.now()), + title: '123', + description: '123' + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vuln = await Vulnerability.findOne({ + id: vulnerability.id + }); + expect(vuln?.state).toEqual('open'); + expect(vuln?.substate).toEqual('unconfirmed'); + }); + test('reopens remediated vulnerability found again', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const vulnerability = await Vulnerability.create({ + domain, + cve: 'CVE-123', + lastSeen: new Date(Date.now()), + title: '123', + description: '123', + state: 'closed', + substate: 'remediated' + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vuln = await Vulnerability.findOne({ + id: vulnerability.id + }); + expect(vuln?.state).toEqual('open'); + expect(vuln?.substate).toEqual('unconfirmed'); + }); + test('does not reopen false positive vulnerability found again', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const vulnerability = await Vulnerability.create({ + domain, + cve: 'CVE-123', + lastSeen: new Date(Date.now()), + title: '123', + description: '123', + state: 'closed', + substate: 'false-positive' + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vuln = await Vulnerability.findOne({ + id: vulnerability.id + }); + expect(vuln?.state).toEqual('closed'); + expect(vuln?.substate).toEqual('false-positive'); + }); + test('populates vulnerability', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const vulnerability = await Vulnerability.create({ + domain, + cve: 'CVE-2019-10866', + lastSeen: new Date(Date.now()), + title: '123', + needsPopulation: true + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vuln = await Vulnerability.findOne({ + id: vulnerability.id + }); + expect(vuln?.description).toEqual('Test description'); + expect(vuln?.references).toEqual([ + { + url: 'https://example.com', + name: 'https://example.com', + source: 'CONFIRM', + tags: ['Patch', 'Vendor Advisory'] + } + ]); + }); + test('does not populate non-needsPopulation vulnerability', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const vulnerability = await Vulnerability.create({ + domain, + lastSeen: new Date(Date.now()), + title: '123', + needsPopulation: false + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vuln = await Vulnerability.findOne({ + id: vulnerability.id + }); + expect(vuln?.description).toBeFalsy(); + expect(vuln?.references).toEqual([]); + }); + describe('certs', () => { + test('invalid certs', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization, + ssl: { + valid: false + } + }).save(); + const domain2 = await Domain.create({ + name: name + '-2', + organization, + ssl: { + valid: true + } + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vulns = await Vulnerability.find({ + domain: { id: domain.id } + }); + expect(vulns.length).toEqual(1); + expect( + vulns.map((e) => ({ + ...e, + createdAt: !!e.createdAt, + updatedAt: !!e.updatedAt, + lastSeen: !!e.lastSeen, + id: !!e.id + })) + ).toMatchSnapshot(); + + const vulns2 = await Vulnerability.find({ + domain: { id: domain2.id } + }); + expect(vulns2.length).toEqual(0); + }); + test('expiring certs', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization, + ssl: { + validTo: new Date(Date.now()).toISOString() + } + }).save(); + const domain2 = await Domain.create({ + name: name + '-2', + organization, + ssl: { + validTo: '9999-08-23T03:36:57.231Z' + } + }).save(); + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vulns = await Vulnerability.find({ + domain: { id: domain.id } + }); + expect(vulns.length).toEqual(1); + expect( + vulns.map((e) => ({ + ...e, + createdAt: !!e.createdAt, + updatedAt: !!e.updatedAt, + lastSeen: !!e.lastSeen, + id: !!e.id + })) + ).toMatchSnapshot(); + + const vulns2 = await Vulnerability.find({ + domain: { id: domain2.id } + }); + expect(vulns2.length).toEqual(0); + }); + }); + describe('kev', () => { + const kevResponse = { + title: 'CISA Catalog of Known Exploited Vulnerabilities', + catalogVersion: '2022.04.25', + dateReleased: '2022-04-25T15:51:14.1414Z', + count: 2, + vulnerabilities: [ + { + cveID: 'CVE-2021-27104', + vendorProject: 'Accellion', + product: 'FTA', + vulnerabilityName: 'Accellion FTA OS Command Injection Vulnerability', + dateAdded: '2021-11-03', + shortDescription: + 'Accellion FTA 9_12_370 and earlier is affected by OS command execution via a crafted POST request to various admin endpoints.', + requiredAction: 'Apply updates per vendor instructions.', + dueDate: '2021-11-17' + }, + { + cveID: 'CVE-2021-27102', + vendorProject: 'Accellion', + product: 'FTA', + vulnerabilityName: 'Accellion FTA OS Command Injection Vulnerability', + dateAdded: '2021-11-03', + shortDescription: + 'Accellion FTA 9_12_411 and earlier is affected by OS command execution via a local web service call.', + requiredAction: 'Apply updates per vendor instructions.', + dueDate: '2021-11-17' + } + ] + }; + test('should add kev detail', async () => { + nock('https://www.cisa.gov') + .get('/sites/default/files/feeds/known_exploited_vulnerabilities.json') + .reply(200, kevResponse); + + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + let vulnerability = await Vulnerability.create({ + domain, + cve: 'CVE-2021-27104', + lastSeen: new Date( + new Date(Date.now()).setDate(new Date(Date.now()).getDate() - 10) + ), + title: 'CVE-2021-27104', + description: '123' + }).save(); + let vulnerability2 = await Vulnerability.create({ + domain, + cve: 'CVE-2021-27102', + lastSeen: new Date( + new Date(Date.now()).setDate(new Date(Date.now()).getDate() - 10) + ), + title: 'CVE-2021-27102', + description: '123' + }).save(); + + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + vulnerability = (await Vulnerability.findOne({ + id: vulnerability.id + })) as Vulnerability; + vulnerability2 = (await Vulnerability.findOne({ + id: vulnerability2.id + })) as Vulnerability; + + expect(vulnerability.isKev).toEqual(true); + expect(vulnerability2.isKev).toEqual(true); + + expect(vulnerability.kevResults).toEqual(kevResponse.vulnerabilities[0]); + expect(vulnerability2.kevResults).toEqual(kevResponse.vulnerabilities[1]); + }); + test('should not add kev detail to non-kev', async () => { + nock('https://www.cisa.gov') + .get('/sites/default/files/feeds/known_exploited_vulnerabilities.json') + .reply(200, kevResponse); + + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + let vulnerability = await Vulnerability.create({ + domain, + cve: 'CVE-2021-XXXXX', + lastSeen: new Date( + new Date(Date.now()).setDate(new Date(Date.now()).getDate() - 10) + ), + title: 'CVE-2021-XXXXX', + description: '123' + }).save(); + + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + vulnerability = (await Vulnerability.findOne({ + id: vulnerability.id + })) as Vulnerability; + + expect(vulnerability.isKev).toEqual(false); + + expect(vulnerability.kevResults).toEqual({}); + }); + test('should not update existing kev', async () => { + nock('https://www.cisa.gov') + .get('/sites/default/files/feeds/known_exploited_vulnerabilities.json') + .reply(200, kevResponse); + + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + let vulnerability = await Vulnerability.create({ + domain, + cve: 'CVE-2021-27104', + lastSeen: new Date( + new Date(Date.now()).setDate(new Date(Date.now()).getDate() - 10) + ), + title: 'CVE-2021-27104', + description: '123', + isKev: true, + kevResults: {} + }).save(); + + await cve({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + vulnerability = (await Vulnerability.findOne({ + id: vulnerability.id + })) as Vulnerability; + + expect(vulnerability.isKev).toEqual(true); + + expect(vulnerability.kevResults).toEqual({}); + }); + }); + // describe('identify unexpected webpages', () => { + // test('basic test', async () => { + // const organization = await Organization.create({ + // name: 'test-' + Math.random(), + // rootDomains: ['test-' + Math.random()], + // ipBlocks: [], + // isPassive: false + // }).save(); + // const name = 'test-' + Math.random(); + // const domain = await Domain.create({ + // name, + // organization + // }).save(); + // await Webpage.create({ + // domain, + // url: 'http://url-ok', + // status: 200 + // }).save(); + // await Webpage.create({ + // domain, + // url: 'http://url-not-ok', + // status: 500 + // }).save(); + // await Webpage.create({ + // domain, + // url: 'http://url-not-ok-2', + // status: 503 + // }).save(); + // await cve({ + // organizationId: organization.id, + // scanId: 'scanId', + // scanName: 'scanName', + // scanTaskId: 'scanTaskId' + // }); + + // const vulns = await Vulnerability.find({ + // domain: { id: domain.id } + // }); + // expect( + // vulns.map((e) => ({ + // ...e, + // createdAt: !!e.createdAt, + // updatedAt: !!e.updatedAt, + // lastSeen: !!e.lastSeen, + // id: !!e.id + // })) + // ).toMatchSnapshot(); + // }); + // }); +}); diff --git a/backend/src/tasks/test/dnstwist.test.ts b/backend/src/tasks/test/dnstwist.test.ts new file mode 100644 index 00000000..58e4d220 --- /dev/null +++ b/backend/src/tasks/test/dnstwist.test.ts @@ -0,0 +1,327 @@ +import { handler as dnstwist } from '../dnstwist'; +import { + connectToDatabase, + Organization, + Domain, + Scan, + Vulnerability +} from '../../models'; +import { spawnSync } from 'child_process'; + +const RealDate = Date; + +jest.mock('child_process', () => ({ + spawnSync: jest.fn() +})); + +describe('dnstwist', () => { + let scan; + let organization; + const domains: Domain[] = []; + let connection; + beforeAll(async () => { + (spawnSync as jest.Mock).mockImplementation(() => ({ + status: 0, + signal: null, + output: [null, '', ''], + pid: 3, + stdout: `[ + { + "fuzzer": "Homoglyph", + "domain": "test-domain.one", + "dns_a": ["21.22.23.24"] + }, + { + "fuzzer": "Original", + "domain": "test-domain.two", + "dns_a": ["01.02.03.04"], + "dns_mx": ["localhost"] + }, + { + "fuzzer": "tls", + "domain": "test-domain.three", + "dns_a": ["10.11.12.13"], + "dns_ns": ["example.link"] + } + ]`, + stderr: '' + })); + }); + beforeEach(async () => { + connection = await connectToDatabase(); + global.Date.now = jest.fn(() => new Date('2019-04-22T10:20:30Z').getTime()); + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-root-domain'], + ipBlocks: [], + isPassive: false + }).save(); + scan = await Scan.create({ + name: 'dnstwist', + arguments: {}, + frequency: 999 + }).save(); + global.Date.now = jest.fn(() => new Date('2019-04-22T10:20:30Z').getTime()); + jest.mock('../helpers/getIps', () => domains); + }); + + afterEach(() => { + global.Date = RealDate; + jest.unmock('../helpers/getIps'); + connection.close(); + }); + + test('basic test', async () => { + await dnstwist({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + ip: '0.0.0.0', + organization + }).save(); + const vulns = await Vulnerability.find({ + domain: domain + }); + expect(vulns.length).toEqual(0); + }); + + test('creates vulnerability', async () => { + const name = 'test-root-domain'; + const domain = await Domain.create({ + name, + ip: '0.0.0.0', + organization + }).save(); + + await dnstwist({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vuln = await Vulnerability.find({ + domain: domain + }); + + expect(vuln[0].title).toEqual('DNS Twist Domains'); + expect(vuln).toHaveLength(1); + expect(vuln[0].source).toEqual('dnstwist'); + const results = { + domains: [ + { + fuzzer: 'Homoglyph', + domain: 'test-domain.one', + dns_a: ['21.22.23.24'], + date_first_observed: '2019-04-22T10:20:30.000Z' + }, + { + fuzzer: 'Original', + domain: 'test-domain.two', + dns_a: ['01.02.03.04'], + dns_mx: ['localhost'], + date_first_observed: '2019-04-22T10:20:30.000Z' + }, + { + fuzzer: 'tls', + domain: 'test-domain.three', + dns_a: ['10.11.12.13'], + dns_ns: ['example.link'], + date_first_observed: '2019-04-22T10:20:30.000Z' + } + ] + }; + expect(vuln[0].structuredData).toEqual(results); + }); + test('does not run on sub-domains, only roots', async () => { + const name = 'test-root-domain'; + const root_domain = await Domain.create({ + name, + ip: '0.0.0.0', + organization + }).save(); + + const sub_name = 'test-sub-domain'; + const sub_domain = await Domain.create({ + name: sub_name, + ip: '10.20.30.40', + organization + }).save(); + + await dnstwist({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const root_vuln = await Vulnerability.find({ + domain: root_domain + }); + const sub_vuln = await Vulnerability.find({ + domain: sub_domain + }); + expect(sub_vuln).toHaveLength(0); + expect(root_vuln).toHaveLength(1); + expect(root_vuln[0].title).toEqual('DNS Twist Domains'); + expect(root_vuln[0].source).toEqual('dnstwist'); + }); + test('root domain not in the domains table', async () => { + const root_domain_name = 'test-root-domain'; + await dnstwist({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const root_domain = await Domain.findOne({ + name: root_domain_name + }); + const root_vuln = await Vulnerability.find({ + domain: root_domain + }); + expect(root_vuln).toHaveLength(1); + expect(root_vuln[0].title).toEqual('DNS Twist Domains'); + expect(root_vuln[0].source).toEqual('dnstwist'); + }); + test("adds new domains to existing dnstwist vulnerabilty and doesn't update the date of the existing one", async () => { + const name = 'test-root-domain'; + const domain = await Domain.create({ + name, + ip: '0.0.0.0', + organization + }).save(); + //represents the result of an older dnstwist run + await Vulnerability.create({ + source: 'dnstwist', + domain, + title: 'DNS Twist Domains', + structuredData: { + domains: [ + { + fuzzer: 'Homoglyph', + domain: 'test-domain.one', + dns_a: ['21.22.23.24'], + date_first_observed: '2018-04-22T10:20:30.000Z' + } + ] + } + }).save(); + await dnstwist({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vuln = await Vulnerability.find({ + domain: domain + }); + expect(vuln[0].title).toEqual('DNS Twist Domains'); + expect(vuln).toHaveLength(1); + expect(vuln[0].source).toEqual('dnstwist'); + const results = { + domains: [ + { + fuzzer: 'Homoglyph', + domain: 'test-domain.one', + dns_a: ['21.22.23.24'], + date_first_observed: '2018-04-22T10:20:30.000Z' + }, + { + fuzzer: 'Original', + domain: 'test-domain.two', + dns_a: ['01.02.03.04'], + dns_mx: ['localhost'], + date_first_observed: '2019-04-22T10:20:30.000Z' + }, + { + fuzzer: 'tls', + domain: 'test-domain.three', + dns_a: ['10.11.12.13'], + dns_ns: ['example.link'], + date_first_observed: '2019-04-22T10:20:30.000Z' + } + ] + }; + expect(vuln[0].structuredData).toEqual(results); + }); + test('removes dnstwist domain that no longer exists', async () => { + const name = 'test-root-domain'; + const domain = await Domain.create({ + name, + ip: '0.0.0.0', + organization + }).save(); + await Vulnerability.create({ + source: 'dnstwist', + domain, + title: 'DNS Twist Domains', + structuredData: { + domains: [ + { + fuzzer: 'Homoglyph', + domain: 'test-domain.one', + dns_a: ['21.22.23.24'], + date_first_observed: '2018-04-22T10:20:30.000Z' + }, + { + fuzzer: 'Homoglyph', + domain: 'old.test-domain', + dns_a: ['21.22.23.24'], + date_first_observed: '2018-04-22T10:20:30.000Z' + } + ] + } + }).save(); + await dnstwist({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const vuln = await Vulnerability.find({ + domain: domain + }); + expect(vuln[0].title).toEqual('DNS Twist Domains'); + expect(vuln).toHaveLength(1); + expect(vuln[0].source).toEqual('dnstwist'); + const results = { + domains: [ + { + fuzzer: 'Homoglyph', + domain: 'test-domain.one', + dns_a: ['21.22.23.24'], + date_first_observed: '2018-04-22T10:20:30.000Z' + }, + { + fuzzer: 'Original', + domain: 'test-domain.two', + dns_a: ['01.02.03.04'], + dns_mx: ['localhost'], + date_first_observed: '2019-04-22T10:20:30.000Z' + }, + { + fuzzer: 'tls', + domain: 'test-domain.three', + dns_a: ['10.11.12.13'], + dns_ns: ['example.link'], + date_first_observed: '2019-04-22T10:20:30.000Z' + } + ] + }; + expect(vuln[0].structuredData).toEqual(results); + }); +}); diff --git a/backend/src/tasks/test/dotgov.test.ts b/backend/src/tasks/test/dotgov.test.ts new file mode 100644 index 00000000..f173ae1b --- /dev/null +++ b/backend/src/tasks/test/dotgov.test.ts @@ -0,0 +1,233 @@ +import { + handler as dotgov, + DOTGOV_TAG_NAME, + DOTGOV_ORG_SUFFIX, + DOTGOV_LIST_ENDPOINT +} from '../dotgov'; +import * as nock from 'nock'; +import { + connectToDatabase, + Scan, + Organization, + OrganizationTag +} from '../../models'; + +const HOST = 'https://raw.githubusercontent.com'; +const PATH = DOTGOV_LIST_ENDPOINT.replace(HOST, ''); + +describe('dotgov', () => { + let scan; + let connection; + beforeEach(async () => { + connection = await connectToDatabase(); + scan = await Scan.create({ + name: 'dotgov', + arguments: {}, + frequency: 999 + }).save(); + // Clean up any OrganizationTag / Organizations created from earlier tests + await OrganizationTag.delete({ name: DOTGOV_TAG_NAME }); + await Organization.createQueryBuilder('organization') + .where('name like :name', { name: `%${DOTGOV_ORG_SUFFIX}%` }) + .delete() + .execute(); + }); + afterEach(async () => { + await connection.close(); + }); + afterAll(async () => { + nock.cleanAll(); + }); + test('basic test', async () => { + nock(HOST) + .get(PATH) + .reply( + 200, + `Domain Name,Domain Type,Agency,Organization,City,State,Security Contact Email +ACUS.GOV,Federal Agency - Executive,Administrative Conference of the United States,ADMINISTRATIVE CONFERENCE OF THE UNITED STATES,Washington,DC,info@acus.gov +ACHP.GOV,Federal Agency - Executive,Advisory Council on Historic Preservation,ACHP,Washington,DC,domainsecurity@achp.gov +PRESERVEAMERICA.GOV,Federal Agency - Executive,Advisory Council on Historic Preservation,ACHP,Washington,DC,domainsecurity@achp.gov +ABMC.GOV,Federal Agency - Executive,American Battle Monuments Commission,American Battle Monuments Commission,Arlington,VA,itsec@abmc.gov +ABMCSCHOLAR.GOV,Federal Agency - Executive,American Battle Monuments Commission,Office of Chief Information Officer,Arlington,VA,itsec@abmc.gov +NATIONALMALL.GOV,Federal Agency - Executive,American Battle Monuments Commission,Office of Chief Information Officer,Arlington,VA,itsec@abmc.gov +AMTRAKOIG.GOV,Federal Agency - Executive,AMTRAK,Amtrak Office of Inspector General,Washington,DC,(blank) +ARC.GOV,Federal Agency - Executive,Appalachian Regional Commission,ARC,Washington,DC,(blank) +ASC.GOV,Federal Agency - Executive,Appraisal Subcommittee,Appraisal Subcommittee,Washington,DC,(blank) +AFRH.GOV,Federal Agency - Executive,Armed Forces Retirement Home,Armed Forces Retirement Home,Washington,DC,Stanley.Whitehead@afrh.gov +GOLDWATERSCHOLARSHIP.GOV,Federal Agency - Executive,Barry Goldwater Scholarship and Excellence in Education Foundation,Barry Goldwater Scholarship and Excellence in Education Foundation,Alexandria,VA,goldwaterao@goldwaterscholarship.gov` + ); + + await dotgov({ + organizationId: 'organizationId', + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const tag = await OrganizationTag.findOne({ + where: { name: DOTGOV_TAG_NAME } + }); + expect(tag).toBeTruthy(); + + const organizations = await Organization.createQueryBuilder('organization') + .innerJoinAndSelect('organization.tags', 'tags') + .where('tags.id = :tagId', { tagId: tag!.id }) + .getMany(); + expect( + organizations.map((o) => ({ + name: o.name, + rootDomains: o.rootDomains + })) + ).toMatchSnapshot(); + }); + + test('combines root domains together', async () => { + nock(HOST) + .get(PATH) + .reply( + 200, + `Domain Name,Domain Type,Agency,Organization,City,State,Security Contact Email +site1.gov,Federal Agency - Executive,Agency 1,Agency 1,Washington,DC,info@acus.gov +site2.gov,Federal Agency - Executive,Agency 1,Agency 1,Washington,DC,domainsecurity@achp.gov` + ); + + await dotgov({ + organizationId: 'organizationId', + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const tag = await OrganizationTag.findOne({ + where: { name: DOTGOV_TAG_NAME } + }); + expect(tag).toBeTruthy(); + + const organizations = await Organization.createQueryBuilder('organization') + .innerJoinAndSelect('organization.tags', 'tags') + .where('tags.id = :tagId', { tagId: tag!.id }) + .getMany(); + + expect(organizations.length).toEqual(1); + expect(organizations[0].name).toEqual('Agency 1 (dotgov)'); + expect(organizations[0].rootDomains).toEqual(['site1.gov', 'site2.gov']); + }); + + test("doesn't touch existing organizations with the same name but not with the dotgov-tag", async () => { + nock(HOST) + .get(PATH) + .reply( + 200, + `Domain Name,Domain Type,Agency,Organization,City,State,Security Contact Email +site1.gov,Federal Agency - Executive,Agency 1,Agency 1,Washington,DC,info@acus.gov` + ); + + const originalOrganization = await Organization.create({ + name: 'Agency 1', + ipBlocks: [], + isPassive: true, + rootDomains: ['a', 'b', 'c'] + }).save(); + await dotgov({ + organizationId: 'organizationId', + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const tag = await OrganizationTag.findOne({ + where: { name: DOTGOV_TAG_NAME } + }); + expect(tag).toBeTruthy(); + + const organizations = await Organization.createQueryBuilder('organization') + .innerJoinAndSelect('organization.tags', 'tags') + .where('tags.id = :tagId', { tagId: tag!.id }) + .getMany(); + + expect(organizations.length).toEqual(1); + expect(organizations[0].name).toEqual('Agency 1 (dotgov)'); + expect(organizations[0].rootDomains).toEqual(['site1.gov']); + expect(organizations[0].id).not.toEqual(originalOrganization.id); + }); + + test('should use existing tag with DOTGOV_TAG_NAME if it exists', async () => { + nock(HOST) + .get(PATH) + .reply( + 200, + `Domain Name,Domain Type,Agency,Organization,City,State,Security Contact Email +site1.gov,Federal Agency - Executive,Agency 1,Agency 1,Washington,DC,info@acus.gov` + ); + + const originalTag = await OrganizationTag.create({ + name: DOTGOV_TAG_NAME + }).save(); + await dotgov({ + organizationId: 'organizationId', + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const tags = await OrganizationTag.find({ + where: { name: DOTGOV_TAG_NAME } + }); + expect(tags.length).toEqual(1); + const tag = tags[0]; + expect(tag!.id).toEqual(originalTag.id); + + const organizations = await Organization.createQueryBuilder('organization') + .innerJoinAndSelect('organization.tags', 'tags') + .where('tags.id = :tagId', { tagId: tag!.id }) + .getMany(); + + expect(organizations.length).toEqual(1); + expect(organizations[0].name).toEqual('Agency 1 (dotgov)'); + expect(organizations[0].rootDomains).toEqual(['site1.gov']); + }); + + test('updates existing organizations with the same name and with the dotgov-tag -- should replace all rootDomains', async () => { + nock(HOST) + .get(PATH) + .reply( + 200, + `Domain Name,Domain Type,Agency,Organization,City,State,Security Contact Email +site1.gov,Federal Agency - Executive,Agency 1,Agency 1,Washington,DC,info@acus.gov` + ); + + const tag = await OrganizationTag.create({ + name: DOTGOV_TAG_NAME + }).save(); + + const originalOrganization = await Organization.create({ + name: 'Agency 1 (dotgov)', + ipBlocks: [], + tags: [tag], + isPassive: false, + rootDomains: ['a', 'b', 'c'] + }).save(); + await dotgov({ + organizationId: 'organizationId', + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const organizations = await Organization.createQueryBuilder('organization') + .innerJoinAndSelect('organization.tags', 'tags') + .where('tags.id = :tagId', { tagId: tag!.id }) + .getMany(); + + expect(organizations.length).toEqual(1); + expect(organizations[0].name).toEqual('Agency 1 (dotgov)'); + expect(organizations[0].rootDomains).toEqual(['site1.gov']); + expect(organizations[0].id).toEqual(originalOrganization.id); + expect(organizations[0].isPassive).toEqual(false); + }); +}); diff --git a/backend/src/tasks/test/ecs-client.test.ts b/backend/src/tasks/test/ecs-client.test.ts new file mode 100644 index 00000000..0e6a0c9d --- /dev/null +++ b/backend/src/tasks/test/ecs-client.test.ts @@ -0,0 +1,262 @@ +import ECSClient from '../ecs-client'; + +jest.mock('dockerode', () => { + class Dockerode { + listContainers = () => [ + { + Id: '63eaa36a2c7647ddda10f0a69a77ec6fcf19aa34d7c81eb2d0db91054e692da6', + Names: ['/crossfeed_backend_1'], + Image: 'crossfeed_backend', + ImageID: + 'sha256:2549cb8e477fc0999d8ee5f0e3c1a4a1d7300a7f84e550dd3baf5c40a70e089a', + Command: 'docker-entrypoint.sh npx ts-node-dev src/api-dev.ts', + Created: 1598133651, + Ports: [{}], + Labels: { + 'com.docker.compose.config-hash': + 'd91655ed853821d450e1a6be368a02216a73984da23bbd23d957ff5dfae26abd', + 'com.docker.compose.container-number': '1', + 'com.docker.compose.oneoff': 'False', + 'com.docker.compose.project': 'crossfeed', + 'com.docker.compose.project.config_files': 'docker-compose.yml', + 'com.docker.compose.project.working_dir': '/Users/.../crossfeed', + 'com.docker.compose.service': 'backend', + 'com.docker.compose.version': '1.26.2' + }, + State: 'running', + Status: 'Up 3 hours', + HostConfig: { NetworkMode: 'crossfeed_default' }, + NetworkSettings: { Networks: {} }, + Mounts: [] + } + ]; + getContainer = () => ({ + logs: () => `123456782020-08-24T20:43:02.017719500Z (DOCKER LOGS)commandOptions are { +123456782020-08-24T20:43:02.017758400Z organizationId: '174e9a8c-5c09-4194-b04f-b0d50c171bd1', +123456782020-08-24T20:43:02.017832700Z organizationName: 'cisa', +123456782020-08-24T20:43:02.017865500Z scanId: '372164e6-8df8-48d3-90a5-1319487c3ad2', +123456782020-08-24T20:43:02.017877600Z scanName: 'crawl', +123456782020-08-24T20:43:02.017885700Z scanTaskId: '5382406b-fcb1-40e7-8dd7-bac09dbfdac2' +123456782020-08-24T20:43:02.017896900Z } +123456782020-08-24T20:43:02.019558000Z Running crawl on organization cisa` + }); + } + return Dockerode; +}); + +jest.mock('aws-sdk', () => ({ + ECS: jest.fn().mockImplementation(() => ({ + listTasks: (e) => ({ + promise: async () => ({ + taskArns: [ + 'arn:aws:ecs:us-east-1:957221700844:task/crossfeed-staging-worker/dfd16a90-f944-4387-953f-694071ae95b6', + 'arn:aws:ecs:us-east-1:957221700844:task/crossfeed-staging-worker/dfd16a90-f944-4387-953f-694071ae95b7' + ] + }) + }) + })), + CloudWatchLogs: jest.fn().mockImplementation(() => ({ + getLogEvents: (e) => ({ + promise: async () => { + expect(e).toMatchSnapshot(); + return { + $response: { + data: { + events: [ + { + timestamp: 1598447186714, + message: '(ECS LOGS)commandOptions are {', + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447186714, + message: + " organizationId: 'f0143eda-0e95-4748-ba49-a53069b1c738',", + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447186714, + message: " organizationName: 'CISA',", + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447186714, + message: " scanId: 'e7ff7e7a-7391-431e-9b9e-437e823be3c9',", + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447186714, + message: " scanName: 'amass',", + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447186714, + message: + " scanTaskId: 'fef01b7e-2da3-4508-b27a-3d8be8618488'", + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447186714, + message: '}', + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447186715, + message: 'Running amass on organization CISA', + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447186917, + message: '=> DB Connected', + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447187004, + message: 'Running amass with args [', + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447187004, + message: " 'enum',", + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447187004, + message: " '-ip',", + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447187004, + message: " '-active',", + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447187004, + message: " '-d',", + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447187004, + message: " 'cisa.gov',", + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447187004, + message: " '-json',", + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447187004, + message: " '/out-0.6002422193137014.txt'", + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447187004, + message: ']', + ingestionTime: 1598447188176 + }, + { + timestamp: 1598447398914, + message: '=> DB Connected', + ingestionTime: 1598447403181 + }, + { + timestamp: 1598447399308, + message: 'amass created/updated 2 new domains', + ingestionTime: 1598447403181 + }, + { + timestamp: 1598447399308, + message: 'Running amass with args [', + ingestionTime: 1598447403181 + }, + { + timestamp: 1598447399308, + message: " 'enum',", + ingestionTime: 1598447403181 + }, + { + timestamp: 1598447399308, + message: " '-ip',", + ingestionTime: 1598447403181 + }, + { + timestamp: 1598447399308, + message: " '-active',", + ingestionTime: 1598447403181 + }, + { + timestamp: 1598447399308, + message: " '-d',", + ingestionTime: 1598447403181 + }, + { + timestamp: 1598447399308, + message: " 'cyber.dhs.gov',", + ingestionTime: 1598447403181 + }, + { + timestamp: 1598447399308, + message: " '-json',", + ingestionTime: 1598447403181 + }, + { + timestamp: 1598447399308, + message: " '/out-0.6002422193137014.txt'", + ingestionTime: 1598447403181 + }, + { + timestamp: 1598447399308, + message: ']', + ingestionTime: 1598447403181 + }, + { + timestamp: 1598447675114, + message: '=> DB Connected', + ingestionTime: 1598447678181 + }, + { + timestamp: 1598447675463, + message: 'amass created/updated 23 new domains', + ingestionTime: 1598447678181 + } + ], + nextForwardToken: + 'f/35646574323683933005741047986357239768293194069041086465', + nextBackwardToken: + 'b/35646563424217017969097517591536750076621854781830201344' + } + } + }; + } + }) + })) +})); + +describe('getNumTasks', () => { + test('local', async () => { + const client = new ECSClient(true); + expect(await client.getNumTasks()).toEqual(1); + }); + test('not local', async () => { + const client = new ECSClient(false); + expect(await client.getNumTasks()).toEqual(2); + }); +}); + +describe('getLogs', () => { + test('local', async () => { + const client = new ECSClient(true); + const logs = await client.getLogs('testArn'); + expect(logs).toMatchSnapshot(); + expect(logs).toContain('DOCKER LOGS'); + }); + test('not local', async () => { + const client = new ECSClient(false); + const logs = await client.getLogs( + 'arn:aws:ecs:us-east-1:957221700844:task/crossfeed-staging-worker/f59d71c6-3d23-4ee9-ad68-c7b810bf458b' + ); + expect(logs).toMatchSnapshot(); + expect(logs).toContain('ECS LOGS'); + }); +}); diff --git a/backend/src/tasks/test/es-client.test.ts b/backend/src/tasks/test/es-client.test.ts new file mode 100644 index 00000000..7fc9b79b --- /dev/null +++ b/backend/src/tasks/test/es-client.test.ts @@ -0,0 +1,68 @@ +import { connectToDatabase, Domain, Webpage } from '../../models'; +import ESClient from '../es-client'; + +const bulk = jest.fn(() => ({})); +jest.mock('@elastic/elasticsearch', () => { + class Client { + helpers = { + bulk + }; + } + return { Client }; +}); + +let domain; +let webpage; +let connection; + +beforeAll(async () => { + connection = await connectToDatabase(); + domain = Domain.create({ + name: 'first_file_testdomain5', + ip: '45.79.207.117' + }); + webpage = Webpage.create({ + domain, + url: 'https://cisa.gov/123', + status: 200, + updatedAt: new Date('9999-08-23T03:36:57.231Z') + }); +}); + +afterAll(async () => { + await connection.close(); +}); + +describe('updateDomains', () => { + test('test', async () => { + const client = new ESClient(); + await client.updateDomains(Array(1).fill(domain)); + expect(bulk).toBeCalledTimes(1); + expect((bulk.mock.calls[0] as any)[0].datasource.length).toEqual(1); + }); +}); + +describe('updateWebpages', () => { + test('test', async () => { + const client = new ESClient(); + await client.updateWebpages([ + { + webpage_id: 'webpage_id', + webpage_createdAt: new Date('2020-10-17T22:21:17Z'), + webpage_updatedAt: new Date('2020-10-17T22:21:17Z'), + webpage_syncedAt: new Date('2020-10-17T22:21:17Z'), + webpage_lastSeen: new Date('2020-10-17T22:21:17Z'), + webpage_url: 'url', + webpage_status: 200, + webpage_domainId: 'domainId', + webpage_discoveredById: 'webpage_discoveredById', + webpage_responseSize: 5000, + webpage_headers: [{ name: 'a', value: 'b' }], + webpage_body: 'test body' + } + ]); + expect(bulk).toBeCalledTimes(1); + expect((bulk.mock.calls[0] as any)[0].datasource.length).toEqual(1); + expect((bulk.mock.calls[0] as any)[0].datasource).toMatchSnapshot(); + }); +}); diff --git a/backend/src/tasks/test/findomain.test.ts b/backend/src/tasks/test/findomain.test.ts new file mode 100644 index 00000000..3c2757d0 --- /dev/null +++ b/backend/src/tasks/test/findomain.test.ts @@ -0,0 +1,106 @@ +import { handler as findomain } from '../findomain'; +import { connectToDatabase, Organization, Domain, Scan } from '../../models'; +import { readFileSync } from 'fs'; + +jest.mock('child_process', () => ({ + spawnSync: () => null +})); + +jest.mock('fs', () => ({ + readFileSync: jest.fn(), + unlinkSync: () => null +})); + +describe('findomain', () => { + let scan; + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + (readFileSync as jest.Mock).mockImplementation(() => + [ + 'filedrop.cisa.gov,104.84.119.215', + 'www.filedrop.cisa.gov,104.84.119.215' + ].join('\n') + ); + scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + }); + afterAll(async () => { + await connection.close(); + }); + test('should add new domains', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + await findomain({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const domains = ( + await Domain.find({ + where: { organization }, + relations: ['organization', 'discoveredBy'] + }) + ).sort((a, b) => a.name.localeCompare(b.name)); + expect(domains.length).toEqual(2); + expect(domains[0].name).toEqual('filedrop.cisa.gov'); + expect(domains[0].ip).toEqual('104.84.119.215'); + expect(domains[0].organization.id).toEqual(organization.id); + expect(domains[0].discoveredBy.id).toEqual(scan.id); + expect(domains[1].name).toEqual('www.filedrop.cisa.gov'); + expect(domains[1].ip).toEqual('104.84.119.215'); + }); + test('should update existing domains', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const scanOld = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + const domain = await Domain.create({ + organization, + name: 'filedrop.cisa.gov', + discoveredBy: scanOld, + fromRootDomain: 'oldrootdomain.cisa.gov' + }).save(); + await findomain({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + const domains = ( + await Domain.find({ + where: { organization }, + relations: ['discoveredBy'] + }) + ).sort((a, b) => a.name.localeCompare(b.name)); + expect(domains.length).toEqual(2); + expect(domains[0].id).toEqual(domain.id); + expect(domains[0].name).toEqual('filedrop.cisa.gov'); + expect(domains[0].ip).toEqual('104.84.119.215'); + expect(domains[0].discoveredBy.id).toEqual(scanOld.id); + expect(domains[0].fromRootDomain).toEqual('oldrootdomain.cisa.gov'); + expect(domains[1].name).toEqual('www.filedrop.cisa.gov'); + expect(domains[1].ip).toEqual('104.84.119.215'); + expect(domains[1].discoveredBy.id).toEqual(scan.id); + expect(domains[1].fromRootDomain).toEqual(organization.rootDomains[0]); + }); +}); diff --git a/backend/src/tasks/test/helpers/getAllDomains.test.ts b/backend/src/tasks/test/helpers/getAllDomains.test.ts new file mode 100644 index 00000000..b72a1807 --- /dev/null +++ b/backend/src/tasks/test/helpers/getAllDomains.test.ts @@ -0,0 +1,93 @@ +import getAllDomains from '../../helpers/getAllDomains'; +import { Domain, connectToDatabase, Organization } from '../../../models'; + +describe('getAllDomains', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + test('basic test', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = Math.random() + ''; + const ip = Math.random() + ''; + const domain = await Domain.create({ + name, + ip, + organization + }).save(); + const domains = await getAllDomains(); + expect(domains.length).toBeGreaterThan(0); + const domainIndex = domains.map((e) => e.id).indexOf(domain.id); + expect(domains[domainIndex]).toEqual({ + id: domain.id, + name, + ip, + organization: organization + }); + }); + test('providing organizations filters based on that organization', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization3 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = Math.random() + ''; + const ip = Math.random() + ''; + const domain = await Domain.create({ + name, + ip, + organization: organization + }).save(); + const name2 = Math.random() + ''; + const ip2 = Math.random() + ''; + const domain2 = await Domain.create({ + name: name2, + ip: ip2, + organization: organization2 + }).save(); + const name3 = Math.random() + ''; + const ip3 = Math.random() + ''; + const domain3 = await Domain.create({ + name: name3, + ip: ip3, + organization: organization3 + }).save(); + const domains = await getAllDomains([organization.id, organization2.id]); + expect(domains.length).toEqual(2); + const domain1Index = domains.map((e) => e.id).indexOf(domain.id); + expect(domains[domain1Index]).toEqual({ + id: domain.id, + name, + ip, + organization: organization + }); + const domain2Index = domains.map((e) => e.id).indexOf(domain2.id); + expect(domains[domain2Index]).toEqual({ + id: domain2.id, + name: name2, + ip: ip2, + organization: organization2 + }); + }); +}); diff --git a/backend/src/tasks/test/helpers/parseCommandOptions.test.ts b/backend/src/tasks/test/helpers/parseCommandOptions.test.ts new file mode 100644 index 00000000..0c4be14d --- /dev/null +++ b/backend/src/tasks/test/helpers/parseCommandOptions.test.ts @@ -0,0 +1,112 @@ +import sanitizeChunkValues from '../../helpers/sanitizeChunkValues'; +import { CommandOptions } from '../../ecs-client'; +import { connectToDatabase, Organization, Scan } from '../../../models'; +import * as nock from 'nock'; + +const RealDate = Date; + +jest.setTimeout(30000); + +describe('parse command options', () => { + let organization; + let scan; + let connection; + beforeEach(async () => { + connection = await connectToDatabase(); + global.Date.now = jest.fn(() => new Date('2023-08-08T00:00:00Z').getTime()); + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + scan = await Scan.create({ + name: 'testScan', + arguments: {}, + frequency: 999 + }).save(); + }); + afterEach(async () => { + global.Date = RealDate; + await connection.close(); + }); + afterAll(async () => { + nock.cleanAll(); + }); + test('basic test', async () => { + const commandOptions: CommandOptions = { + organizationId: organization.id, + scanName: 'scanName', + scanId: scan.id, + scanTaskId: 'scanTaskId', + chunkNumber: 0, + numChunks: 100 + }; + const sanitizedOptions = await sanitizeChunkValues(commandOptions); + expect(sanitizedOptions).toEqual(commandOptions); + }); + describe('sanitize chunking', () => { + test('numChunks must be defined', async () => { + const commandOptions: CommandOptions = { + organizationId: organization.id, + scanName: 'scanName', + scanId: scan.id, + scanTaskId: 'scanTaskId', + chunkNumber: 0 + }; + await expect(sanitizeChunkValues(commandOptions)).rejects.toThrow( + 'Chunks not specified.' + ); + }); + test('numChunks is capped at 100', async () => { + const commandOptions: CommandOptions = { + organizationId: organization.id, + scanName: 'scanName', + scanId: scan.id, + scanTaskId: 'scanTaskId', + chunkNumber: 0, + numChunks: 101 + }; + const sanitizedOptions = await sanitizeChunkValues(commandOptions); + expect(sanitizedOptions.numChunks).toEqual(100); + }); + test('chunkNumber must be defined', async () => { + const commandOptions: CommandOptions = { + organizationId: organization.id, + scanName: 'scanName', + scanId: scan.id, + scanTaskId: 'scanTaskId', + numChunks: 1 + }; + await expect(sanitizeChunkValues(commandOptions)).rejects.toThrow( + 'Chunks not specified.' + ); + }); + test('chunkNumber must be less than numChunks', async () => { + const commandOptions: CommandOptions = { + organizationId: organization.id, + scanName: 'scanName', + scanId: scan.id, + scanTaskId: 'scanTaskId', + chunkNumber: 1, + numChunks: 1 + }; + await expect(sanitizeChunkValues(commandOptions)).rejects.toThrow( + 'Invalid chunk number.' + ); + }); + test('chunkNumber must be less than 100', async () => { + const commandOptions: CommandOptions = { + organizationId: organization.id, + scanName: 'scanName', + scanId: scan.id, + scanTaskId: 'scanTaskId', + chunkNumber: 100, + numChunks: 100 + }; + await expect(sanitizeChunkValues(commandOptions)).rejects.toThrow( + 'Invalid chunk number.' + ); + }); + }); +}); diff --git a/backend/src/tasks/test/helpers/simple-wappalyzer.test.ts b/backend/src/tasks/test/helpers/simple-wappalyzer.test.ts new file mode 100644 index 00000000..48727375 --- /dev/null +++ b/backend/src/tasks/test/helpers/simple-wappalyzer.test.ts @@ -0,0 +1,30 @@ +import { wappalyzer, technologies } from '../../helpers/simple-wappalyzer'; + +Object.keys(technologies).forEach((technology) => { + if (technologies[technology].examples?.length) { + describe(technology, () => { + technologies[technology].examples.forEach((example, i) => { + test(`example: ${example.name || i + 1}`, () => { + const { + headers = {}, + url = 'https://www.cisa.gov', + html = '' + } = example; + const results = wappalyzer({ + url: url, + data: html, + headers: headers + }); + let version = undefined; + for (const result of results) { + if (version === undefined) { + version = result.version; + } + version = result.version || version; + } + expect(version).toEqual(example.version); + }); + }); + }); + } +}); diff --git a/backend/src/tasks/test/hibp.test.ts b/backend/src/tasks/test/hibp.test.ts new file mode 100644 index 00000000..ddd2b9a9 --- /dev/null +++ b/backend/src/tasks/test/hibp.test.ts @@ -0,0 +1,556 @@ +import { getLiveWebsites, LiveDomain } from '../helpers/getLiveWebsites'; +import { + connectToDatabase, + Domain, + Organization, + Scan, + Service, + Vulnerability +} from '../../models'; +import { CommandOptions } from '../ecs-client'; +import { handler as hibp } from '../hibp'; +import * as nock from 'nock'; + +const RealDate = Date; + +const axios = require('axios'); + +const hibpResponse_1 = { + testEmail_1: ['Breach_1'], + testEmail_2: ['Breach_4'], + testEmail_3: ['Breach_3'], + testEmail_4: ['Breach_4'], + testEmail_5: ['Breach_2'], + testEmail_6: ['Breach_2'], + testEmail_7: ['Breach_5'], + testEmail_8: ['Breach_5'], + testEmail_9: ['Breach_6'] +}; + +const hibpResponse_2 = { testEmail_10: ['Breach_7'] }; + +const hibpResponse_3 = {}; + +const breachResponse = [ + { + Name: 'Breach_1', + Title: 'Breach_1', + Domain: 'Breach_1.com', + BreachDate: '2017-02-01', + AddedDate: '2017-10-26T23:35:45Z', + ModifiedDate: '2017-12-10T21:44:27Z', + PwnCount: 8393093, + Description: 'Mock Breach number 1', + LogoPath: + 'https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_1.png', + DataClasses: ['Email addresses', 'IP addresses', 'Names', 'Passwords'], + IsVerified: true, + IsFabricated: false, + IsSensitive: false, + IsRetired: false, + IsSpamList: false + }, + { + Name: 'Breach_2', + Title: 'Breach_2', + Domain: 'Breach_2.com', + BreachDate: '2020-03-22', + AddedDate: '2020-11-15T00:59:50Z', + ModifiedDate: '2020-11-15T01:07:10Z', + PwnCount: 8661578, + Description: 'Mock Breach number 2', + LogoPath: + 'https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_2.png', + DataClasses: [ + 'Email addresses', + 'IP addresses', + 'Names', + 'Passwords', + 'Phone numbers', + 'Physical addresses', + 'Usernames' + ], + IsVerified: true, + IsFabricated: false, + IsSensitive: false, + IsRetired: false, + IsSpamList: false + }, + { + Name: 'Breach_3', + Title: 'Breach_3', + Domain: 'Breach_3.com', + BreachDate: '2012-01-01', + AddedDate: '2016-10-08T07:46:05Z', + ModifiedDate: '2016-10-08T07:46:05Z', + PwnCount: 6414191, + Description: 'Mock Breach number 3', + LogoPath: + 'https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_3.png', + DataClasses: ['Email addresses', 'Passwords'], + IsVerified: false, + IsFabricated: false, + IsSensitive: false, + IsRetired: false, + IsSpamList: false + }, + { + Name: 'Breach_4', + Title: 'Breach_4', + Domain: 'Breach_4.com', + BreachDate: '2016-04-19', + AddedDate: '2016-07-08T01:55:03Z', + ModifiedDate: '2016-07-08T01:55:03Z', + PwnCount: 4009640, + Description: 'Mock Breach number 4', + LogoPath: + 'https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_4.png', + DataClasses: [ + 'Device information', + 'Email addresses', + 'IP addresses', + 'Passwords', + 'Usernames' + ], + IsVerified: true, + IsFabricated: false, + IsSensitive: false, + IsRetired: false, + IsSpamList: false + }, + { + Name: 'Breach_5', + Title: 'Breach_5', + Domain: 'Breach_5.com', + BreachDate: '2018-02-29', + AddedDate: '2018-07-08T01:55:03Z', + ModifiedDate: '2018-07-08T01:55:03Z', + PwnCount: 389292, + Description: 'Mock Breach number 5', + LogoPath: + 'https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_4.png', + DataClasses: ['Email addresses', 'IP addresses', 'Passwords', 'Usernames'], + IsVerified: true, + IsFabricated: false, + IsSensitive: false, + IsRetired: false, + IsSpamList: false + }, + { + Name: 'Breach_6', + Title: 'Breach_6', + Domain: 'Breach_6.com', + BreachDate: '2017-01-22', + AddedDate: '2017-03-08T01:55:03Z', + ModifiedDate: '2017-03-08T01:55:03Z', + PwnCount: 7829238, + Description: 'Mock Breach number 6', + LogoPath: + 'https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_4.png', + DataClasses: ['Device information', 'Email addresses', 'IP addresses'], + IsVerified: true, + IsFabricated: false, + IsSensitive: false, + IsRetired: false, + IsSpamList: false + }, + { + Name: 'Breach_7', + Title: 'Breach_7', + Domain: 'Breach_7.com', + BreachDate: '2017-01-01', + AddedDate: '2017-10-08T07:46:05Z', + ModifiedDate: '2017-10-08T07:46:05Z', + PwnCount: 3929020, + Description: 'Mock Breach number 7', + LogoPath: + 'https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_3.png', + DataClasses: ['Email addresses', 'Passwords'], + IsVerified: false, + IsFabricated: false, + IsSensitive: false, + IsRetired: false, + IsSpamList: false + } +]; + +describe('hibp', () => { + let organization; + let scan; + let domains: Domain[] = []; + let connection; + beforeEach(async () => { + connection = await connectToDatabase(); + global.Date.now = jest.fn(() => new Date('2019-04-22T10:20:30Z').getTime()); + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + scan = await Scan.create({ + name: 'hibp', + arguments: {}, + frequency: 999 + }).save(); + domains = [ + await Domain.create({ + name: 'test-domain_1.gov', + ip: '', + organization + }).save(), + await Domain.create({ + name: 'test-domain_2.gov', + ip: '', + organization + }).save(), + await Domain.create({ + name: 'test-domain_3.gov', + ip: '', + organization + }).save() + ]; + + jest.mock('../helpers/getIps', () => domains); + }); + + afterEach(async () => { + global.Date = RealDate; + jest.unmock('../helpers/getIps'); + await connection.close(); + }); + afterAll(async () => { + nock.cleanAll(); + }); + const checkDomains = async (organization) => { + const domains = await Domain.find({ + where: { organization }, + relations: ['organization', 'services'] + }); + expect( + domains + .sort((a, b) => a.name.localeCompare(b.name)) + .map((e) => ({ + ...e, + services: e.services.map((s) => ({ + ...s, + id: null, + updatedAt: null, + createdAt: null + })), + organization: null, + id: null, + updatedAt: null, + createdAt: null, + syncedAt: null, + name: null + })) + ).toMatchSnapshot(); + expect(domains.filter((e) => !e.organization).length).toEqual(0); + }; + test('basic test', async () => { + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/enterprisesubscriber/domainsearch/test-domain_1.gov') + .reply(200, hibpResponse_1); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/breaches') + .reply(200, breachResponse); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/enterprisesubscriber/domainsearch/test-domain_2.gov') + .reply(200, hibpResponse_2); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/enterprisesubscriber/domainsearch/test-domain_3.gov') + .reply(200, hibpResponse_3); + await hibp({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + await checkDomains(organization); + }); + test('creates vulnerability', async () => { + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/enterprisesubscriber/domainsearch/test-domain_1.gov') + .reply(200, hibpResponse_1); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/breaches') + .reply(200, breachResponse); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/enterprisesubscriber/domainsearch/test-domain_2.gov') + .reply(200, hibpResponse_2); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/enterprisesubscriber/domainsearch/test-domain_3.gov') + .reply(200, hibpResponse_3); + await hibp({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const domain = await Domain.findOne({ id: domains[0].id }); + const vulns = await Vulnerability.find({ + domain: domain + }); + expect(vulns).toHaveLength(1); + expect(vulns[0].title).toEqual('Exposed Emails'); + expect(vulns[0].source).toEqual('hibp'); + }); + test('updates existing vulnerability', async () => { + const domain = await Domain.findOne({ id: domains[0].id }); + const service = await Service.create({ + domain, + port: 443 + }).save(); + const vulnerability = await Vulnerability.create({ + domain, + cve: null, + lastSeen: new Date(Date.now()), + cpe: null, + title: `Exposed Emails`, + description: '123', + state: 'closed', + structuredData: { + emails: { + testEmail_1: ['Breach_1'], + testEmail_2: ['Breach_2'], + testEmail_3: ['Breach_3'], + testEmail_4: ['Breach_4'] + }, + breaches: { + breach_1: { + Name: 'Breach_1', + Title: 'Breach_1', + Domain: 'Breach_1.com', + BreachDate: '2017-02-01', + AddedDate: '2017-10-26T23:35:45Z', + ModifiedDate: '2017-12-10T21:44:27Z', + PwnCount: 8393093, + Description: 'Mock Breach number 1', + LogoPath: + 'https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_1.png', + DataClasses: [ + 'Email addresses', + 'IP addresses', + 'Names', + 'Passwords' + ], + IsVerified: true, + IsFabricated: false, + IsSensitive: false, + IsRetired: false, + IsSpamList: false + }, + Breach_2: { + Name: 'Breach_2', + Title: 'Breach_2', + Domain: 'Breach_2.com', + BreachDate: '2020-03-22', + AddedDate: '2020-11-15T00:59:50Z', + ModifiedDate: '2020-11-15T01:07:10Z', + PwnCount: 8661578, + Description: 'Mock Breach number 2', + LogoPath: + 'https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_2.png', + DataClasses: [ + 'Email addresses', + 'IP addresses', + 'Names', + 'Passwords', + 'Phone numbers', + 'Physical addresses', + 'Usernames' + ], + IsVerified: true, + IsFabricated: false, + IsSensitive: false, + IsRetired: false, + IsSpamList: false + }, + Breach_3: { + Name: 'Breach_3', + Title: 'Breach_3', + Domain: 'Breach_3.com', + BreachDate: '2012-01-01', + AddedDate: '2016-10-08T07:46:05Z', + ModifiedDate: '2016-10-08T07:46:05Z', + PwnCount: 6414191, + Description: 'Mock Breach number 3', + LogoPath: + 'https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_3.png', + DataClasses: ['Email addresses', 'Passwords'], + IsVerified: false, + IsFabricated: false, + IsSensitive: false, + IsRetired: false, + IsSpamList: false + }, + Breach_4: { + Name: 'Breach_4', + Title: 'Breach_4', + Domain: 'Breach_4.com', + BreachDate: '2016-04-19', + AddedDate: '2016-07-08T01:55:03Z', + ModifiedDate: '2016-07-08T01:55:03Z', + PwnCount: 4009640, + Description: 'Mock Breach number 4', + LogoPath: + 'https://haveibeenpwned.com/Content/Images/PwnedLogos/Breach_4.png', + DataClasses: [ + 'Device information', + 'Email addresses', + 'IP addresses', + 'Passwords', + 'Usernames' + ], + IsVerified: true, + IsFabricated: false, + IsSensitive: false, + IsRetired: false, + IsSpamList: false + } + } + }, + substate: 'remediated', + source: 'hibp' + }).save(); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/enterprisesubscriber/domainsearch/test-domain_1.gov') + .reply(200, hibpResponse_1); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/breaches') + .reply(200, breachResponse); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/enterprisesubscriber/domainsearch/test-domain_2.gov') + .reply(200, hibpResponse_2); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/enterprisesubscriber/domainsearch/test-domain_3.gov') + .reply(200, hibpResponse_3); + await hibp({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const vulns = await Vulnerability.find({ + where: { domain }, + relations: ['service'] + }); + expect(vulns).toHaveLength(1); + + // These fields should stay the same + expect(vulns[0].title).toEqual('Exposed Emails'); + expect(vulns[0].id).toEqual(vulnerability.id); + expect(vulns[0].cpe).toEqual(vulnerability.cpe); + expect(vulns[0].state).toEqual(vulnerability.state); + expect(vulns[0].source).toEqual(vulnerability.source); + + // These fields should be updated + expect( + vulns[0].structuredData['emails']['testEmail_2@test-domain_1.gov'] + ).toEqual(['Breach_4']); + expect(vulns[0].structuredData['breaches']['Breach_1']['PwnCount']).toEqual( + 8393093 + ); + expect(vulns[0].updatedAt).not.toEqual(vulnerability.updatedAt); + }); + test('verify breaches without password are included', async () => { + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/enterprisesubscriber/domainsearch/test-domain_1.gov') + .reply(200, hibpResponse_1); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/breaches') + .reply(200, breachResponse); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/enterprisesubscriber/domainsearch/test-domain_2.gov') + .reply(200, hibpResponse_2); + nock('https://haveibeenpwned.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.HIBP_API_KEY! + } + }) + .get('/api/v2/enterprisesubscriber/domainsearch/test-domain_3.gov') + .reply(200, hibpResponse_3); + await hibp({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const domain = await Domain.findOne({ id: domains[0].id }); + const vulns = await Vulnerability.find({ + domain: domain + }); + expect(vulns).toHaveLength(1); + expect(vulns[0].title).toEqual('Exposed Emails'); + expect(vulns[0].source).toEqual('hibp'); + expect(vulns[0].structuredData['breaches']['Breach_6']).toBeTruthy(); + expect( + vulns[0].structuredData['breaches']['Breach_6'].passwordIncluded + ).toEqual(false); + }); +}); diff --git a/backend/src/tasks/test/intrigue-ident.test.ts b/backend/src/tasks/test/intrigue-ident.test.ts new file mode 100644 index 00000000..db9dcbef --- /dev/null +++ b/backend/src/tasks/test/intrigue-ident.test.ts @@ -0,0 +1,284 @@ +import { handler as intrigueIdent } from '../intrigue-ident'; +import { connectToDatabase, Organization, Service, Domain } from '../../models'; +import { spawnSync } from 'child_process'; + +jest.mock('child_process', () => ({ + spawnSync: jest.fn() +})); + +const mockIntrigueIdentResponse = (response) => { + (spawnSync as jest.Mock).mockImplementation(() => ({ + status: 0, + stderr: '', + stdout: + ` +Fingerprint: +- Bootstrap Bootstrap - boostrap css (CPE: cpe:2.3:a:bootstrap:bootstrap::) (Tags: ["Web Framework"]) (Hide: false) +- Apache HTTP Server - Apache server header w/o version (CPE: cpe:2.3:a:apache:http_server::) (Tags: ["Web Server"]) (Hide: false) +- Apache HTTP Server - Apache web server - server header - no version (CPE: cpe:2.3:a:apache:http_server::) (Tags: ["Web Server"]) (Hide: false) +- Drupal Drupal 8 - Drupal headers (CPE: cpe:2.3:a:drupal:drupal:8:) (Tags: ["CMS"]) (Hide: false) +- NewRelic NewRelic - NewRelic tracking code (CPE: cpe:2.3:s:newrelic:newrelic::) (Tags: ["APM", "Javascript"]) (Hide: false) +` + JSON.stringify(response, null, 2) + })); +}; + +describe('intrigue ident', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + let organization; + beforeEach(async () => { + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + }); + test('basic test', async () => { + mockIntrigueIdentResponse({ + url: 'https://www.cisa.gov/', + fingerprint: [ + { + type: 'fingerprint', + vendor: 'Bootstrap', + product: 'Bootstrap', + version: '', + update: '', + tags: ['Web Framework'], + match_type: 'content_body', + match_details: 'boostrap css', + hide: false, + cpe: 'cpe:2.3:a:bootstrap:bootstrap::', + issue: null, + task: null, + inference: false + }, + { + type: 'fingerprint', + vendor: 'Apache', + product: 'HTTP Server', + version: '', + update: '', + tags: ['Web Server'], + match_type: 'content_headers', + match_details: 'Apache server header w/o version', + hide: false, + cpe: 'cpe:2.3:a:apache:http_server::', + issue: null, + task: null, + inference: false + }, + { + type: 'fingerprint', + vendor: 'Apache', + product: 'HTTP Server', + version: '', + update: '', + tags: ['Web Server'], + match_type: 'content_headers', + match_details: 'Apache web server - server header - no version', + hide: false, + cpe: 'cpe:2.3:a:apache:http_server::', + issue: null, + task: null, + inference: false + }, + { + type: 'fingerprint', + vendor: 'Drupal', + product: 'Drupal', + version: '8', + update: '', + tags: ['CMS'], + match_type: 'content_headers', + match_details: 'Drupal headers', + hide: false, + cpe: 'cpe:2.3:a:drupal:drupal:8:', + issue: null, + task: null, + inference: false + }, + { + type: 'fingerprint', + vendor: 'NewRelic', + product: 'NewRelic', + version: '', + update: '', + tags: ['APM', 'Javascript'], + match_type: 'content_body', + match_details: 'NewRelic tracking code', + hide: false, + cpe: 'cpe:2.3:s:newrelic:newrelic::', + issue: null, + task: null, + inference: null + } + ], + content: [ + { + type: 'content', + name: 'Location Header', + hide: null, + issue: null, + task: null, + result: null + }, + { + type: 'content', + name: 'Directory Listing Detected', + hide: null, + issue: null, + task: null, + result: false + }, + { + type: 'content', + name: 'Form Detected', + hide: false, + issue: false, + task: null, + result: true + }, + { + type: 'content', + name: 'File Upload Form Detected', + hide: null, + issue: null, + task: null, + result: false + }, + { + type: 'content', + name: 'Email Addresses Detected', + hide: false, + issue: false, + task: null, + result: [] + }, + { + type: 'content', + name: 'Authentication - HTTP', + hide: null, + issue: null, + task: null, + result: false + }, + { + type: 'content', + name: 'Authentication - NTLM', + hide: null, + issue: null, + task: null, + result: false + }, + { + type: 'content', + name: 'Authentication - Forms', + hide: null, + issue: null, + task: null, + result: false + }, + { + type: 'content', + name: 'Authentication - Session Identifier', + hide: null, + issue: null, + task: null, + result: false + }, + { + type: 'content', + name: 'Access-Control-Allow-Origin Header', + hide: null, + issue: null, + task: null, + result: false + }, + { + type: 'content', + name: 'P3P Header', + hide: null, + issue: null, + task: null, + result: false + }, + { + type: 'content', + name: 'X-Frame-Options Header', + hide: false, + issue: false, + task: null, + result: true + }, + { + type: 'content', + name: 'X-XSS-Protection Header', + hide: null, + issue: null, + task: null, + result: false + }, + { + type: 'content', + name: 'Google Analytics', + hide: null, + issue: null, + task: null, + result: null + }, + { + type: 'content', + name: 'Google Site Verification', + hide: null, + issue: null, + task: null, + result: null + }, + { + type: 'content', + name: 'MyWebStats', + hide: null, + issue: null, + task: null, + result: null + } + ], + responses: [], + initial_checks: [ + { + url: 'https://www.cisa.gov/', + count: 676 + } + ], + followon_checks: [] + }); + const domain = await Domain.create({ + organization, + name: 'www.cisa.gov', + ip: '0.0.0.0' + }).save(); + let service = await Service.create({ + service: 'https', + port: 443, + domain + }).save(); + await intrigueIdent({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 0, + numChunks: 1 + }); + service = await Service.findOneOrFail(service.id); + expect(service.intrigueIdentResults).toMatchSnapshot(); + expect(service.products).toMatchSnapshot(); + }); +}); diff --git a/backend/src/tasks/test/lookingGlass.test.ts b/backend/src/tasks/test/lookingGlass.test.ts new file mode 100644 index 00000000..95e69b15 --- /dev/null +++ b/backend/src/tasks/test/lookingGlass.test.ts @@ -0,0 +1,794 @@ +import { handler as lookingGlass } from '../lookingGlass'; +import * as nock from 'nock'; +import { + connectToDatabase, + Domain, + Organization, + OrganizationTag, + Scan, + Service, + Vulnerability +} from '../../models'; + +const realDate = Date; +const today = new Date(); + +const lgResponse = { + totaHits: 4, + results: [ + { + firstSeen: today.getTime() - 4.5 * 24 * 60 * 60 * 1000, + lastSeen: today.getTime() - 4 * 24 * 60 * 60 * 1000, + sources: ['Shodan Inferred Vulnerability'], + right: { + ticClassificationScores: [40], + threatId: 'ThreatID_1234', + classifications: ['Vulnerable Service'], + ticScore: 50, + ticCriticality: 50, + ticSourceScore: 50, + ticObsInfluence: 0.5, + ref: { + type: 'threat', + id: 'ThreatID_1234' + }, + threatCategories: ['Vulnerable Service'], + name: 'Vulnerable Product - CiscoWebVPN', + type: 'threat', + threatName: 'Vulnerable Product - CiscoWebVPN' + }, + left: { + collectionIds: [ + 'test_collection_id_1', + 'test_collection_id_2', + '].`test_collection_id_3' + ], + classifications: ['Vulnerable Service'], + ticScore: 50, + owners: ['owner1', 'owner2', 'owner3'], + ref: { + type: 'ipv4', + id: 1234567 + }, + name: '123.123.123.123', + type: 'ipv4', + threatNames: ['Vulnerable Product - CiscoWebVPN'], + locations: [ + { + city: 'testland', + country: 'USA', + region: 'FL', + geoPoint: { + lon: -55.55, + lat: 55.55 + }, + countryName: 'United States', + sources: ['Test_Source'], + country2Digit: 'US', + lastSeen: 1620892865376 + } + ], + ipv4: 123456789, + asns: [1234], + threatIds: ['ThreatID_1234'], + cidrv4s: ['123.123.12.0/12', '123.123.0.0/12', '123.0.0.0/1'] + }, + ref: { + type: 'associated-with', + right: { + type: 'threat', + id: 'ThreatID_1234' + }, + left: { + type: 'ipv4', + id: 123456789 + } + } + }, + { + firstSeen: today.getTime() - 13 * 24 * 60 * 60 * 1000, + lastSeen: today.getTime() - 10 * 24 * 60 * 60 * 1000, + sources: ['Shodan Inferred Vulnerability'], + right: { + ticClassificationScores: [40], + threatId: 'ThreatID_1234', + classifications: ['Vulnerable Service'], + ticScore: 50, + ticCriticality: 50, + ticSourceScore: 50, + ticObsInfluence: 0.5, + ref: { + type: 'threat', + id: 'ThreatID_1234' + }, + threatCategories: ['Vulnerable Service'], + name: 'Vulnerable Product - CiscoWebVPN', + type: 'threat', + threatName: 'Vulnerable Product - CiscoWebVPN' + }, + left: { + collectionIds: [ + 'test_collection_id_1', + 'test_collection_id_2', + '].`test_collection_id_3' + ], + classifications: ['Vulnerable Service'], + ticScore: 50, + owners: ['owner1', 'owner2', 'owner3'], + ref: { + type: 'ipv4', + id: 1234567 + }, + name: '123.123.123.123', + type: 'ipv4', + threatNames: ['Vulnerable Product - CiscoWebVPN'], + locations: [ + { + city: 'testland', + country: 'USA', + region: 'FL', + geoPoint: { + lon: -55.55, + lat: 55.55 + }, + countryName: 'United States', + sources: ['Test_Source'], + country2Digit: 'US', + lastSeen: 1620892865376 + } + ], + ipv4: 123456789, + asns: [1234], + threatIds: ['ThreatID_1234'], + cidrv4s: ['123.123.12.0/12', '123.123.0.0/12', '123.0.0.0/1'] + }, + ref: { + type: 'associated-with', + right: { + type: 'threat', + id: 'ThreatID_1234' + }, + left: { + type: 'ipv4', + id: 123456789 + } + } + }, + { + firstSeen: today.getTime() - 17 * 24 * 60 * 60 * 1000, + lastSeen: today.getTime() - 10 * 24 * 60 * 60 * 1000, + sources: ['Shodan Inferred Vulnerability'], + right: { + ticClassificationScores: [50], + threatId: 'ThreatID_1234', + classifications: ['Vulnerable Service'], + ticScore: 50, + ticCriticality: 50, + ticSourceScore: 50, + ticObsInfluence: 0.5, + ref: { + type: 'threat', + id: 'ThreatID_1234' + }, + threatCategories: ['Vulnerable Service'], + name: 'Scary Malware', + type: 'threat', + threatName: 'Scary Malware' + }, + left: { + collectionIds: [ + 'test_collection_id_1', + 'test_collection_id_5', + '].`test_collection_id_4' + ], + classifications: ['Vulnerable Service'], + ticScore: 50, + owners: ['owner1', 'owner2', 'owner3'], + ref: { + type: 'ipv4', + id: 1234567 + }, + name: '100.123.100.123', + type: 'ipv4', + threatNames: ['Vulnerable Product - CiscoWebVPN'], + locations: [ + { + city: 'testland', + country: 'USA', + region: 'TX', + geoPoint: { + lon: -55.55, + lat: 55.55 + }, + countryName: 'United States', + sources: ['Test_Source'], + country2Digit: 'US', + lastSeen: 1620892865376 + } + ], + ipv4: 123456789, + asns: [1245], + threatIds: ['ThreatID_1234'], + cidrv4s: ['123.123.123/1', '123.123.123/2', '123.123.123/3'] + }, + ref: { + type: 'associated-with', + right: { + type: 'threat', + id: 'ThreatID_1234' + }, + left: { + type: 'ipv4', + id: 98765432 + } + } + }, + { + firstSeen: today.getTime() - 8 * 24 * 60 * 60 * 1000, + lastSeen: today.getTime() - 5 * 24 * 60 * 60 * 1000, + sources: ['Shodan Inferred Vulnerability'], + right: { + ticClassificationScores: [50], + threatId: 'ThreatID_1234', + classifications: ['Bot'], + ticScore: 50, + ticCriticality: 50, + ticSourceScore: 50, + ticObsInfluence: 0.5, + ref: { + type: 'threat', + id: 'ThreatID_1234' + }, + threatCategories: ['Spamming Activity'], + name: 'Scary Malware', + type: 'threat', + threatName: 'Scary Malware' + }, + left: { + collectionIds: [ + 'test_collection_id_1', + 'test_collection_id_5', + '].`test_collection_id_4' + ], + classifications: ['Bot'], + ticScore: 50, + owners: ['owner1', 'owner2', 'owner3'], + ref: { + type: 'ipv4', + id: 86421357 + }, + name: '100.123.100.123', + type: 'ipv4', + threatNames: ['Gumblar Infection'], + locations: [ + { + city: 'testland', + country: 'USA', + region: 'UT', + geoPoint: { + lon: -55.55, + lat: 55.55 + }, + countryName: 'United States', + sources: ['Source3'], + country2Digit: 'US', + lastSeen: 1620892865376 + } + ], + ipv4: 123459543, + asns: [1357], + threatIds: ['ThreatID_1234'], + cidrv4s: ['123.123.12.0/12', '123.123.0.0/12', '123.0.0.0/1'] + }, + ref: { + type: 'associated-with', + right: { + type: 'threat', + id: 'ThreatID_1234' + }, + left: { + type: 'ipv4', + id: 86421357 + } + } + }, + { + firstSeen: today.getTime() - 9 * 24 * 60 * 60 * 1000, + lastSeen: today.getTime() - 7 * 24 * 60 * 60 * 1000, + sources: ['Shodan Inferred Vulnerability'], + right: { + ticClassificationScores: [50], + threatId: 'ThreatID_1234', + classifications: ['Vulnerable Service'], + ticScore: 50, + ticCriticality: 50, + ticSourceScore: 50, + ticObsInfluence: 0.5, + ref: { + type: 'threat', + id: 'ThreatID_1234' + }, + threatCategories: ['Vulnerable Service'], + name: 'Vulnerable Product - CiscoWebVPN', + type: 'threat', + threatName: 'Vulnerable Product - CiscoWebVPN' + }, + left: { + collectionIds: [ + 'test_collection_id_1', + 'test_collection_id_5', + '].`test_collection_id_4' + ], + classifications: ['Vulnerable Service'], + ticScore: 50, + owners: ['owner1', 'owner2', 'owner3'], + ref: { + type: 'ipv4', + id: 1234509876 + }, + name: '1.123.135.123', + type: 'ipv4', + threatNames: ['Vulnerable Product - CiscoWebVPN'], + locations: [ + { + city: 'testland', + country: 'USA', + region: 'CO', + geoPoint: { + lon: -55.55, + lat: 55.55 + }, + countryName: 'United States', + sources: ['Source4'], + country2Digit: 'US', + lastSeen: 1620892865376 + } + ], + ipv4: 135798642, + asns: [4321], + threatIds: ['ThreatID_1234'], + cidrv4s: ['123.123.12.0/12', '123.123.0.0/12', '123.0.0.0/1'] + }, + ref: { + type: 'associated-with', + right: { + type: 'threat', + id: 'ThreatID_1234' + }, + left: { + type: 'ipv4', + id: 1234509876 + } + } + } + ] +}; +let orgName; +let orgResponse; + +describe('lookingGlass', () => { + let organization; + let tag1; + let tag2; + let scan; + let domains: Domain[] = []; + let connection; + beforeEach(async () => { + orgName = 'Collection-' + Math.random(); + orgResponse = [ + { + children: [], + createdAt: '2020-05-19T19:09:07.445Z', + createdBy: 'Created_By_ID_1', + id: 'Collection_Id_1', + name: orgName, + ticScore: 50, + updatedAt: '2020-05-19T19:09:07.445Z', + updatedBy: '>&,Mx}mU_XG;3ns1Bw}:q+Khu' + }, + { + description: '', + children: [], + ticScore: 50, + updatedAt: '2020-09-01T13:58:14.163Z', + createdBy: 'Created_By_ID_2', + name: 'Collection_2', + createdAt: '2020-05-19T19:09:26.620Z', + updatedBy: '>&,Mx}mU_XG;3ns1Bw}:q+Khu', + id: 'Collection_Id_2' + } + ]; + connection = await connectToDatabase(); + global.Date.now = jest.fn(() => new Date('2019-04-22T10:20:30Z').getTime()); + tag1 = await OrganizationTag.create({ + name: 'P&E' + }).save; + tag2 = await OrganizationTag.create({ + name: 'TestOrgID' + }).save; + organization = await Organization.create({ + name: orgName, + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + tags: [tag1, tag2] + }).save(); + scan = await Scan.create({ + name: 'lookingGlass', + arguments: {}, + frequency: 999 + }).save(); + domains = [ + await Domain.create({ + name: '1.123.135.123', + ip: '1.123.135.123', + organization + }).save(), + await Domain.create({ + name: '100.123.100.123', + ip: '100.123.100.123', + organization + }).save(), + await Domain.create({ + name: '123.123.123.123', + ip: '123.123.123.123', + organization + }).save() + ]; + + jest.mock('../helpers/getIps', () => domains); + }); + + afterEach(async () => { + global.Date = realDate; + jest.unmock('../helpers/getIps'); + await connection.close(); + }); + afterAll(async () => { + nock.cleanAll(); + }); + const checkDomains = async (organization) => { + const domains = await Domain.find({ + where: { organization }, + relations: ['organization', 'services'] + }); + expect( + domains + .sort((a, b) => a.name.localeCompare(b.name)) + .map((e) => ({ + ...e, + services: e.services.map((s) => ({ + ...s, + id: null, + updatedAt: null, + createdAt: null + })), + organization: null, + id: null, + updatedAt: null, + createdAt: null, + syncedAt: null, + name: null + })) + ).toMatchSnapshot(); + expect(domains.filter((e) => !e.organization).length).toEqual(0); + }; + test('basic test', async () => { + nock('https://delta.lookingglasscyber.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.LG_API_KEY + } + }) + .get( + '/api/v1/workspaces/' + + encodeURIComponent(process.env.LG_WORKSPACE_NAME!) + + '/collections' + ) + .reply(200, orgResponse); + + nock('https://delta.lookingglasscyber.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.LG_API_KEY + } + }) + .post('/api/graph/query', { + period: 'all', + query: [ + 'and', + ['=', 'type', ['associated-with']], + ['or', ['=', 'right.type', 'threat'], ['=', 'left.type', 'ipv4']], + ['=', 'left.collectionIds', 'Collection_Id_1'] + ], + fields: ['firstSeen', 'lastSeen', 'sources', 'right', 'left'], + limit: 100000, + workspaceIds: [] + }) + .reply(200, lgResponse); + await lookingGlass({ + organizationId: organization.id, + organizationName: orgName, + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + await checkDomains(organization); + }); + + test('creates vulnerability', async () => { + nock('https://delta.lookingglasscyber.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.LG_API_KEY + } + }) + .get( + '/api/v1/workspaces/' + + encodeURIComponent(process.env.LG_WORKSPACE_NAME!) + + '/collections' + ) + .reply(200, orgResponse); + + nock('https://delta.lookingglasscyber.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.LG_API_KEY + } + }) + .post('/api/graph/query', { + period: 'all', + query: [ + 'and', + ['=', 'type', ['associated-with']], + ['or', ['=', 'right.type', 'threat'], ['=', 'left.type', 'ipv4']], + ['=', 'left.collectionIds', 'Collection_Id_1'] + ], + fields: ['firstSeen', 'lastSeen', 'sources', 'right', 'left'], + limit: 100000, + workspaceIds: [] + }) + .reply(200, lgResponse); + await lookingGlass({ + organizationId: organization.id, + organizationName: orgName, + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const domain = await Domain.findOne({ id: domains[0].id }); + const vulns = await Vulnerability.find({ + domain: domain + }); + expect(vulns).toHaveLength(1); + expect(vulns[0].title).toEqual('Looking Glass Data'); + expect(vulns[0].source).toEqual('lookingGlass'); + }); + + test('updates existing vulnerability', async () => { + const domain = await Domain.findOne({ id: domains[0].id }); + const vulnerability = await Vulnerability.create({ + domain, + cve: null, + lastSeen: new Date(Date.now()), + cpe: null, + title: `Looking Glass Data`, + description: '123', + state: 'closed', + structuredData: { + lookingGlassData: [ + { + firstSeen: today.getTime() - 25 * 24 * 60 * 60 * 1000, + lastSeen: today.getTime() - 15 * 24 * 60 * 60 * 1000, + sources: ['Shodan Inferred Vulnerability'], + ref_type: 'associated-with', + ref_right_type: 'threat', + ref_right_id: 'ThreatID_1234', + ref_left_type: 'ipv4', + ref_left_id: 1234509876, + + right_ticScore: 50, + right_classifications: ['Vulnerable Service'], + right_name: 'test_name', + + left_type: 'ipv4', + left_ticScore: 50, + left_name: '1.123.135.123', + vulnOrMal: 'Vulnerable Service' + } + ] + }, + substate: 'remediated', + source: 'lookingGlass' + }).save(); + nock('https://delta.lookingglasscyber.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.LG_API_KEY + } + }) + .get( + '/api/v1/workspaces/' + + encodeURIComponent(process.env.LG_WORKSPACE_NAME!) + + '/collections' + ) + .reply(200, orgResponse); + + nock('https://delta.lookingglasscyber.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.LG_API_KEY + } + }) + .post('/api/graph/query', { + period: 'all', + query: [ + 'and', + ['=', 'type', ['associated-with']], + ['or', ['=', 'right.type', 'threat'], ['=', 'left.type', 'ipv4']], + ['=', 'left.collectionIds', 'Collection_Id_1'] + ], + fields: ['firstSeen', 'lastSeen', 'sources', 'right', 'left'], + limit: 100000, + workspaceIds: [] + }) + .reply(200, lgResponse); + await lookingGlass({ + organizationId: organization.id, + organizationName: orgName, + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const vulns = await Vulnerability.find({ + where: { domain } + }); + expect(vulns).toHaveLength(1); + + // These fields should stay the same + expect(vulns[0].title).toEqual('Looking Glass Data'); + expect(vulns[0].id).toEqual(vulnerability.id); + expect(vulns[0].cpe).toEqual(vulnerability.cpe); + expect(vulns[0].source).toEqual(vulnerability.source); + // These fields should be updated + expect(vulns[0].state).toEqual(vulnerability.state); + expect( + new Date(vulns[0].structuredData['lookingGlassData'][0].lastSeen) + ).toEqual(new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000)); + expect(vulns[0].structuredData['lookingGlassData'][0].right_name).toEqual( + 'Vulnerable Product - CiscoWebVPN' + ); + expect(vulns[0].updatedAt).not.toEqual(vulnerability.updatedAt); + }); + + test('Merge duplicates successfully', async () => { + const domain = await Domain.findOne({ id: domains[1].id }); + const vulnerability = await Vulnerability.create({ + domain, + cve: null, + lastSeen: new Date(Date.now()), + cpe: null, + title: `Looking Glass Data`, + description: '123', + state: 'closed', + structuredData: { + lookingGlassData: [ + { + firstSeen: today.getTime() - 25 * 24 * 60 * 60 * 1000, + lastSeen: today.getTime() - 22 * 24 * 60 * 60 * 1000, + sources: ['Shodan Inferred Vulnerability'], + ref_type: 'associated-with', + ref_right_type: 'threat', + ref_right_id: 'ThreatID_1234', + ref_left_type: 'ipv4', + ref_left_id: 1234509876, + + right_ticScore: 50, + right_classifications: ['Vulnerable Service'], + right_name: 'Scary Malware', + + left_type: 'ipv4', + left_ticScore: 50, + left_name: '100.123.100.123', + vulnOrMal: 'Malware' + } + ] + }, + substate: 'remediated', + source: 'lookingGlass' + }).save(); + nock('https://delta.lookingglasscyber.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.LG_API_KEY + } + }) + .get( + '/api/v1/workspaces/' + + encodeURIComponent(process.env.LG_WORKSPACE_NAME!) + + '/collections' + ) + .reply(200, orgResponse); + + nock('https://delta.lookingglasscyber.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.LG_API_KEY + } + }) + .post('/api/graph/query', { + period: 'all', + query: [ + 'and', + ['=', 'type', ['associated-with']], + ['or', ['=', 'right.type', 'threat'], ['=', 'left.type', 'ipv4']], + ['=', 'left.collectionIds', 'Collection_Id_1'] + ], + fields: ['firstSeen', 'lastSeen', 'sources', 'right', 'left'], + limit: 100000, + workspaceIds: [] + }) + .reply(200, lgResponse); + await lookingGlass({ + organizationId: organization.id, + organizationName: orgName, + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const vulns = await Vulnerability.find({ + where: { domain }, + relations: ['service'] + }); + expect( + new Date(vulns[0].structuredData['lookingGlassData'][0].firstSeen) + ).toEqual(new Date(today.getTime() - 17 * 24 * 60 * 60 * 1000)); + expect( + new Date(vulns[0].structuredData['lookingGlassData'][0].lastSeen) + ).toEqual(new Date(today.getTime() - 5 * 24 * 60 * 60 * 1000)); + }); + + test('Merge duplicate threats successfully', async () => { + console.log('Running Merge test'); + const domain = await Domain.findOne({ id: domains[2].id }); + nock('https://delta.lookingglasscyber.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.LG_API_KEY + } + }) + .get( + '/api/v1/workspaces/' + + encodeURIComponent(process.env.LG_WORKSPACE_NAME!) + + '/collections' + ) + .reply(200, orgResponse); + + nock('https://delta.lookingglasscyber.com', { + reqheaders: { + Authorization: 'Bearer ' + process.env.LG_API_KEY + } + }) + .post('/api/graph/query', { + period: 'all', + query: [ + 'and', + ['=', 'type', ['associated-with']], + ['or', ['=', 'right.type', 'threat'], ['=', 'left.type', 'ipv4']], + ['=', 'left.collectionIds', 'Collection_Id_1'] + ], + fields: ['firstSeen', 'lastSeen', 'sources', 'right', 'left'], + limit: 100000, + workspaceIds: [] + }) + .reply(200, lgResponse); + await lookingGlass({ + organizationId: organization.id, + organizationName: orgName, + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const vulns = await Vulnerability.find({ + where: { domain }, + relations: ['service'] + }); + expect( + new Date(vulns[0].structuredData['lookingGlassData'][0].firstSeen) + ).toEqual(new Date(today.getTime() - 13 * 24 * 60 * 60 * 1000)); + expect( + new Date(vulns[0].structuredData['lookingGlassData'][0].lastSeen) + ).toEqual(new Date(today.getTime() - 4 * 24 * 60 * 60 * 1000)); + }); +}); diff --git a/backend/src/tasks/test/portscanner.test.ts b/backend/src/tasks/test/portscanner.test.ts new file mode 100644 index 00000000..40ba7866 --- /dev/null +++ b/backend/src/tasks/test/portscanner.test.ts @@ -0,0 +1,30 @@ +import { handler as portscanner } from '../portscanner'; +jest.mock('../helpers/getIps'); +jest.mock('../helpers/saveServicesToDb'); + +jest.mock('portscanner', () => ({ + checkPortStatus: (port, ip) => { + return port === 443 || port === 80 ? 'open' : 'closed'; + } +})); + +const RealDate = Date; + +describe('portscanner', () => { + beforeEach(() => { + global.Date.now = jest.fn(() => new Date('2019-04-22T10:20:30Z').getTime()); + }); + + afterEach(() => { + global.Date = RealDate; + }); + test('basic test', async () => { + await portscanner({ + organizationId: 'organizationId', + organizationName: 'organizationName', + scanId: 'd0f51c16-a64a-4ed0-8373-d66485bfc678', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + }); +}); diff --git a/backend/src/tasks/test/rootDomainSync.test.ts b/backend/src/tasks/test/rootDomainSync.test.ts new file mode 100644 index 00000000..f74f3d68 --- /dev/null +++ b/backend/src/tasks/test/rootDomainSync.test.ts @@ -0,0 +1,48 @@ +import { handler as rootDomainSync } from '../rootDomainSync'; +import { connectToDatabase, Organization, Domain, Scan } from '../../models'; + +jest.mock('dns', () => ({ + promises: { + lookup: async (domainName) => ({ address: '104.84.119.215' }) + } +})); + +describe('rootDomainSync', () => { + let scan; + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + scan = await Scan.create({ + name: 'rootDomainSync', + arguments: {}, + frequency: 999 + }).save(); + }); + afterAll(async () => { + await connection.close(); + }); + + test('should add new domains', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['rootdomain.example1'], + ipBlocks: [], + isPassive: false + }).save(); + await rootDomainSync({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const domains = await Domain.find({ + where: { organization }, + relations: ['organization'] + }); + expect(domains.length).toEqual(1); + expect(domains[0].name).toEqual('rootdomain.example1'); + expect(domains[0].ip).toEqual('104.84.119.215'); + expect(domains[0].organization.id).toEqual(organization.id); + }); +}); diff --git a/backend/src/tasks/test/s3-client.test.ts b/backend/src/tasks/test/s3-client.test.ts new file mode 100644 index 00000000..8c0014d3 --- /dev/null +++ b/backend/src/tasks/test/s3-client.test.ts @@ -0,0 +1,43 @@ +import S3Client from '../s3-client'; + +const getSignedUrlPromise = jest.fn(() => 'http://signed_url'); +const listObjects = jest.fn(() => ({ Contents: 'report content' })); +const putObject = jest.fn(); + +jest.mock('aws-sdk', () => ({ + S3: jest.fn().mockImplementation(() => ({ + putObject: (e) => ({ + promise: putObject + }), + listObjects: (e) => ({ + promise: listObjects + }), + getSignedUrlPromise: getSignedUrlPromise + })) +})); + +describe('saveCSV', () => { + test('gets url', async () => { + const client = new S3Client(); + const result = await client.saveCSV('data'); + expect(result).toEqual('http://signed_url'); + expect(putObject).toBeCalled(); + }); +}); + +describe('listReports', () => { + test('gets content', async () => { + const client = new S3Client(); + const result = await client.listReports('data'); + expect(result).toEqual('report content'); + expect(listObjects).toBeCalled(); + }); +}); + +describe('exportReport', () => { + test('gets content', async () => { + const client = new S3Client(); + const result = await client.exportReport('data', 'orgId'); + expect(result).toEqual('http://signed_url'); + }); +}); diff --git a/backend/src/tasks/test/scheduler.test.ts b/backend/src/tasks/test/scheduler.test.ts new file mode 100644 index 00000000..b08ae065 --- /dev/null +++ b/backend/src/tasks/test/scheduler.test.ts @@ -0,0 +1,1070 @@ +import { handler as scheduler } from '../scheduler'; +import { + connectToDatabase, + Scan, + Organization, + ScanTask, + OrganizationTag +} from '../../models'; + +jest.mock('../ecs-client'); +const { runCommand, getNumTasks } = require('../ecs-client'); + +describe('scheduler', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + test('should run a scan for the first time', async () => { + let scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(1); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [ + { + id: organization.id, + name: organization.name + } + ], + scanId: scan.id, + scanName: scan.name + }) + ); + + const scanTask = await ScanTask.findOne( + runCommand.mock.calls[0][0].scanTaskId + ); + expect(scanTask?.status).toEqual('requested'); + expect(scanTask?.fargateTaskArn).toEqual('mock_task_arn'); + + scan = (await Scan.findOne(scan.id))!; + expect(scan.lastRun).toBeTruthy(); + }); + describe('scheduling', () => { + test('should not run a scan when a scantask for that scan and organization is already in progress', async () => { + let scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'created' + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(0); + scan = (await Scan.findOne(scan.id))!; + expect(scan.lastRun).toBeFalsy(); + }); + test('should run a scan when a scantask for that scan and another organization is already in progress', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + await ScanTask.create({ + organization: undefined, + scan, + type: 'fargate', + status: 'created' + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(1); + }); + test('should not run a scan when a scantask for that scan and organization finished too recently', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'finished', + finishedAt: new Date() + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(0); + }); + test('should not run a scan when a scantask for that scan and organization finished too recently, and a failed scan occurred afterwards that does not have a finishedAt column', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'finished', + finishedAt: new Date() + }).save(); + await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'failed', + createdAt: new Date() + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(0); + }); + test('should not run a scan when a scantask for that scan and organization failed too recently', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'failed', + finishedAt: new Date() + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(0); + }); + test('should not run a scan when scan is a SingleScan and has finished', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999, + isSingleScan: true, + manualRunPending: false + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'finished', + finishedAt: new Date() + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(0); + }); + test('should not run a scan when scan is a SingleScan and has not run yet', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999, + isSingleScan: true, + manualRunPending: false + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(1); + }); + test('should always run a scan when scan has manualRunPending set to true', async () => { + let scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 1, + isSingleScan: true, + manualRunPending: true + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'finished', + finishedAt: new Date() + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(1); + + // Ensure scheduler set manualRunPending back to false + scan = (await Scan.findOne({ id: scan.id })) as Scan; + expect(scan.manualRunPending).toEqual(false); + }); + test('should run a scan when a scantask for that scan and organization finished and sufficient time has passed', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 100 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const finishedAt = new Date(); + finishedAt.setSeconds(finishedAt.getSeconds() - 101); + await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'finished', + finishedAt + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(1); + }); + test('should run a scan when a scantask for that scan and organization failed and sufficient time has passed', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 100 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const finishedAt = new Date(); + finishedAt.setSeconds(finishedAt.getSeconds() - 101); + await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'failed', + finishedAt + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(1); + }); + }); + describe('granular scans', () => { + test('should run a granular scan only on associated organizations', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization3 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999, + isGranular: true, + organizations: [organization, organization2] + }).save(); + + await scheduler( + { + scanId: scan.id + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(2); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [{ id: organization.id, name: organization.name }], + scanId: scan.id, + scanName: scan.name + }) + ); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [{ id: organization2.id, name: organization2.name }], + scanId: scan.id, + scanName: scan.name + }) + ); + + let scanTask = await ScanTask.findOne( + runCommand.mock.calls[0][0].scanTaskId + ); + expect(scanTask?.status).toEqual('requested'); + + scanTask = await ScanTask.findOne(runCommand.mock.calls[1][0].scanTaskId); + expect(scanTask?.status).toEqual('requested'); + }); + test('should run a granular scan on associated tags', async () => { + const tag1 = await OrganizationTag.create({ + name: 'test-' + Math.random() + }).save(); + const tag2 = await OrganizationTag.create({ + name: 'test-' + Math.random() + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + tags: [tag1] + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + tags: [tag1] + }).save(); + const organization3 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + tags: [tag2] + }).save(); + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999, + isGranular: true, + tags: [tag1] + }).save(); + + await scheduler( + { + scanId: scan.id + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(2); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [{ id: organization.id, name: organization.name }], + scanId: scan.id, + scanName: scan.name + }) + ); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [{ id: organization2.id, name: organization2.name }], + scanId: scan.id, + scanName: scan.name + }) + ); + + let scanTask = await ScanTask.findOne( + runCommand.mock.calls[0][0].scanTaskId + ); + expect(scanTask?.status).toEqual('requested'); + + scanTask = await ScanTask.findOne(runCommand.mock.calls[1][0].scanTaskId); + expect(scanTask?.status).toEqual('requested'); + }); + test('should only run a scan once if an organization and its tag are both enabled', async () => { + const tag1 = await OrganizationTag.create({ + name: 'test-' + Math.random() + }).save(); + const tag2 = await OrganizationTag.create({ + name: 'test-' + Math.random() + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + tags: [tag1] + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + tags: [tag1] + }).save(); + const organization3 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + tags: [tag2] + }).save(); + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999, + isGranular: true, + organizations: [organization, organization2], + tags: [tag1] + }).save(); + + await scheduler( + { + scanId: scan.id + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(2); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [{ id: organization.id, name: organization.name }], + scanId: scan.id, + scanName: scan.name + }) + ); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [{ id: organization2.id, name: organization2.name }], + scanId: scan.id, + scanName: scan.name + }) + ); + + let scanTask = await ScanTask.findOne( + runCommand.mock.calls[0][0].scanTaskId + ); + expect(scanTask?.status).toEqual('requested'); + + scanTask = await ScanTask.findOne(runCommand.mock.calls[1][0].scanTaskId); + expect(scanTask?.status).toEqual('requested'); + }); + }); + describe('global scans', () => { + test('should run a global scan for the first time', async () => { + jest.setTimeout(30000); + const scan = await Scan.create({ + name: 'censysIpv4', + arguments: {}, + frequency: 999 + }).save(); + + await scheduler( + { + scanId: scan.id + }, + {} as any, + () => void 0 + ); + + // Calls scan in chunks + expect(runCommand).toHaveBeenCalledTimes(20); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [], + scanId: scan.id, + scanName: scan.name + }) + ); + + const scanTask = await ScanTask.findOne( + runCommand.mock.calls[0][0].scanTaskId + ); + expect(scanTask?.status).toEqual('requested'); + expect(scanTask?.organization).toBeUndefined(); + }); + test('should not run a global scan when a scantask for it is already in progress', async () => { + const scan = await Scan.create({ + name: 'censysIpv4', + arguments: {}, + frequency: 999 + }).save(); + await ScanTask.create({ + scan, + type: 'fargate', + status: 'created' + }).save(); + + await scheduler( + { + scanId: scan.id + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(0); + }); + }); + describe('concurrency', () => { + afterAll(() => { + getNumTasks.mockImplementation(() => 0); + }); + test('should not run scan if max concurrency has already been reached', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + + getNumTasks.mockImplementation(() => 100); + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + expect(runCommand).toHaveBeenCalledTimes(0); + + expect( + await ScanTask.count({ + where: { + scan, + status: 'queued' + } + }) + ).toEqual(1); + + // Should not queue any additional scans. + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + expect(runCommand).toHaveBeenCalledTimes(0); + expect( + await ScanTask.count({ + where: { + scan, + status: 'queued' + } + }) + ).toEqual(1); + + // Queue has opened up. + getNumTasks.mockImplementation(() => 0); + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(1); + }); + + test('should run only one, not two scans, if only one more scan remaining before max concurrency is reached', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + const scan2 = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + + getNumTasks.mockImplementation(() => 99); + await scheduler( + { + scanIds: [scan.id, scan2.id], + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + expect(runCommand).toHaveBeenCalledTimes(1); + + expect( + (await ScanTask.count({ + where: { + scan, + status: 'queued' + } + })) + + (await ScanTask.count({ + where: { + scan: scan2, + status: 'queued' + } + })) + ).toEqual(1); + + // Queue has opened up. + getNumTasks.mockImplementation(() => 90); + await scheduler( + { + scanIds: [scan.id, scan2.id], + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + expect(runCommand).toHaveBeenCalledTimes(2); + }); + + test('should run part of a chunked (20) scan if less than 20 scans remaining before concurrency is reached, then run the rest of them only when concurrency opens back up', async () => { + const scan = await Scan.create({ + name: 'censysIpv4', + arguments: {}, + frequency: 999 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + + // Only 10/20 scantasks will run at first + getNumTasks.mockImplementation(() => 90); + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + expect(runCommand).toHaveBeenCalledTimes(10); + + expect( + await ScanTask.count({ + where: { + scan, + status: 'queued' + } + }) + ).toEqual(10); + + // Should run the remaining 10 queued scantasks. + getNumTasks.mockImplementation(() => 0); + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + expect(runCommand).toHaveBeenCalledTimes(20); + + expect( + await ScanTask.count({ + where: { + scan, + status: 'queued' + } + }) + ).toEqual(0); + + // No more scantasks remaining to be run. + getNumTasks.mockImplementation(() => 0); + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + expect(runCommand).toHaveBeenCalledTimes(20); + }); + }); + test('should not run a global scan when a scantask for it is already in progress, even if scantasks have finished before / after it', async () => { + const scan = await Scan.create({ + name: 'censysIpv4', + arguments: {}, + frequency: 999 + }).save(); + await ScanTask.create({ + scan, + type: 'fargate', + status: 'finished', + createdAt: '2000-08-03T13:58:31.634Z' + }).save(); + await ScanTask.create({ + scan, + type: 'fargate', + status: 'created', + createdAt: '2000-05-03T13:58:31.634Z' + }).save(); + await ScanTask.create({ + scan, + type: 'fargate', + status: 'finished', + createdAt: '2000-01-03T13:58:31.634Z' + }).save(); + + await scheduler( + { + scanId: scan.id + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(0); + }); + test('should not change lastRun time of the second scan if the first scan runs', async () => { + // Make scan run before scan2. Scan2 should have already run, and doesn't need to run again. + // The scheduler should not change scan2.lastRun during its second call + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 1, + lastRun: new Date(0) + }).save(); + let scan2 = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999, + lastRun: new Date() + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + + // Run scheduler on scan2, this establishes a finished recent scantask for scan2 + await scheduler( + { + scanIds: [scan2.id], + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + scan2 = (await Scan.findOne(scan2.id))!; + expect(runCommand).toHaveBeenCalledTimes(1); + + // Run scheduler on both scans, scan should be run, but scan2 should be skipped + await scheduler( + { + scanIds: [scan.id, scan2.id], + organizationIds: [organization.id] + }, + {} as any, + () => void 0 + ); + expect(runCommand).toHaveBeenCalledTimes(2); + + const newscan2 = (await Scan.findOne(scan2.id))!; + + // Expect scan2's lastRun was not edited during the second call to scheduler + expect(newscan2.lastRun).toEqual(scan2.lastRun); + }); + describe('org batching', () => { + test('should run one scantask per org by default', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization3 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [organization.id, organization2.id, organization3.id] + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(3); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [ + { + id: organization.id, + name: organization.name + } + ], + scanId: scan.id, + scanName: scan.name + }) + ); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [ + { + id: organization2.id, + name: organization2.name + } + ], + scanId: scan.id, + scanName: scan.name + }) + ); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [ + { + id: organization3.id, + name: organization3.name + } + ], + scanId: scan.id, + scanName: scan.name + }) + ); + }); + + test('should batch two orgs per scantask when specified', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization3 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + + await scheduler( + { + scanId: scan.id, + organizationIds: [ + organization.id, + organization2.id, + organization3.id + ], + orgsPerScanTask: 2 + }, + {} as any, + () => void 0 + ); + + expect(runCommand).toHaveBeenCalledTimes(2); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [ + { + id: organization.id, + name: organization.name + }, + { + id: organization2.id, + name: organization2.name + } + ], + scanId: scan.id, + scanName: scan.name + }) + ); + expect(runCommand).toHaveBeenCalledWith( + expect.objectContaining({ + organizations: [ + { + id: organization3.id, + name: organization3.name + } + ], + scanId: scan.id, + scanName: scan.name + }) + ); + }); + }); +}); diff --git a/backend/src/tasks/test/search-sync.test.ts b/backend/src/tasks/test/search-sync.test.ts new file mode 100644 index 00000000..366dc1e5 --- /dev/null +++ b/backend/src/tasks/test/search-sync.test.ts @@ -0,0 +1,272 @@ +import { handler as searchSync, DOMAIN_CHUNK_SIZE } from '../search-sync'; +import { + connectToDatabase, + Organization, + Domain, + Service, + Vulnerability +} from '../../models'; + +jest.mock('../es-client'); +const { updateDomains, updateWebpages } = require('../es-client'); + +describe('search_sync', () => { + let organization; + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + beforeEach(async () => { + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + }); + + test('should not update already-synced domains', async () => { + const domain = await Domain.create({ + name: 'cisa.gov', + organization, + syncedAt: new Date('9999-10-10') + }).save(); + + await Service.create({ + service: 'https', + port: 443, + domain + }).save(); + + await searchSync({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + expect(updateDomains).not.toBeCalled(); + }); + + test('should update a domain if a service has changed', async () => { + const domain = await Domain.create({ + name: 'cisa.gov', + organization, + syncedAt: new Date('9999-10-10') + }).save(); + + await Service.create({ + service: 'https', + port: 443, + domain, + updatedAt: new Date('9999-10-11') + }).save(); + + await searchSync({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + expect(updateDomains).toBeCalled(); + }); + + test('should not update a domain if a service has not changed', async () => { + const domain = await Domain.create({ + name: 'cisa.gov', + organization, + syncedAt: new Date('9999-10-10') + }).save(); + + await Service.create({ + service: 'https', + port: 443, + domain, + updatedAt: new Date('9999-9-11') + }).save(); + + await searchSync({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + expect(updateDomains).not.toBeCalled(); + }); + + test('should update a domain if a vulnerability has changed', async () => { + const domain = await Domain.create({ + name: 'cisa.gov', + organization, + syncedAt: new Date('9999-10-10') + }).save(); + + await Vulnerability.create({ + domain, + title: 'vuln', + updatedAt: new Date('9999-10-11') + }).save(); + + await searchSync({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + expect(updateDomains).toBeCalled(); + }); + + test('should not update a domain if a vulnerability has not changed', async () => { + const domain = await Domain.create({ + name: 'cisa.gov', + organization, + syncedAt: new Date('9999-10-10') + }).save(); + + await Vulnerability.create({ + domain, + title: 'vuln', + updatedAt: new Date('9999-9-11') + }).save(); + + await searchSync({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + expect(updateDomains).not.toBeCalled(); + }); + + test('should update a domain if an organization has changed', async () => { + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + updatedAt: new Date('9999-10-11') + }).save(); + + const domain = await Domain.create({ + name: 'cisa.gov', + organization, + syncedAt: new Date('9999-10-10') + }).save(); + + await searchSync({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + expect(updateDomains).toBeCalled(); + }); + + test('should not update a domain if an organization has not changed', async () => { + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + updatedAt: new Date('9999-9-11') + }).save(); + + const domain = await Domain.create({ + name: 'cisa.gov', + organization, + syncedAt: new Date('9999-10-10') + }).save(); + + await searchSync({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + expect(updateDomains).not.toBeCalled(); + }); + + test('should update a domain if a domain has changed', async () => { + const domain = await Domain.create({ + name: 'cisa.gov', + organization, + syncedAt: new Date('9999-09-19T19:57:32.346Z'), + updatedAt: new Date('9999-09-20T19:57:32.346Z') + }).save(); + + const service = await Service.create({ + service: 'https', + port: 443, + domain, + updatedAt: new Date('9999-09-12T19:57:32.346Z') + }).save(); + + const vulnerability = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + + await searchSync({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + expect(updateDomains).toBeCalled(); + expect( + Object.keys((updateDomains as jest.Mock).mock.calls[0][0][0]) + ).toMatchSnapshot(); + + const domains = updateDomains.mock.calls[0][0]; + expect(domains.length).toEqual(1); + expect(domains[0].id).toEqual(domain.id); + expect(domains[0].organization.id).toEqual(organization.id); + expect(domains[0].services.map((e) => e.id)).toEqual([service.id]); + expect(domains[0].vulnerabilities.map((e) => e.id)).toEqual([ + vulnerability.id + ]); + + const newDomain = await Domain.findOneOrFail(domain.id); + expect(newDomain.syncedAt).not.toEqual(domain.syncedAt); + }); + + test('should sync domains in chunks', async () => { + await Promise.all( + new Array(DOMAIN_CHUNK_SIZE + 1).fill(null).map((e) => + Domain.create({ + name: 'cisa-' + Math.random() + '.gov', + organization, + syncedAt: new Date('9999-09-19T19:57:32.346Z'), + updatedAt: new Date('9999-09-20T19:57:32.346Z') + }).save() + ) + ); + + await searchSync({ + organizationId: organization.id, + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + + expect(updateDomains).toBeCalledTimes(2); + }); +}); diff --git a/backend/src/tasks/test/shodan.test.ts b/backend/src/tasks/test/shodan.test.ts new file mode 100644 index 00000000..aca7d033 --- /dev/null +++ b/backend/src/tasks/test/shodan.test.ts @@ -0,0 +1,335 @@ +import * as nock from 'nock'; +import { + connectToDatabase, + Domain, + Organization, + Scan, + Service, + Vulnerability +} from '../../models'; +import { handler as shodan } from '../shodan'; + +const RealDate = Date; + +const shodanResponse = [ + { + region_code: null, + ip: 2575209532, + postal_code: null, + country_code: 'JP', + city: null, + dma_code: null, + last_update: '2020-12-16T20:00:25.339321', + latitude: 35.69, + tags: ['self-signed', 'starttls'], + area_code: null, + country_name: 'Japan', + hostnames: ['otakukonkatsu.com'], + org: 'SAKURA Internet', + data: [ + { + hash: -1790423402, + os: null, + tags: ['self-signed'], + opts: { + vulns: [], + heartbleed: '2020/12/16 20:00:12 153.126.148.60:993 - SAFE\n' + }, + ip: 2575209532, + isp: 'SAKURA Internet', + port: 993, + hostnames: ['otakukonkatsu.com'], + timestamp: '2020-12-16T20:00:25.339321', + domains: ['otakukonkatsu.com'], + org: 'SAKURA Internet', + data: '* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.\n* CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN\r\nA001 OK Capability completed.\r\n* ID NIL\r\nA002 OK ID completed.\r\nA003 BAD Error in IMAP command received by server.\r\n', + asn: 'AS7684', + transport: 'tcp', + ip_str: '153.126.148.60', + product: 'Test', + version: '1.1', + cpe: ['cpe:/a:igor_sysoev:nginx:1.18.0', 'cpe:/a:atlassian:confluence'] + } + ], + asn: 'AS7684', + isp: 'SAKURA Internet', + longitude: 139.69, + country_code3: null, + domains: ['otakukonkatsu.com'], + ip_str: '153.126.148.60', + os: null, + ports: [993, 587, 110, 80, 465, 25, 443] + }, + { + region_code: null, + ip: 16843009, + postal_code: null, + country_code: 'AU', + city: null, + dma_code: null, + last_update: '2020-12-21T22:04:16.508070', + latitude: -33.494, + tags: [], + area_code: null, + country_name: 'Australia', + hostnames: ['one.one.one.one'], + org: 'Mountain View Communications', + data: [ + { + _shodan: { + id: '8eb5fb82-81c8-4a6d-bc20-43d83079069b', + options: {}, + ptr: true, + module: 'dns-udp', + crawler: '70752434fdf0dcec35df6ae02b9703eaae035f7d' + }, + hash: 1592421393, + os: null, + opts: { + raw: '34ef818500010000000000000776657273696f6e0462696e640000100003' + }, + ip: 16843009, + isp: 'Mountain View Communications', + port: 53, + hostnames: ['one.one.one.one'], + location: { + city: null, + region_code: null, + area_code: null, + longitude: 143.2104, + country_code3: null, + country_name: 'Australia', + postal_code: null, + dma_code: null, + country_code: 'AU', + latitude: -33.494 + }, + dns: { + resolver_hostname: null, + recursive: true, + resolver_id: 'AMS', + software: null + }, + timestamp: '2020-12-21T22:04:16.508070', + domains: ['one.one'], + org: 'Mountain View Communications', + data: '\nRecursion: enabled\nResolver ID: AMS', + asn: 'AS13335', + transport: 'udp', + ip_str: '1.1.1.1', + vulns: { + 'CVE-1234-1234': { + verified: true, + references: [], + cvss: '5', + summary: 'A vulnerability' + } + } + } + ], + asn: 'AS13335', + isp: 'Mountain View Communications', + longitude: 143.2104, + country_code3: null, + domains: ['one.one'], + ip_str: '1.1.1.1', + os: null, + ports: [53] + } +]; + +describe('shodan', () => { + let organization; + let scan; + let domains: Domain[] = []; + let connection; + beforeEach(async () => { + connection = await connectToDatabase(); + global.Date.now = jest.fn(() => new Date('2019-04-22T10:20:30Z').getTime()); + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + scan = await Scan.create({ + name: 'shodan', + arguments: {}, + frequency: 999 + }).save(); + domains = [ + await Domain.create({ + name: 'first_file_testdomain1', + ip: '153.126.148.60', + organization + }).save(), + await Domain.create({ + name: 'first_file_testdomain2', + ip: '31.134.10.156', + organization + }).save(), + await Domain.create({ + name: 'first_file_testdomain12', + ip: '1.1.1.1', + organization + }).save() + ]; + + jest.mock('../helpers/getIps', () => domains); + }); + + afterEach(async () => { + global.Date = RealDate; + jest.unmock('../helpers/getIps'); + await connection.close(); + }); + afterAll(async () => { + nock.cleanAll(); + }); + const checkDomains = async (organization) => { + const domains = await Domain.find({ + where: { organization }, + relations: ['organization', 'services'] + }); + expect( + domains + .sort((a, b) => a.name.localeCompare(b.name)) + .map((e) => ({ + ...e, + services: e.services.map((s) => ({ + ...s, + id: null, + updatedAt: null, + createdAt: null + })), + organization: null, + id: null, + updatedAt: null, + createdAt: null, + syncedAt: null, + name: null + })) + ).toMatchSnapshot(); + expect(domains.filter((e) => !e.organization).length).toEqual(0); + }; + test('basic test', async () => { + nock('https://api.shodan.io') + .get( + `/shodan/host/153.126.148.60,31.134.10.156,1.1.1.1?key=${process.env.SHODAN_API_KEY}` + ) + .reply(200, shodanResponse); + await shodan({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + await checkDomains(organization); + }); + test('creates vulnerability', async () => { + nock('https://api.shodan.io') + .get( + `/shodan/host/153.126.148.60,31.134.10.156,1.1.1.1?key=${process.env.SHODAN_API_KEY}` + ) + .reply(200, shodanResponse); + await shodan({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const domain = await Domain.findOne({ id: domains[2].id }); + const vulns = await Vulnerability.find({ + domain: domain + }); + expect(vulns).toHaveLength(1); + expect(vulns[0].title).toEqual('CVE-1234-1234'); + }); + test('updates existing vulnerability', async () => { + const domain = await Domain.findOne({ id: domains[2].id }); + const service = await Service.create({ + domain, + port: 443 + }).save(); + const vulnerability = await Vulnerability.create({ + domain, + cve: 'CVE-1234-1234', + lastSeen: new Date(Date.now()), + cpe: 'cpe1', + title: 'CVE-1234-1234', + description: '123', + state: 'closed', + substate: 'remediated', + source: 'cpe2cve', + service + }).save(); + nock('https://api.shodan.io') + .get( + `/shodan/host/153.126.148.60,31.134.10.156,1.1.1.1?key=${process.env.SHODAN_API_KEY}` + ) + .reply(200, shodanResponse); + await shodan({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const vulns = await Vulnerability.find({ + where: { domain }, + relations: ['service'] + }); + expect(vulns).toHaveLength(1); + + // These fields should stay the same + expect(vulns[0].title).toEqual('CVE-1234-1234'); + expect(vulns[0].id).toEqual(vulnerability.id); + expect(vulns[0].cpe).toEqual(vulnerability.cpe); + expect(vulns[0].state).toEqual(vulnerability.state); + expect(vulns[0].service.id).toEqual(service.id); + expect(vulns[0].source).toEqual(vulnerability.source); + + // These fields should be updated + expect(vulns[0].cvss).toEqual('5'); + expect(vulns[0].updatedAt).not.toEqual(vulnerability.updatedAt); + }); + test('populates shodanResults and products', async () => { + nock('https://api.shodan.io') + .get( + `/shodan/host/153.126.148.60,31.134.10.156,1.1.1.1?key=${process.env.SHODAN_API_KEY}` + ) + .reply(200, shodanResponse); + await shodan({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + const service = await Service.findOne({ domain: domains[0], port: 993 }); + expect(service).not.toBeUndefined(); + expect(service!.shodanResults).toEqual({ + product: 'Test', + version: '1.1', + cpe: ['cpe:/a:igor_sysoev:nginx:1.18.0', 'cpe:/a:atlassian:confluence'] + }); + expect(service!.products).toHaveLength(2); + expect(service!.products).toEqual([ + { + cpe: 'cpe:/a:igor_sysoev:nginx:1.18.0', + name: 'nginx', + tags: [], + vendor: 'igor sysoev', + version: '1.18.0' + }, + { + cpe: 'cpe:/a:atlassian:confluence', + name: 'confluence', + tags: [], + vendor: 'atlassian' + } + ]); + }); +}); diff --git a/backend/src/tasks/test/sslyze.test.ts b/backend/src/tasks/test/sslyze.test.ts new file mode 100644 index 00000000..5ef1ea65 --- /dev/null +++ b/backend/src/tasks/test/sslyze.test.ts @@ -0,0 +1,96 @@ +import { handler as sslyze } from '../sslyze'; +import { connectToDatabase, Organization, Service, Domain } from '../../models'; + +jest.mock('ssl-checker', () => () => ({ + daysRemaining: 125, + valid: true, + validFrom: '2020-06-15T00:00:00.000Z', + validTo: '2021-03-07T12:00:00.000Z', + validFor: [ + 'www3.dhs.gov', + 'biometrics.gov', + 'us-cert.cisa.gov', + 'preview.cisa.gov', + 'fema.com', + 'www.cisa.gov' + ] +})); + +describe('sslyze', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + let organization; + beforeEach(async () => { + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + }); + afterAll(async () => { + await connection.close(); + }); + test('basic test', async () => { + let domain = await Domain.create({ + organization, + name: 'www.cisa.gov', + ip: '0.0.0.0' + }).save(); + const service = await Service.create({ + service: 'https', + port: 443, + domain + }).save(); + await sslyze({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 0, + numChunks: 1 + }); + domain = (await Domain.findOne(domain.id)) as Domain; + expect(domain.ssl).toMatchInlineSnapshot(` + Object { + "altNames": Array [ + "www3.dhs.gov", + "biometrics.gov", + "us-cert.cisa.gov", + "preview.cisa.gov", + "fema.com", + "www.cisa.gov", + ], + "valid": true, + "validFrom": "2020-06-15T00:00:00.000Z", + "validTo": "2021-03-07T12:00:00.000Z", + } + `); + }); + test('should not be called on non-https domains', async () => { + let domain = await Domain.create({ + organization, + name: 'www.cisa.gov', + ip: '0.0.0.0' + }).save(); + const service = await Service.create({ + service: 'http', + port: 80, + domain + }).save(); + await sslyze({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: 'scanId', + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 0, + numChunks: 1 + }); + domain = (await Domain.findOne(domain.id)) as Domain; + expect(domain.ssl).toEqual(null); + }); +}); diff --git a/backend/src/tasks/test/updateScanTaskStatus.test.ts b/backend/src/tasks/test/updateScanTaskStatus.test.ts new file mode 100644 index 00000000..3ed7fd89 --- /dev/null +++ b/backend/src/tasks/test/updateScanTaskStatus.test.ts @@ -0,0 +1,130 @@ +import { + handler as updateScanTaskStatus, + EventBridgeEvent +} from '../updateScanTaskStatus'; +import { connectToDatabase, Scan, ScanTask } from '../../models'; + +let scan; +let connection; +beforeAll(async () => { + connection = await connectToDatabase(); + scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 999 + }).save(); +}); +afterAll(async () => { + await connection.close(); +}); + +const createSampleEvent = ({ + lastStatus, + taskArn, + exitCode = 0 +}): EventBridgeEvent => ({ + detail: { + attachments: [], + availabilityZone: 'us-east-1b', + clusterArn: + 'arn:aws:ecs:us-east-1:563873274798:cluster/crossfeed-staging-worker', + containers: [ + { + containerArn: + 'arn:aws:ecs:us-east-1:563873274798:container/75d926f3-c850-4722-a143-639f02ff4756', + exitCode: exitCode, + lastStatus: lastStatus, + name: 'main', + image: + '563873274798.dkr.ecr.us-east-1.amazonaws.com/crossfeed-staging-worker:latest', + imageDigest: + 'sha256:080467614c0d7d5a5b092023b762931095308ae1dec8e54481fbd951f9784391', + runtimeId: 'eeccdb34-d8cf-49e7-b379-1cf4f123c0ee-3935363592', + taskArn: + 'arn:aws:ecs:us-east-1:563873274798:task/crossfeed-staging-worker/eeccdb34-d8cf-49e7-b379-1cf4f123c0ee', + networkInterfaces: [ + { + attachmentId: '5ff58204-1180-48ab-a62e-0a65a17cc4ef', + privateIpv4Address: '10.0.3.61' + } + ], + cpu: '0' + } + ], + launchType: 'FARGATE', + cpu: '256', + memory: '512', + desiredStatus: 'STOPPED', + group: 'family:crossfeed-staging-worker', + lastStatus: lastStatus, + overrides: { + containerOverrides: [ + { + environment: [], + name: 'main' + } + ] + }, + connectivity: 'CONNECTED', + stoppedReason: 'Essential container in task exited', + stopCode: 'EssentialContainerExited', + taskArn: taskArn, + taskDefinitionArn: + 'arn:aws:ecs:us-east-1:563873274798:task-definition/crossfeed-staging-worker:2', + version: 5, + platformVersion: '1.4.0' + } +}); + +test('starting event', async () => { + const taskArn = Math.random() + ''; + let scanTask = await ScanTask.create({ + scan, + type: 'fargate', + status: 'requested', + fargateTaskArn: taskArn + }).save(); + await updateScanTaskStatus( + createSampleEvent({ lastStatus: 'RUNNING', taskArn }), + {} as any, + () => null + ); + scanTask = (await ScanTask.findOne(scanTask.id))!; + expect(scanTask.status).toEqual('started'); +}); + +test('finished event', async () => { + const taskArn = Math.random() + ''; + let scanTask = await ScanTask.create({ + scan, + type: 'fargate', + status: 'started', + fargateTaskArn: taskArn + }).save(); + await updateScanTaskStatus( + createSampleEvent({ lastStatus: 'STOPPED', taskArn, exitCode: 0 }), + {} as any, + () => null + ); + scanTask = (await ScanTask.findOne(scanTask.id))!; + expect(scanTask.status).toEqual('finished'); + expect(scanTask.finishedAt).toBeTruthy(); + expect(scanTask.output).toContain('EssentialContainerExited'); +}); + +test('failed event', async () => { + const taskArn = Math.random() + ''; + let scanTask = await ScanTask.create({ + scan, + type: 'fargate', + status: 'started', + fargateTaskArn: taskArn + }).save(); + await updateScanTaskStatus( + createSampleEvent({ lastStatus: 'STOPPED', taskArn, exitCode: 1 }), + {} as any, + () => null + ); + scanTask = (await ScanTask.findOne(scanTask.id))!; + expect(scanTask.status).toEqual('failed'); +}); diff --git a/backend/src/tasks/test/vuln-sync.test.ts b/backend/src/tasks/test/vuln-sync.test.ts new file mode 100644 index 00000000..e4cf0531 --- /dev/null +++ b/backend/src/tasks/test/vuln-sync.test.ts @@ -0,0 +1,106 @@ +import { connect } from 'http2'; +import * as nock from 'nock'; +import { connectToDatabase, Scan } from '../../models'; +import { handler as vulnSync } from '../vuln-sync'; + +const taskResponse = { + task_id: '6c84fb90-12c4-11e1-840d-7b25c5ee775a', + status: 'Processing' +}; +const dataResponse = { + task_id: '6c84fb90-12c4-11e1-840d-7b25c5ee775a', + status: 'Completed', + result: [ + { + title: 'CVE-0000-0000', + cve: 'CVE-0000-0000', + cvss: '1.0', + state: 'open', + severity: 'high', + source: 'Shodan', + needsPopulation: false, + port: 9999, + lastSeen: '2022-02-28 09:12:55.092', + banner: 'none', + serviceSource: 'testSource', + product: 'testProduct', + version: '1.0', + cpe: 'testCpe', + service_asset: 'test.net', + service_port: 9999, + service_asset_type: 9999 + }, + { + title: 'CVE-0000-0001', + cve: 'CVE-0000-0001', + cvss: '1.0', + state: 'open', + severity: 'high', + source: 'Shodan', + needsPopulation: false, + port: 9999, + lastSeen: '2022-02-28 09:12:55.092', + banner: 'none', + serviceSource: 'testSource', + product: 'testProduct', + version: '1.0', + cpe: 'testCpe', + service_asset: 'test.net', + service_port: 9999, + service_asset_type: 9999 + }, + { + title: 'CVE-0000-0002', + cve: 'CVE-0000-0002', + cvss: '1.0', + state: 'open', + severity: 'high', + source: 'Shodan', + needsPopulation: false, + port: 9999, + lastSeen: '2022-02-28 09:12:55.092', + banner: 'none', + serviceSource: 'testSource', + product: 'testProduct', + version: '1.0', + cpe: 'testCpe', + service_asset: 'test.net', + service_port: 9999, + service_asset_type: 9999 + } + ] +}; +describe('vuln-sync', () => { + let scan; + let connection; + beforeEach(async () => { + connection = await connectToDatabase(); + scan = await Scan.create({ + name: 'cve-sync', + arguments: {}, + frequency: 999 + }).save(); + }); + afterEach(async () => { + await connection.close(); + }); + afterAll(async () => { + nock.cleanAll(); + }); + test('baseline', async () => { + nock('https://api.staging-cd.crossfeed.cyber.dhs.gov') + .get( + '/pe/apiv1/crossfeed_vulns/task/6c84fb90-12c4-11e1-840d-7b25c5ee775a' + ) + .reply(200, dataResponse) + .post('/pe/apiv1/crossfeed_vulns') + .reply(200, taskResponse); + await vulnSync({ + organizationId: '7127132d-eb29-4948-94c4-5a9525b74c85', + organizationName: 'GLOBAL SCAN', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId' + }); + }); +}); diff --git a/backend/src/tasks/test/wappalyzer.test.ts b/backend/src/tasks/test/wappalyzer.test.ts new file mode 100644 index 00000000..f88589a4 --- /dev/null +++ b/backend/src/tasks/test/wappalyzer.test.ts @@ -0,0 +1,294 @@ +import { getLiveWebsites, LiveDomain } from '../helpers/getLiveWebsites'; +import { Domain, Service, connectToDatabase, Organization } from '../../models'; +import { CommandOptions } from '../ecs-client'; +import { handler } from '../wappalyzer'; +import * as nock from 'nock'; + +const axios = require('axios'); + +jest.mock('../helpers/getLiveWebsites'); +const getLiveWebsitesMock = getLiveWebsites as jest.Mock; + +jest.mock('../helpers/simple-wappalyzer'); +const wappalyzer = require('../helpers/simple-wappalyzer') + .wappalyzer as jest.Mock; + +const logSpy = jest.spyOn(console, 'log'); +const errSpy = jest.spyOn(console, 'error'); + +const httpsService = new Service(); +httpsService.port = 443; + +const httpService = new Service(); +httpService.port = 80; + +const wappalyzerResponse = [ + { + technology: { + name: 'jQuery', + categories: [59], + slug: 'jquery', + url: [], + headers: [], + dns: [], + cookies: [], + dom: [], + html: [], + css: [], + certIssuer: [], + robots: [], + meta: [], + scripts: [[Object], [Object], [Object]], + js: { 'jQuery.fn.jquery': [Array] }, + implies: [], + excludes: [], + icon: 'jQuery.svg', + website: 'https://jquery.com', + cpe: 'cpe:/a:jquery:jquery' + }, + pattern: { + value: 'jquery.*\\.js(?:\\?ver(?:sion)?=([\\d.]+))?', + regex: /jquery.*\.js(?:\?ver(?:sion)?=([\d.]+))?/i, + confidence: 100, + version: '\\1' + }, + version: '' + } +]; + +const commandOptions: CommandOptions = { + organizationId: 'organizationId', + organizationName: 'organizationName', + scanId: '0fce0882-234a-4f0e-a0d4-e7d6ed50c3b9', + scanName: 'scanName', + scanTaskId: 'scanTaskId' +}; + +describe('wappalyzer', () => { + let testDomain: LiveDomain; + let connection; + + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + + beforeEach(() => { + testDomain = new Domain() as LiveDomain; + testDomain.url = ''; + testDomain.name = 'example.com'; + getLiveWebsitesMock.mockResolvedValue([]); + wappalyzer.mockResolvedValue([]); + }); + + afterEach(() => { + getLiveWebsitesMock.mockReset(); + wappalyzer.mockReset(); + nock.cleanAll(); + }); + + afterAll(() => { + jest.restoreAllMocks(); + }); + + test('logs status message', async () => { + const expected = 'Running wappalyzer on organization'; + await handler(commandOptions); + expect(logSpy).toHaveBeenCalledWith( + expected, + commandOptions.organizationName + ); + }); + + test('gets live websites based on provided org id', async () => { + await handler(commandOptions); + expect(getLiveWebsitesMock).toHaveBeenCalledTimes(1); + expect(getLiveWebsitesMock).toHaveBeenCalledWith( + commandOptions.organizationId + ); + }); + + test('calls https for domain with port 443', async () => { + testDomain.services = [httpsService]; + testDomain.url = 'https://example.com'; + testDomain.service = httpsService; + getLiveWebsitesMock.mockResolvedValue([testDomain]); + const scope = nock('https://example.com') + .get('/') + .times(1) + .reply(200, 'somedata'); + await handler(commandOptions); + scope.done(); + }); + + test('calls http for domains without port 443', async () => { + testDomain.url = 'http://example.com'; + testDomain.service = httpService; + testDomain.services = [httpService]; + getLiveWebsitesMock.mockResolvedValue([testDomain]); + const scope = nock('http://example.com') + .get('/') + .times(1) + .reply(200, 'somedata'); + await handler(commandOptions); + scope.done(); + }); + + test('saves domains to database that have a result', async () => { + const scope = nock(/https?:\/\/example2?\.com/) + .persist() + .get('/') + .times(2) + .reply(200, 'somedata'); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const testServices = [ + await Service.create({ + port: 443 + }).save(), + await Service.create({ + port: 443 + }).save() + ] as Service[]; + const testDomains = [ + await Domain.create({ + ...testDomain, + services: [testServices[0]], + organization + }).save(), + await Domain.create({ + ...testDomain, + name: 'example2.com', + services: [testServices[1]], + organization + }).save() + ] as LiveDomain[]; + testDomains[0].url = 'https://example2.com'; + testDomains[0].service = testServices[0]; + testDomains[1].url = 'https://example2.com'; + testDomains[1].service = testServices[1]; + getLiveWebsitesMock.mockResolvedValue(testDomains); + wappalyzer.mockReturnValueOnce([]).mockReturnValueOnce(wappalyzerResponse); + + await handler(commandOptions); + scope.done(); + expect(wappalyzer).toHaveBeenCalledTimes(2); + expect(logSpy).toHaveBeenLastCalledWith( + 'Wappalyzer finished for 2 domains' + ); + const service1 = await Service.findOne(testServices[0].id); + expect(service1?.wappalyzerResults).toEqual([]); + + const service2 = await Service.findOne(testServices[1].id); + expect(service2?.wappalyzerResults).toEqual(wappalyzerResponse); + }); + + test.only('saves exchange products properly', async () => { + const wappalyzerResponse = [ + { + technology: { + name: 'Microsoft Exchange Server', + categories: [30], + slug: 'microsoft-exchange-server', + icon: 'Microsoft.png', + website: + 'https://www.microsoft.com/en-us/microsoft-365/exchange/email', + cpe: 'cpe:/a:microsoft:exchange_server' + }, + version: '15.2.595' + } + ]; + const scope = nock(/https?:\/\/example2?\.com/) + .persist() + .get('/') + .times(2) + .reply(200, 'somedata'); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const testServices = [ + await Service.create({ + port: 443 + }).save(), + await Service.create({ + port: 443 + }).save() + ] as Service[]; + const testDomains = [ + await Domain.create({ + ...testDomain, + services: [testServices[0]], + organization + }).save(), + await Domain.create({ + ...testDomain, + name: 'example2.com', + services: [testServices[1]], + organization + }).save() + ] as LiveDomain[]; + testDomains[0].url = 'https://example2.com'; + testDomains[0].service = testServices[0]; + testDomains[1].url = 'https://example2.com'; + testDomains[1].service = testServices[1]; + getLiveWebsitesMock.mockResolvedValue(testDomains); + wappalyzer.mockReturnValueOnce([]).mockReturnValueOnce(wappalyzerResponse); + + await handler(commandOptions); + scope.done(); + expect(wappalyzer).toHaveBeenCalledTimes(2); + expect(logSpy).toHaveBeenLastCalledWith( + 'Wappalyzer finished for organization organizationName on 2 domains' + ); + const service1 = await Service.findOne(testServices[0].id); + expect(service1?.wappalyzerResults).toEqual([]); + + const service2 = await Service.findOne(testServices[1].id); + expect(service2?.wappalyzerResults).toEqual(wappalyzerResponse); + + expect(service2?.products).toEqual([ + { + cpe: 'cpe:/a:microsoft:exchange_server:2019:cumulative_update_5', + icon: 'Microsoft.png', + name: 'Microsoft Exchange Server', + tags: [], + version: '15.2.595' + } + ]); + }); + + test('logs error on wappalyzer failure', async () => { + testDomain.services = [httpsService]; + testDomain.url = 'https://example.com'; + testDomain.service = httpsService; + getLiveWebsitesMock.mockResolvedValue([testDomain]); + nock('http://example.com').get('/').reply(200, 'somedata'); + const err = new Error('testerror'); + wappalyzer.mockRejectedValue(err); + await handler(commandOptions); + expect(errSpy).toHaveBeenCalledTimes(1); + expect(errSpy).toHaveBeenCalledWith(err); + }); + + test('logs error on axios failure', async () => { + axios.get = jest.fn(); + testDomain.services = [httpsService]; + testDomain.url = 'https://example.com'; + testDomain.service = httpsService; + nock('http://example.com').get('/').replyWithError('network error'); + const err = new Error('testerror'); + axios.get.mockRejectedValue(err); + getLiveWebsitesMock.mockResolvedValue([testDomain]); + await handler(commandOptions); + expect(errSpy).toHaveBeenCalledTimes(1); + }); +}); diff --git a/backend/src/tasks/test/webscraper.test.ts b/backend/src/tasks/test/webscraper.test.ts new file mode 100644 index 00000000..edcca715 --- /dev/null +++ b/backend/src/tasks/test/webscraper.test.ts @@ -0,0 +1,116 @@ +import { handler as webscraper } from '../webscraper'; +import { + connectToDatabase, + Organization, + Service, + Domain, + Webpage, + Scan +} from '../../models'; +import { spawn } from 'child_process'; +import { writeFileSync } from 'fs'; +import { Readable } from 'stream'; +jest.mock('../es-client'); + +const updateWebpages = require('../es-client').updateWebpages as jest.Mock; + +jest.mock('child_process', () => ({ + spawn: jest.fn().mockImplementationOnce(() => ({ + status: 0, + stderr: Readable.from(['scrapy output']), + stdout: Readable.from([ + ` +line with no database output +database_output: {"body": "abc", "headers": [{"a": "b", "c": "d"}], "status": 200, "url": "https://docs.crossfeed.cyber.dhs.gov", "domain_name": "docs.crossfeed.cyber.dhs.gov"} +database_output: {"s3_key": "1de6816e1b0d07840082bed89f852b3f10688a5df6877a97460dbc474195d5dd", "status": 200, "url": "https://docs.crossfeed.cyber.dhs.gov/scans/", "domain_name": "docs.crossfeed.cyber.dhs.gov"} +database_output: {"s3_key": "6a2946030f804a281a0141397dbd948d7cae4698118bffd1c58e6d5f87480435", "status": 200, "url": "https://docs.crossfeed.cyber.dhs.gov/contributing/", "domain_name": "docs.crossfeed.cyber.dhs.gov"} +database_output: {"s3_key": "d8f190dfeaba948e31fc26e3ab7b7c774b1fbf1f6caac535e4837595eadf4795", "status": 200, "url": "https://docs.crossfeed.cyber.dhs.gov/usage/", "domain_name": "docs.crossfeed.cyber.dhs.gov"} +database_output: {"body": "abc", "headers": [{"a": "b", "c": "d"}], "status": 200, "url": "https://docs.crossfeed.cyber.dhs.gov", "domain_name": "docs.crossfeed.cyber.dhs.gov"} +database_output: {"s3_key": "226706ff585e907aa977323c404b9889f3b2e547d134060ed57fda2e2f1b9860", "status": 200, "url": "https://docs.crossfeed.cyber.dhs.gov/contributing/deployment/", "domain_name": "docs.crossfeed.cyber.dhs.gov"} +database_output: {"s3_key": "e1448fa789c02ddc90a37803150923359a4a21512e1737caec52be53ef3aa3b5", "status": 200, "url": "https://docs.crossfeed.cyber.dhs.gov/contributing/architecture/", "domain_name": "docs.crossfeed.cyber.dhs.gov"} +database_output: {"s3_key": "3091ca75bf2ee1e0bead7475adb2db8362f96b472d220fd0c29eaac639cdf37f", "status": 200, "url": "https://docs.crossfeed.cyber.dhs.gov/usage/customization/", "domain_name": "docs.crossfeed.cyber.dhs.gov"} +line with no database output {} +database_output: {"s3_key": "dd7e7e51a4a094e87ad88756842854c2d878ac55fb908035ddaf229c5568fa1a", "status": 200, "url": "https://docs.crossfeed.cyber.dhs.gov/usage/administration/", "domain_name": "docs.crossfeed.cyber.dhs.gov"} +database_output: {"s3_key": "afb6378d30bd1b43d86be5d1582d0e306ba6c9dd2c60f0dcbb1a3837b34cbe59", "status": 400, "url": "https://docs.crossfeed.cyber.dhs.gov/contributing/setup/", "domain_name": "docs.crossfeed.cyber.dhs.gov"} +database_output: {"s3_key": "afb6378d30bd1b43d86be5d1582d0e306ba6c9dd2c60f0dcbb1a3837b34cbe60", "status": 200, "url": "https://unrelated-url.cyber.dhs.gov/contributing/setup/", "domain_name": "unrelated-url.cyber.dhs.gov"} +` + ]) + })) +})); + +jest.mock('fs', () => ({ + writeFileSync: jest.fn() +})); + +describe('webscraper', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + let organization; + beforeEach(async () => { + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + }); + test('basic test', async () => { + const scan = await Scan.create({ + name: 'webscraper', + arguments: {}, + frequency: 999 + }).save(); + const domain = await Domain.create({ + organization, + name: 'docs.crossfeed.cyber.dhs.gov', + ip: '0.0.0.0' + }).save(); + const service = await Service.create({ + service: 'https', + port: 443, + domain + }).save(); + await webscraper({ + organizationId: organization.id, + organizationName: 'organizationName', + scanId: scan.id, + scanName: 'scanName', + scanTaskId: 'scanTaskId', + chunkNumber: 0, + numChunks: 1 + }); + const webpages = await Webpage.find({ + where: { domain }, + relations: ['discoveredBy'], + order: { + url: 'DESC' + } + }); + expect( + (spawn as jest.Mock).mock.calls.map((e) => [e[0], e[1]]) + ).toMatchSnapshot(); + expect((writeFileSync as jest.Mock).mock.calls).toMatchSnapshot(); + expect(webpages.map((e) => e.url)).toMatchSnapshot(); + expect(webpages.map((e) => e.status)).toMatchSnapshot(); + expect(webpages.map((e) => e.headers)).toMatchSnapshot(); + expect(webpages.filter((e) => e.discoveredBy.id !== scan.id)).toEqual([]); + + expect( + updateWebpages.mock.calls[0][0].map((e) => ({ + ...e, + webpage_createdAt: e.webpage_createdAt ? true : false, + webpage_updatedAt: e.webpage_updatedAt ? true : false, + webpage_syncedAt: e.webpage_discoveredById ? true : false, + webpage_discoveredById: e.webpage_discoveredById ? true : false, + webpage_domainId: e.webpage_domainId ? true : false, + webpage_lastSeen: e.webpage_lastSeen ? true : false, + webpage_id: e.webpage_id ? true : false + })) + ).toMatchSnapshot(); + }); +}); diff --git a/backend/src/tasks/trustymail.ts b/backend/src/tasks/trustymail.ts new file mode 100644 index 00000000..35650893 --- /dev/null +++ b/backend/src/tasks/trustymail.ts @@ -0,0 +1,104 @@ +import getAllDomains from './helpers/getAllDomains'; +import { ChildProcessWithoutNullStreams, spawn } from 'child_process'; +import { CommandOptions } from './ecs-client'; +import saveTrustymailResultsToDb from './helpers/saveTrustymailResultsToDb'; +import * as chokidar from 'chokidar'; + +// TODO: Retry failed domains +// TODO: PSL is downloaded once per container (number of orgs / 2, rounded up); would like to download only once per day +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName } = commandOptions; + console.log('Running Trustymail on organization', organizationName); + const domains = await getAllDomains([organizationId!]); + const queue = new Set(domains.map((domain) => `${domain.id}.json`)); + const failedDomains = new Set(); + console.log( + `${organizationName} domains to be scanned:`, + domains.map((domain) => domain.name) + ); + console.log(`queue`, queue); + for (const domain of domains) { + const path = `${domain.id}.json`; + // Event listener detects Trustymail results file at creation and syncs it to db + chokidar.watch(path).on('add', (path) => { + console.log('Trustymail saved results to', path); + console.log(`Syncing ${path} to db...`); + saveTrustymailResultsToDb(path).then(() => { + console.log(`Deleting ${path} and removing it from queue...`); + queue.delete(path); + console.log(`Items left in queue:`, queue); + }); + }); + try { + const args = [ + domain.name, + '--json', + `--output=${domain.id}`, + '--psl-filename=public_suffix_list.dat' + ]; + console.log('Running Trustymail with args:', args); + const child = spawn('trustymail', args, { stdio: 'pipe' }); + addEventListenersToChildProcess( + child, + domain, + queue, + path, + failedDomains + ); + } catch (e) { + console.error(e); + } + } + // Keep container alive while syncing results to db; timeout after 10 minutes (60 * 10 seconds) + let dbSyncTimeout = 0; + while (queue.size > 0 && dbSyncTimeout < 60) { + console.log('Syncing...'); + await delay(1000 * 2); + dbSyncTimeout++; + } + console.log( + `Trustymail successfully scanned ${ + domains.length - failedDomains.size + } out of ${domains.length} domains \n failed domains:`, + failedDomains + ); +}; + +function delay(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +function addEventListenersToChildProcess( + child: ChildProcessWithoutNullStreams, + domain: { name: string; id: string }, + queue: Set, + path: string, + failedDomains: Set +) { + child.stdout.on('data', (data) => { + console.log(`${domain.name} (${domain.id}) stdout: ${data}`); + }); + child.on('spawn', () => { + console.log( + `Spawned ${domain.name} (${domain.id}) Trustymail child process` + ); + }); + child.on('error', (err) => + console.error( + `Error with Trustymail ${domain.name} (${domain.id}) child process:`, + err + ) + ); + child.on('exit', (code, signal) => { + console.log( + `Trustymail child process ${domain.name} (${domain.id}) exited with code`, + code, + 'and signal', + signal + ); + if (code !== 0) { + queue.delete(path); + failedDomains.add(domain.id); + } + }); +} diff --git a/backend/src/tasks/updateScanTaskStatus.ts b/backend/src/tasks/updateScanTaskStatus.ts new file mode 100644 index 00000000..6d5e195b --- /dev/null +++ b/backend/src/tasks/updateScanTaskStatus.ts @@ -0,0 +1,58 @@ +import { Handler } from 'aws-lambda'; +import { connectToDatabase, ScanTask } from '../models'; +import { Task } from 'aws-sdk/clients/ecs'; +import pRetry from 'p-retry'; + +export type EventBridgeEvent = { + detail: Task & { + stopCode?: string; + stoppedReason?: string; + taskArn: string; + lastStatus: FargateTaskStatus; + containers: { + exitCode?: number; + }[]; + }; +}; + +type FargateTaskStatus = + | 'PROVISIONING' + | 'PENDING' + | 'RUNNING' + | 'DEPROVISIONING' + | 'STOPPED'; + +export const handler: Handler = async ( + event: EventBridgeEvent +) => { + const { taskArn, lastStatus } = event.detail; + await connectToDatabase(); + const scanTask = await pRetry( + () => + ScanTask.findOne({ + fargateTaskArn: taskArn + }), + { retries: 3 } + ); + if (!scanTask) { + throw new Error(`Couldn't find scan with task arn ${taskArn}.`); + } + const oldStatus = scanTask.status; + if (lastStatus === 'RUNNING') { + scanTask.status = 'started'; + } else if (lastStatus === 'STOPPED') { + if (event.detail.containers![0]?.exitCode === 0) { + scanTask.status = 'finished'; + } else { + scanTask.status = 'failed'; + } + scanTask.output = `${event.detail.stopCode}: ${event.detail.stoppedReason}`; + scanTask.finishedAt = new Date(); + } else { + return; + } + console.log( + `Updating status of ScanTask ${scanTask.id} from ${oldStatus} to ${scanTask.status}.` + ); + await scanTask.save(); +}; diff --git a/backend/src/tasks/vuln-sync.ts b/backend/src/tasks/vuln-sync.ts new file mode 100644 index 00000000..f7f6ded3 --- /dev/null +++ b/backend/src/tasks/vuln-sync.ts @@ -0,0 +1,256 @@ +import { CommandOptions } from './ecs-client'; +import { + connectToDatabase, + Domain, + Service, + Vulnerability, + Organization +} from '../models'; +import { plainToClass } from 'class-transformer'; +import * as dns from 'dns'; +import axios from 'axios'; +import saveServicesToDb from './helpers/saveServicesToDb'; +import saveVulnerabilitiesToDb from './helpers/saveVulnerabilitiesToDb'; +import saveDomainsReturn from './helpers/saveDomainsReturn'; +import { sanitizeStringField } from './censysIpv4'; + +interface UniversalCrossfeedVuln { + title: string; + cve: string; + cwe: string; + description: string; + cvss: string; + state: string; + severity: string; + source: string; + needsPopulation: boolean; + port: number; + last_seen: string; + banner: string; + serviceSource: string; + product: string; + version: string; + cpe: string; + service_asset: string; + service_port: string; + service_asset_type: string; + structuredData?: { [key: string]: any }; +} +interface TaskResponse { + tasks_dict: { [key: string]: string }; + status: 'Pending' | 'Completed' | 'Failure'; + result: UniversalCrossfeedVuln[]; + error?: string; +} + +const sleep = (milliseconds) => { + return new Promise((resolve) => setTimeout(resolve, milliseconds)); +}; + +const fetchPEVulnTask = async (org_acronym: string) => { + console.log('Creating task to fetch PE vuln data'); + try { + console.log(String(process.env.CF_API_KEY)); + const response = await axios({ + url: 'https://api.staging-cd.crossfeed.cyber.dhs.gov/pe/apiv1/crossfeed_vulns', + method: 'POST', + headers: { + Authorization: String(process.env.CF_API_KEY), + access_token: String(process.env.PE_API_KEY), + 'Content-Type': '' // This is needed or else it breaks because axios defaults to application/json + }, + data: { + org_acronym: org_acronym + } + }); + if (response.status >= 200 && response.status < 300) { + console.log('Task request was successful'); + } else { + console.log('Task request failed'); + } + return response.data as TaskResponse; + } catch (error) { + console.log(`Error making POST request: ${error}`); + } +}; + +const fetchPEVulnData = async (scan_name: string, task_id: string) => { + console.log('Creating task to fetch CVE data'); + try { + const response = await axios({ + url: `https://api.staging-cd.crossfeed.cyber.dhs.gov/pe/apiv1/crossfeed_vulns/task/?task_id=${task_id}&scan_name=${scan_name}`, + headers: { + Authorization: String(process.env.CF_API_KEY), + access_token: String(process.env.PE_API_KEY), + 'Content-Type': '' // This is needed or else it breaks because axios defaults to application/json + } + }); + if (response.status >= 200 && response.status < 300) { + console.log('Request was successful'); + } else { + console.log('Request failed'); + } + return response.data as TaskResponse; + } catch (error) { + console.log(`Error making GET request: ${error}`); + } +}; + +export const handler = async (commandOptions: CommandOptions) => { + console.log( + `Scanning PE database for vulnerabilities & services for all orgs` + ); + try { + // Get all organizations + await connectToDatabase(); + const allOrgs: Organization[] = await Organization.find(); + + // For each organization, fetch vulnerability data + for (const org of allOrgs) { + console.log( + `Scanning PE database for vulnerabilities & services for ${org.acronym}, ${org.name}` + ); + // Start API task + const data = await fetchPEVulnTask(org.acronym); + if (data?.tasks_dict === undefined) { + console.error( + `Failed to start P&E API task for org: ${org.acronym}, ${org.name}` + ); + continue; + } + let allVulns: UniversalCrossfeedVuln[] = []; + + // For each task, call endpoint to get data + for (const scan_name in data.tasks_dict) { + const task_id = data.tasks_dict[scan_name]; + let response = await fetchPEVulnData(scan_name, task_id); + while (response && response.status === 'Pending') { + await sleep(1000); + response = await fetchPEVulnData(scan_name, task_id); + } + if (response && response.status === 'Failure') { + console.error( + `Failed fetching data for task id: ${task_id} for org ${org.acronym}, ${org.name}` + ); + continue; // Go to the next item in the for loop + } + allVulns = allVulns.concat(response?.result ?? []); + await sleep(1000); // Delay between API requests + } + + // For each vulnerability, save assets + for (const vuln of allVulns ?? []) { + // Save discovered domains and ips to the Domain table + let domainId; + let service_domain; + let service_ip; + let ipOnly = false; + try { + // Lookup domain based on IP + if (vuln.service_asset_type === 'ip') { + service_ip = vuln.service_asset; + try { + service_domain = (await dns.promises.reverse(service_ip))[0]; + console.log(service_domain); + } catch { + console.log(`Setting domain to IP: ${service_ip}`); + service_domain = service_ip; + ipOnly = true; + } + service_ip = vuln.service_asset; + // Lookup IP based on domain + } else { + service_domain = vuln.service_asset; + try { + service_ip = (await dns.promises.lookup(service_domain)).address; + } catch { + service_ip = null; + } + } + [domainId] = await saveDomainsReturn([ + plainToClass(Domain, { + name: service_domain, + ip: service_ip, + organization: { id: org.id }, + fromRootDomain: !ipOnly + ? service_domain.split('.').slice(-2).join('.') + : null, + discoveredBy: { id: commandOptions.scanId }, + subdomainSource: `P&E - ${vuln.source}`, + ipOnly: ipOnly + }) + ]); + console.log(`Successfully saved domain with id: ${domainId}`); + } catch (e) { + console.error(`Failed to save domain ${vuln.service_asset}`); + console.error(e); + console.error('Continuing to next vulnerability'); + continue; + } + + let serviceId; + if (vuln.port != null) { + try { + // Save discovered services to the Service table + [serviceId] = await saveServicesToDb([ + plainToClass(Service, { + domain: { id: domainId }, + discoveredBy: { id: commandOptions.scanId }, + port: vuln.port, + lastSeen: new Date(vuln.last_seen), + banner: + vuln.banner == null ? null : sanitizeStringField(vuln.banner), + serviceSource: vuln.source, + shodanResults: + vuln.source === 'shodan' + ? { + product: vuln.product, + version: vuln.version, + cpe: vuln.cpe + } + : {} + }) + ]); + console.log('Saved services.'); + } catch (e) { + console.error( + 'Could not save services. Continuing to next vulnerability.' + ); + console.error(e); + continue; + } + } + + try { + const vulns: Vulnerability[] = []; + vulns.push( + plainToClass(Vulnerability, { + domain: domainId, + lastSeen: vuln.last_seen, + title: vuln.title, + cve: vuln.cve, + cwe: vuln.cwe, + description: vuln.description, + cvss: vuln.cvss, + severity: vuln.severity, + state: vuln.state, + structuredData: vuln.structuredData, + source: vuln.source, + needsPopulation: vuln.needsPopulation, + service: vuln.port == null ? null : { id: serviceId } + }) + ); + await saveVulnerabilitiesToDb(vulns, false); + } catch (e) { + console.error('Could not save vulnerabilities. Continuing.'); + console.error(e); + } + } + } + } catch (e) { + console.error('Unknown failure.'); + console.error(e); + } + await sleep(1000); // Do avoid overloading the P&E API + console.log(`Finished retrieving PE vulns for all orgs`); +}; diff --git a/backend/src/tasks/wappalyzer.ts b/backend/src/tasks/wappalyzer.ts new file mode 100644 index 00000000..91d0c273 --- /dev/null +++ b/backend/src/tasks/wappalyzer.ts @@ -0,0 +1,85 @@ +import axios, { AxiosError } from 'axios'; +import { CommandOptions } from './ecs-client'; +import { getLiveWebsites, LiveDomain } from './helpers/getLiveWebsites'; +import PQueue from 'p-queue'; +import { wappalyzer } from './helpers/simple-wappalyzer'; + +const wappalyze = async (domain: LiveDomain): Promise => { + try { + console.log(`Executing wapplyzer on ${domain.url}`); + + const { data, status, headers } = await axios.get(domain.url, { + timeout: 10000, + validateStatus: () => true + }); + + // only response with HTTPStatusCode lesser than 5xx are "wappalyzed" + if (status < 500) { + const result = wappalyzer({ data, url: domain.url, headers }); + if (result.length > 0) { + const filteredResults = result.filter((e) => e?.technology); + + // no need to save if there are no technologies results. Reducing database traffic. + if (filteredResults.length > 0) { + domain.service.wappalyzerResults = filteredResults; + await domain.service.save(); + console.log( + `${domain.url} - ${filteredResults.length} technology matches saved.` + ); + } else { + console.log( + `${domain.url} - there were no technology matches for domain.` + ); + } + } + } else { + console.log( + `${domain.url} returned and HTTP error code. HTTPStatusCode: ${status}` + ); + } + } catch (e) { + if (e instanceof AxiosError) { + const error = e as AxiosError; + if (error.response) { + // a response was received but we failed after the response + console.error(`${domain.url} returned error. + Code: ${error.code}. + Response: ${error.response}`); + } else if (error.code === 'ECONNABORTED') { + // request timed out + console.error( + `${domain.url} domain did not respond in a timely manner: ${error.message}` + ); + } else { + // other errors + console.error( + `${domain.url} - Axios unexpected error. + Code (if any): ${error.code}. + Error: ${JSON.stringify(error, null, 4)}` + ); + } + } else { + console.error( + `${domain.url} - Unknown unexpected error. + Type: ${e.typeof}. + Error: ${JSON.stringify(e, null, 4)}` + ); + } + } +}; + +export const handler = async (commandOptions: CommandOptions) => { + const { organizationId, organizationName } = commandOptions; + + console.log(`Running wappalyzer on organization ${organizationName}`); + + const liveWebsites = await getLiveWebsites(organizationId!); + const queue = new PQueue({ concurrency: 5 }); + await Promise.all( + liveWebsites.map((site) => queue.add(() => wappalyze(site))) + ); + + console.log( + `Wappalyzer finished for organization ${organizationName} on ${liveWebsites.length} domains` + ); +}; diff --git a/backend/src/tasks/webscraper.ts b/backend/src/tasks/webscraper.ts new file mode 100644 index 00000000..d1a2240a --- /dev/null +++ b/backend/src/tasks/webscraper.ts @@ -0,0 +1,166 @@ +import { + connectToDatabase, + Domain, + Organization, + Scan, + Service +} from '../models'; +import { CommandOptions } from './ecs-client'; +import { getLiveWebsites } from './helpers/getLiveWebsites'; +import { spawn } from 'child_process'; +import * as path from 'path'; +import { writeFileSync } from 'fs'; +import saveWebpagesToDb from './helpers/saveWebpagesToDb'; +import * as readline from 'readline'; +import PQueue from 'p-queue'; +import { chunk } from 'lodash'; +import { In } from 'typeorm'; +import getScanOrganizations from './helpers/getScanOrganizations'; + +const WEBSCRAPER_DIRECTORY = '/app/worker/webscraper'; +const INPUT_PATH = path.join(WEBSCRAPER_DIRECTORY, 'domains.txt'); +const WEBPAGE_DB_BATCH_LENGTH = process.env.IS_LOCAL ? 2 : 10; + +// Sync this with backend/worker/webscraper/webscraper/items.py +export interface ScraperItem { + url: string; + status: number; + domain_name: string; + response_size: number; + + body: string; + headers: { name: string; value: string }[]; + + domain?: { id: string }; + discoveredBy?: { id: string }; +} + +export const handler = async (commandOptions: CommandOptions) => { + const { chunkNumber, numChunks, organizationId, scanId } = commandOptions; + + await connectToDatabase(); + + const scan = await Scan.findOne( + { id: scanId }, + { relations: ['organizations', 'tags', 'tags.organizations'] } + ); + + let orgs: string[] | undefined = undefined; + // webscraper is a global scan, so organizationId is only specified for tests. + // Otherwise, scan.organizations can be used for granular control of webscraper. + if (organizationId) orgs = [organizationId]; + else if (scan?.isGranular) { + orgs = getScanOrganizations(scan).map((org) => org.id); + } + + const where = orgs?.length ? { id: In(orgs) } : {}; + const organizations = await Organization.find({ where, select: ['id'] }); + const organizationIds = ( + chunk(organizations, numChunks)[chunkNumber!] || [] + ).map((e) => e.id); + console.log('Running webscraper on organizations ', organizationIds); + + const liveWebsites = await getLiveWebsites(undefined, organizationIds); + const urls = liveWebsites.map((domain) => domain.url); + console.log('input urls', urls); + if (urls.length === 0) { + console.log('no urls, returning'); + return; + } + + writeFileSync(INPUT_PATH, urls.join('\n')); + + const liveWebsitesMap: { [x: string]: Domain } = {}; + for (const domain of liveWebsites) { + liveWebsitesMap[domain.name] = domain; + } + let totalNumWebpages = 0; + const queue = new PQueue({ concurrency: 1 }); + + const scrapyProcess = spawn( + 'scrapy', + ['crawl', 'main', '-a', `domains_file=${INPUT_PATH}`], + { + cwd: WEBSCRAPER_DIRECTORY, + env: { + ...process.env, + HTTP_PROXY: process.env.GLOBAL_AGENT_HTTP_PROXY, + HTTPS_PROXY: process.env.GLOBAL_AGENT_HTTP_PROXY + }, + stdio: 'pipe' + } + ); + + const readInterface = readline.createInterface({ + // Database output + input: scrapyProcess.stdout + }); + const readInterfaceStderr = readline.createInterface({ + // Scrapy logs + input: scrapyProcess.stderr + }); + + await new Promise((resolve, reject) => { + console.log('Going to save webpages to the database...'); + let scrapedWebpages: ScraperItem[] = []; + readInterfaceStderr.on('line', (line) => + console.error(line?.substring(0, 999)) + ); + readInterface.on('line', async (line) => { + if (!line?.trim() || line.indexOf('database_output: ') === -1) { + console.log(line); + return; + } + const item: ScraperItem = JSON.parse( + line.slice( + line.indexOf('database_output: ') + 'database_output: '.length + ) + ); + const domain = liveWebsitesMap[item.domain_name]; + if (!domain) { + console.error( + `No corresponding domain found for item with domain_name ${item.domain_name}.` + ); + return; + } + scrapedWebpages.push({ + ...item, + domain: { id: domain.id }, + discoveredBy: { id: scanId } + }); + if (scrapedWebpages.length >= WEBPAGE_DB_BATCH_LENGTH) { + await queue.onIdle(); + queue.add(async () => { + if (scrapedWebpages.length === 0) { + return; + } + console.log( + `Saving ${scrapedWebpages.length} webpages, starting with ${scrapedWebpages[0].url}...` + ); + await saveWebpagesToDb(scrapedWebpages); + totalNumWebpages += scrapedWebpages.length; + scrapedWebpages = []; + }); + } + }); + + readInterface.on('close', async () => { + await queue.onIdle(); + if (scrapedWebpages.length > 0) { + console.log( + `Saving ${scrapedWebpages.length} webpages to the database...` + ); + await saveWebpagesToDb(scrapedWebpages); + totalNumWebpages += scrapedWebpages.length; + scrapedWebpages = []; + } + resolve(undefined); + }); + readInterface.on('SIGINT', reject); + readInterface.on('SIGCONT', reject); + readInterface.on('SIGTSTP', reject); + }); + console.log( + `Webscraper finished for ${liveWebsites.length} domains, saved ${totalNumWebpages} webpages in total` + ); +}; diff --git a/backend/src/tools/consumeControlQueue.ts b/backend/src/tools/consumeControlQueue.ts new file mode 100644 index 00000000..87289464 --- /dev/null +++ b/backend/src/tools/consumeControlQueue.ts @@ -0,0 +1,42 @@ +// Script to setup Control Queue locally so when messages are sent to it, +// the scanExecution lambda is triggered +import { handler as scanExecution } from '../tasks/scanExecution'; +const amqp = require('amqplib'); +import * as dotenv from 'dotenv'; +import * as path from 'path'; + +async function consumeControlQueue() { + // Load the environment variables from the .env file + const envPath = path.resolve(__dirname, '../../.env'); + dotenv.config({ path: envPath }); + console.log(process.env.SHODAN_QUEUE_URL); + + // Connect to RabbitMQ + const connection = await amqp.connect('amqp://rabbitmq'); + const channel = await connection.createChannel(); + const controlQueue = 'ControlQueue'; + + await channel.assertQueue(controlQueue, { durable: true }); + + console.log('Waiting for messages from ControlQueue...'); + + channel.consume(controlQueue, (message) => { + if (message !== null) { + const payload = JSON.parse(message.content.toString()); + + // Trigger your local Lambda function here + console.log('Received message:', payload); + + // Call scanExecution with the payload from message + scanExecution( + { Records: [{ body: JSON.stringify(payload) }] }, + {} as any, + () => null + ); + + channel.ack(message); + } + }); +} + +consumeControlQueue(); diff --git a/backend/src/tools/generate-types.ts b/backend/src/tools/generate-types.ts new file mode 100644 index 00000000..953f2a74 --- /dev/null +++ b/backend/src/tools/generate-types.ts @@ -0,0 +1,96 @@ +import axios from 'axios'; +import { compile, JSONSchema } from 'json-schema-to-typescript'; +import * as fs from 'fs'; +import * as path from 'path'; + +/** + * Converts censys schema to JSON Schema. + * @param data + */ +function convertToJSONSchema(data) { + const typeMap = { + STRING: 'string', + BOOLEAN: 'boolean', + INTEGER: 'string', // number types are rendered as strings in the JSON data + NUMBER: 'string', + TIMESTAMP: 'string', + DATETIME: 'string', + FLOAT: 'number' + }; + + let schema; + if (data.repeated) { + schema = { type: 'array', items: {}, description: data.doc }; + schema.items = convertToJSONSchema({ ...data, repeated: false }); + } + if (data.fields) { + schema = { type: 'object', properties: {}, description: data.doc }; + for (const fieldName of Object.keys(data.fields)) { + schema.properties[fieldName] = convertToJSONSchema( + data.fields[fieldName] + ); + } + } else { + if (!typeMap[data.type]) { + console.error(data.type); + throw new Error('Unrecognized type' + data.type); + } + schema = { type: typeMap[data.type], description: data.doc }; + } + return schema; +} + +/** + * Generates typescript models from the Censys IPV4 BigQuery dataset schema. + * Converts BigQuery schema -> JSON Schema -> typescript definition + */ +const generateCensysTypes = async ( + url: string, + typeName: string, + fileName: string +) => { + const { data, status, headers } = await axios.get(url); + const schema = convertToJSONSchema(data); + generateTypeFromJSONSchema(schema, typeName, fileName); +}; + +/** + * Converts JSON Schema -> typescript definition + */ +const generateTypeFromJSONSchema = async ( + schema: JSONSchema, + typeName: string, + fileName: string +) => { + const types = await compile(schema, typeName, { + bannerComment: `/* tslint:disable */\n/**\n* This file was automatically generated by json-schema-to-typescript.\n* DO NOT MODIFY IT BY HAND. Instead, run "npm run codegen" to regenerate this file.\n*/` + }); + fs.writeFileSync( + path.join(__dirname, '..', 'models', 'generated', fileName), + types + ); +}; + +(async () => { + await generateCensysTypes( + 'https://censys.io/static/data/definitions-ipv4-bq.json', + 'CensysIpv4Data', + 'censysIpv4.ts' + ); + await generateCensysTypes( + 'https://censys.io/static/data/definitions-certificates-bq.json', + 'CensysCertificatesData', + 'censysCertificates.ts' + ); + const { data } = await axios.get( + 'https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities_schema.json' + ); + // TODO: once CISA fixes their JSON Schema to be valid JSON, we can remove this .replace() function, + // which removes an extra comma in the JSON. + await generateTypeFromJSONSchema( + JSON.parse(data.replace(/("dueDate"\: [\s\S]*?\}),/, '$1')), + 'kevData', + 'kev.ts' + ); + process.exit(); +})(); diff --git a/backend/src/tools/run-pesyncdb.ts b/backend/src/tools/run-pesyncdb.ts new file mode 100644 index 00000000..fa6a36b2 --- /dev/null +++ b/backend/src/tools/run-pesyncdb.ts @@ -0,0 +1,15 @@ +import { handler as pesyncdb } from '../tasks/pesyncdb'; + +/** + * Runs pesyncdb locally. This script is called from running "npm run pesyncdb". + * */ + +process.env.DB_HOST = 'db'; +process.env.DB_USERNAME = 'crossfeed'; +process.env.DB_PASSWORD = 'password'; +process.env.DB_NAME = 'crossfeed'; +process.env.PE_DB_NAME = 'pe'; +process.env.PE_DB_USERNAME = 'pe'; +process.env.PE_DB_PASSWORD = 'password'; + +pesyncdb('', {} as any, () => null); diff --git a/backend/src/tools/run-syncdb.ts b/backend/src/tools/run-syncdb.ts new file mode 100644 index 00000000..eb9ee4ba --- /dev/null +++ b/backend/src/tools/run-syncdb.ts @@ -0,0 +1,16 @@ +import { handler as syncdb } from '../tasks/syncdb'; + +/** + * Runs syncdb locally. This script is called from running "npm run syncdb". + * Call "npm run syncdb -- -d dangerouslyforce" to force dropping and + * recreating the SQL database. + * Call "npm run syncdb -- -d populate" to populate the database + * with some sample data. + * */ + +process.env.DB_HOST = 'db'; +process.env.DB_USERNAME = 'crossfeed'; +process.env.DB_PASSWORD = 'password'; +process.env.ELASTICSEARCH_ENDPOINT = 'http://es:9200'; + +syncdb(process.argv[2] === '-d' ? process.argv[3] : '', {} as any, () => null); diff --git a/backend/src/worker.ts b/backend/src/worker.ts new file mode 100644 index 00000000..0e4cdebd --- /dev/null +++ b/backend/src/worker.ts @@ -0,0 +1,106 @@ +import { bootstrap } from 'global-agent'; +import { CommandOptions } from './tasks/ecs-client'; +import { handler as amass } from './tasks/amass'; +import { handler as censys } from './tasks/censys'; +import { handler as findomain } from './tasks/findomain'; +import { handler as portscanner } from './tasks/portscanner'; +import { handler as wappalyzer } from './tasks/wappalyzer'; +import { handler as censysIpv4 } from './tasks/censysIpv4'; +import { handler as censysCertificates } from './tasks/censysCertificates'; +import { handler as savedSearch } from './tasks/saved-search'; +import { handler as sslyze } from './tasks/sslyze'; +import { handler as searchSync } from './tasks/search-sync'; +import { handler as intrigueIdent } from './tasks/intrigue-ident'; +import { handler as cve } from './tasks/cve'; +import { handler as dotgov } from './tasks/dotgov'; +import { handler as webscraper } from './tasks/webscraper'; +import { handler as shodan } from './tasks/shodan'; +import { handler as testProxy } from './tasks/test-proxy'; +import { handler as hibp } from './tasks/hibp'; +import { handler as lookingGlass } from './tasks/lookingGlass'; +import { handler as dnstwist } from './tasks/dnstwist'; +import { handler as rootDomainSync } from './tasks/rootDomainSync'; +import { handler as trustymail } from './tasks/trustymail'; +import { handler as cveSync } from './tasks/cve-sync'; +import { handler as vulnSync } from './tasks/vuln-sync'; +import { SCAN_SCHEMA } from './api/scans'; +import { connectToDatabase } from './models'; +import fetchPublicSuffixList from './tasks/helpers/fetchPublicSuffixList'; + +/** + * Worker entrypoint. + */ +async function main() { + const commandOptions: CommandOptions = JSON.parse( + process.env.CROSSFEED_COMMAND_OPTIONS || '{}' + ); + console.log('commandOptions are', commandOptions); + + const { scanName = 'test', organizations = [] } = commandOptions; + + const scanFn: any = { + amass, + censys, + censysIpv4, + censysCertificates, + cveSync, + sslyze, + searchSync, + cve, + dotgov, + findomain, + portscanner, + wappalyzer, + intrigueIdent, + webscraper, + savedSearch, + shodan, + hibp, + lookingGlass, + dnstwist, + testProxy, + rootDomainSync, + trustymail, + vulnSync, + test: async () => { + await connectToDatabase(); + console.log('test'); + } + }[scanName]; + if (!scanFn) { + throw new Error('Invalid scan name ' + scanName); + } + + if (scanName === 'sslyze') { + // No proxy + } else { + bootstrap(); + } + + if (scanName === 'trustymail') { + await fetchPublicSuffixList(); + } + + const { global } = SCAN_SCHEMA[scanName]; + + if (global) { + await scanFn(commandOptions); + } else { + // For non-global scans, since a single ScanTask can correspond to + // multiple organizations, we run scanFn for each particular + // organization here by passing in the current organization's + // name and id into commandOptions. + for (const organization of organizations) { + await scanFn({ + ...commandOptions, + organizations: [], + organizationId: organization.id, + organizationName: organization.name + }); + } + } + + process.exit(); +} + +main(); diff --git a/backend/test/__snapshots__/auth.test.ts.snap b/backend/test/__snapshots__/auth.test.ts.snap new file mode 100644 index 00000000..a538e25f --- /dev/null +++ b/backend/test/__snapshots__/auth.test.ts.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`auth login success 1`] = ` +Object { + "nonce": "3ac04a92b121fce3fc5ca95251e70205d764147731", + "redirectUrl": "https://idp.int.identitysandbox.gov/openid_connect/authorize?client_id=urn%3Agov%3Agsa%3Aopenidconnect.profiles%3Asp%3Asso%3Acisa%3Acrossfeed&scope=openid%20email&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%2F&acr_values=http%3A%2F%2Fidmanagement.gov%2Fns%2Fassurance%2Fial%2F1&nonce=3ac04a92b121fce3fc5ca95251e70205d764147731&state=258165a7dc37ce6034e74815e991606d49fd52240e469f&prompt=select_account", + "state": "258165a7dc37ce6034e74815e991606d49fd52240e469f", +} +`; diff --git a/backend/test/__snapshots__/index.test.ts.snap b/backend/test/__snapshots__/index.test.ts.snap new file mode 100644 index 00000000..2d0cc123 --- /dev/null +++ b/backend/test/__snapshots__/index.test.ts.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`GET / should return 200 1`] = `Object {}`; diff --git a/backend/test/__snapshots__/organizations.test.ts.snap b/backend/test/__snapshots__/organizations.test.ts.snap new file mode 100644 index 00000000..ef52e91b --- /dev/null +++ b/backend/test/__snapshots__/organizations.test.ts.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`organizations create can't add organization with the same acronym 1`] = `Object {}`; diff --git a/backend/test/__snapshots__/saved-searches.test.ts.snap b/backend/test/__snapshots__/saved-searches.test.ts.snap new file mode 100644 index 00000000..efd26fcd --- /dev/null +++ b/backend/test/__snapshots__/saved-searches.test.ts.snap @@ -0,0 +1,21 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`saved-search create create by user should succeed 1`] = ` +Object { + "count": 3, + "createVulnerabilities": false, + "createdAt": Any, + "createdBy": Object { + "id": Any, + }, + "filters": Array [], + "id": Any, + "name": Any, + "searchPath": "", + "searchTerm": "", + "sortDirection": "", + "sortField": "", + "updatedAt": Any, + "vulnerabilityTemplate": Object {}, +} +`; diff --git a/backend/test/__snapshots__/search.test.ts.snap b/backend/test/__snapshots__/search.test.ts.snap new file mode 100644 index 00000000..02d550a8 --- /dev/null +++ b/backend/test/__snapshots__/search.test.ts.snap @@ -0,0 +1,280 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`buildRequest sample request by global admin 1`] = ` +Object { + "aggs": Object { + "fromRootDomain": Object { + "terms": Object { + "field": "fromRootDomain.keyword", + }, + }, + "name": Object { + "terms": Object { + "field": "name.keyword", + }, + }, + "organization": Object { + "terms": Object { + "field": "organization.name.keyword", + }, + }, + "services": Object { + "aggs": Object { + "name": Object { + "terms": Object { + "field": "services.service.keyword", + }, + }, + "port": Object { + "terms": Object { + "field": "services.port", + }, + }, + "products": Object { + "aggs": Object { + "cpe": Object { + "terms": Object { + "field": "services.products.cpe.keyword", + }, + }, + }, + "nested": Object { + "path": "products", + }, + }, + }, + "nested": Object { + "path": "services", + }, + }, + "vulnerabilities": Object { + "aggs": Object { + "cve": Object { + "terms": Object { + "field": "vulnerabilities.cve.keyword", + }, + }, + "severity": Object { + "terms": Object { + "field": "vulnerabilities.severity.keyword", + }, + }, + }, + "nested": Object { + "path": "vulnerabilities", + }, + }, + }, + "highlight": Object { + "fields": Object { + "name": Object {}, + }, + "fragment_size": 200, + "number_of_fragments": 1, + }, + "query": Object { + "bool": Object { + "must": Array [ + Object { + "match": Object { + "parent_join": "domain", + }, + }, + Object { + "bool": Object { + "should": Array [ + Object { + "query_string": Object { + "analyze_wildcard": true, + "fields": Array [ + "*", + ], + "query": "term", + }, + }, + Object { + "has_child": Object { + "inner_hits": Object { + "_source": Array [ + "webpage_url", + ], + "highlight": Object { + "fields": Object { + "webpage_body": Object {}, + }, + "fragment_size": 50, + "number_of_fragments": 3, + }, + }, + "query": Object { + "query_string": Object { + "analyze_wildcard": true, + "fields": Array [ + "*", + ], + "query": "term", + }, + }, + "type": "webpage", + }, + }, + ], + }, + }, + ], + }, + }, + "size": 25, + "sort": Array [ + Object { + "name.keyword": "asc", + }, + ], +} +`; + +exports[`buildRequest sample request by non-global admin 1`] = ` +Object { + "aggs": Object { + "fromRootDomain": Object { + "terms": Object { + "field": "fromRootDomain.keyword", + }, + }, + "name": Object { + "terms": Object { + "field": "name.keyword", + }, + }, + "organization": Object { + "terms": Object { + "field": "organization.name.keyword", + }, + }, + "services": Object { + "aggs": Object { + "name": Object { + "terms": Object { + "field": "services.service.keyword", + }, + }, + "port": Object { + "terms": Object { + "field": "services.port", + }, + }, + "products": Object { + "aggs": Object { + "cpe": Object { + "terms": Object { + "field": "services.products.cpe.keyword", + }, + }, + }, + "nested": Object { + "path": "products", + }, + }, + }, + "nested": Object { + "path": "services", + }, + }, + "vulnerabilities": Object { + "aggs": Object { + "cve": Object { + "terms": Object { + "field": "vulnerabilities.cve.keyword", + }, + }, + "severity": Object { + "terms": Object { + "field": "vulnerabilities.severity.keyword", + }, + }, + }, + "nested": Object { + "path": "vulnerabilities", + }, + }, + }, + "highlight": Object { + "fields": Object { + "name": Object {}, + }, + "fragment_size": 200, + "number_of_fragments": 1, + }, + "query": Object { + "bool": Object { + "must": Array [ + Object { + "terms": Object { + "organization.id.keyword": Array [ + "id1", + ], + }, + }, + Object { + "bool": Object { + "must": Array [ + Object { + "match": Object { + "parent_join": "domain", + }, + }, + Object { + "bool": Object { + "should": Array [ + Object { + "query_string": Object { + "analyze_wildcard": true, + "fields": Array [ + "*", + ], + "query": "term", + }, + }, + Object { + "has_child": Object { + "inner_hits": Object { + "_source": Array [ + "webpage_url", + ], + "highlight": Object { + "fields": Object { + "webpage_body": Object {}, + }, + "fragment_size": 50, + "number_of_fragments": 3, + }, + }, + "query": Object { + "query_string": Object { + "analyze_wildcard": true, + "fields": Array [ + "*", + ], + "query": "term", + }, + }, + "type": "webpage", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + "size": 25, + "sort": Array [ + Object { + "name.keyword": "asc", + }, + ], +} +`; diff --git a/backend/test/__snapshots__/stats.test.ts.snap b/backend/test/__snapshots__/stats.test.ts.snap new file mode 100644 index 00000000..059ab249 --- /dev/null +++ b/backend/test/__snapshots__/stats.test.ts.snap @@ -0,0 +1,197 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`stats get get by globalView should filter domains to a single org if specified 1`] = ` +Object { + "domains": Object { + "numVulnerabilities": Array [ + Object { + "id": Any, + "label": Any, + "value": 1, + }, + ], + "ports": Array [ + Object { + "id": "80", + "label": "80", + "value": 1, + }, + ], + "services": Array [ + Object { + "id": "http", + "label": "http", + "value": 1, + }, + ], + "total": 1, + }, + "vulnerabilities": Object { + "byOrg": Array [ + Object { + "id": Any, + "label": Any, + "orgId": Any, + "value": 1, + }, + ], + "latestVulnerabilities": Array [ + Object { + "actions": Array [], + "cpe": null, + "createdAt": Any, + "cve": null, + "cvss": "9", + "cwe": null, + "description": "", + "domain": Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": Any, + "fromRootDomain": null, + "id": Any, + "ip": null, + "ipOnly": false, + "name": Any, + "reverseName": Any, + "screenshot": null, + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": Any, + }, + "id": Any, + "isKev": false, + "kevResults": Object {}, + "lastSeen": null, + "needsPopulation": false, + "notes": "", + "references": Array [], + "severity": "Critical", + "source": "cpe2cve", + "state": "open", + "structuredData": Object {}, + "substate": "unconfirmed", + "title": "vuln title", + "updatedAt": Any, + }, + ], + "mostCommonVulnerabilities": Array [ + Object { + "count": "1", + "description": "", + "severity": "Critical", + "title": "vuln title", + }, + ], + "severity": Array [ + Object { + "id": "Critical", + "label": "Critical", + "value": 1, + }, + ], + }, +} +`; + +exports[`stats get get by org user should return only domains from that org 1`] = ` +Object { + "domains": Object { + "numVulnerabilities": Array [ + Object { + "id": Any, + "label": Any, + "value": 1, + }, + ], + "ports": Array [ + Object { + "id": "80", + "label": "80", + "value": 1, + }, + ], + "services": Array [ + Object { + "id": "http", + "label": "http", + "value": 1, + }, + ], + "total": 1, + }, + "vulnerabilities": Object { + "byOrg": Array [ + Object { + "id": Any, + "label": Any, + "orgId": Any, + "value": 1, + }, + ], + "latestVulnerabilities": Array [ + Object { + "actions": Array [], + "cpe": null, + "createdAt": Any, + "cve": null, + "cvss": "9", + "cwe": null, + "description": "", + "domain": Object { + "asn": null, + "censysCertificatesResults": Object {}, + "cloudHosted": false, + "country": null, + "createdAt": Any, + "fromRootDomain": null, + "id": Any, + "ip": null, + "ipOnly": false, + "name": Any, + "reverseName": Any, + "screenshot": null, + "ssl": null, + "subdomainSource": null, + "syncedAt": null, + "trustymailResults": Object {}, + "updatedAt": Any, + }, + "id": Any, + "isKev": false, + "kevResults": Object {}, + "lastSeen": null, + "needsPopulation": false, + "notes": "", + "references": Array [], + "severity": "Critical", + "source": "cpe2cve", + "state": "open", + "structuredData": Object {}, + "substate": "unconfirmed", + "title": "vuln title", + "updatedAt": Any, + }, + ], + "mostCommonVulnerabilities": Array [ + Object { + "count": "1", + "description": "", + "severity": "Critical", + "title": "vuln title", + }, + ], + "severity": Array [ + Object { + "id": "Critical", + "label": "Critical", + "value": 1, + }, + ], + }, +} +`; diff --git a/backend/test/api-keys.test.ts b/backend/test/api-keys.test.ts new file mode 100644 index 00000000..0039a589 --- /dev/null +++ b/backend/test/api-keys.test.ts @@ -0,0 +1,238 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { User, connectToDatabase, ApiKey, UserType } from '../src/models'; +import { createUserToken } from './util'; + +jest.mock('../src/tasks/scheduler', () => ({ + handler: jest.fn() +})); + +describe('api-key', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + describe('generate', () => { + it('generate by user should succeed', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const response = await request(app) + .post('/api-keys') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .send({}) + .expect(200); + const response2 = await request(app) + .get('/users/me') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .expect(200); + + expect(response.body.hashedKey).toEqual( + response2.body.apiKeys[0].hashedKey + ); + expect(response.body.key.substr(-4)).toEqual( + response2.body.apiKeys[0].lastFour + ); + expect(response2.body.apiKeys).toHaveLength(1); + // API key should not be returned + expect(response2.body.apiKeys[0].key).toEqual(undefined); + }); + it('delete by user for own key should succeed', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const apiKey = await ApiKey.create({ + hashedKey: '1234', + lastFour: '1234', + user: user + }).save(); + const response = await request(app) + .delete('/api-keys/' + apiKey.id) + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .send({}) + .expect(200); + + const response2 = await request(app) + .get('/users/me') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .expect(200); + + expect(response2.body.apiKeys).toHaveLength(0); + }); + it("delete by user for other user's key should fail", async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const user1 = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.GLOBAL_ADMIN + }).save(); + const apiKey = await ApiKey.create({ + hashedKey: '1234', + lastFour: '1234', + user: user + }).save(); + const response = await request(app) + .delete('/api-keys/' + apiKey.id) + .set( + 'Authorization', + createUserToken({ + id: user1.id, + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({}) + .expect(404); + + const response2 = await request(app) + .get('/users/me') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .expect(200); + + expect(response2.body.apiKeys).toHaveLength(1); + }); + it('using valid API key should succeed', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const response = await request(app) + .post('/api-keys') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .send({}) + .expect(200); + + const standardResponse = await request(app) + .get('/users/me') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .expect(200); + + const responseWithAPIKey = await request(app) + .get('/users/me') + .set('Authorization', response.body.key) + .expect(200); + + expect(JSON.stringify(standardResponse.body)).toEqual( + JSON.stringify(responseWithAPIKey.body) + ); + }); + it('using invalid API key should fail', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const response = await request(app) + .post('/api-keys') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .send({}) + .expect(200); + + const responseWithAPIKey = await request(app) + .get('/users/me') + .set('Authorization', '1234') + .expect(401); + }); + it('using revoked API key should fail', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const response = await request(app) + .post('/api-keys') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .send({}) + .expect(200); + + const response2 = await request(app) + .delete('/api-keys/' + response.body.id) + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .send({}) + .expect(200); + + const responseWithAPIKey = await request(app) + .get('/users/me') + .set('Authorization', response.body.key) + .expect(401); + }); + }); +}); diff --git a/backend/test/auth.test.ts b/backend/test/auth.test.ts new file mode 100644 index 00000000..307c48a8 --- /dev/null +++ b/backend/test/auth.test.ts @@ -0,0 +1,144 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { User } from '../src/models'; +jest.mock('../src/api/login-gov'); + +jest.mock('jsonwebtoken', () => ({ + verify: (a, b, cb) => { + cb(null, { + email: a.split('TOKEN_')[1], + email_verified: true, + sub: Math.random() + '' + }); + }, + sign: jest.requireActual('jsonwebtoken').sign +})); + +describe('auth', () => { + afterAll(async () => { + await new Promise((resolve) => setTimeout(() => resolve(), 500)); // avoid jest open handle error + }); + + describe('login', () => { + it('success', async () => { + const response = await request(app).post('/auth/login').expect(200); + expect(response.body).toMatchSnapshot(); + }); + }); + describe('callback', () => { + it('success with login.gov', async () => { + const response = await request(app) + .post('/auth/callback') + .send({ + code: 'CODE', + state: 'STATE', + origState: 'ORIGSTATE', + nonce: 'NONCE' + }) + .expect(200); + expect(response.body.token).toBeTruthy(); + expect(response.body.user).toBeTruthy(); + expect(response.body.user.email).toEqual('test@crossfeed.cisa.gov'); + const user = await User.findOne(response.body.user.id); + expect(user?.firstName).toEqual(''); + expect(user?.lastName).toEqual(''); + }); + it('success with cognito', async () => { + process.env.USE_COGNITO = '1'; + const response = await request(app) + .post('/auth/callback') + .send({ + token: 'TOKEN_test2@crossfeed.cisa.gov' + }) + .expect(200); + expect(response.body.token).toBeTruthy(); + expect(response.body.user).toBeTruthy(); + expect(response.body.user.email).toEqual('test2@crossfeed.cisa.gov'); + const user = await User.findOne(response.body.user.id); + expect(user?.firstName).toEqual(''); + expect(user?.lastName).toEqual(''); + process.env.USE_COGNITO = ''; + }); + + it('success with cognito with two different ids - should overwrite cognitoId', async () => { + process.env.USE_COGNITO = '1'; + let response = await request(app) + .post('/auth/callback') + .send({ + token: 'TOKEN_test3@crossfeed.cisa.gov' + }) + .expect(200); + expect(response.body.token).toBeTruthy(); + expect(response.body.user).toBeTruthy(); + expect(response.body.user.email).toEqual('test3@crossfeed.cisa.gov'); + const { id, cognitoId } = response.body.user; + expect(cognitoId).toBeTruthy(); + expect(id).toBeTruthy(); + + response = await request(app) + .post('/auth/callback') + .send({ + token: 'TOKEN_test3@crossfeed.cisa.gov' + }) + .expect(200); + const user = (await User.findOne(response.body.user.id)) as User; + expect(user.id).toEqual(id); + expect(user.cognitoId).not.toEqual(cognitoId); + process.env.USE_COGNITO = ''; + }); + + it('login with login.gov and later cognito should preserve ids', async () => { + let response = await request(app) + .post('/auth/callback') + .send({ + code: 'CODE', + state: 'STATE', + origState: 'ORIGSTATE', + nonce: 'NONCE' + }) + .expect(200); + expect(response.body.token).toBeTruthy(); + expect(response.body.user).toBeTruthy(); + expect(response.body.user.email).toEqual('test@crossfeed.cisa.gov'); + const { id, loginGovId } = response.body.user; + expect(id).toBeTruthy(); + expect(loginGovId).toBeTruthy(); + + process.env.USE_COGNITO = '1'; + response = await request(app) + .post('/auth/callback') + .send({ + token: 'TOKEN_test@crossfeed.cisa.gov' + }) + .expect(200); + expect(response.body.token).toBeTruthy(); + + const user = (await User.findOne(response.body.user.id)) as User; + expect(user.email).toEqual('test@crossfeed.cisa.gov'); + expect(user.id).toEqual(id); + expect(user.loginGovId).toEqual(loginGovId); + expect(user.cognitoId).toBeTruthy(); + process.env.USE_COGNITO = ''; + }); + + it('verify that the lastLoggedIn value is added to the database and updated', async () => { + process.env.USE_COGNITO = '1'; + const time_1 = new Date(Date.now()); + const response = await request(app) + .post('/auth/callback') + .send({ + token: 'TOKEN_test4@crossfeed.cisa.gov' + }) + .expect(200); + const time_2 = new Date(Date.now()); + expect(response.body.token).toBeTruthy(); + expect(response.body.user).toBeTruthy(); + expect(response.body.user.lastLoggedIn).toBeTruthy(); + expect( + response.body.user.lastLoggedIn > time_1 && + response.body.user.lastLoggedIn < time_2 + ); + process.env.USE_COGNITO = ''; + }); + }); +}); diff --git a/backend/test/cpes.test.ts b/backend/test/cpes.test.ts new file mode 100644 index 00000000..4651dfe6 --- /dev/null +++ b/backend/test/cpes.test.ts @@ -0,0 +1,49 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { Organization, Cpe, connectToDatabase } from '../src/models'; +import { createUserToken } from './util'; + +describe('cpes', () => { + let connection; + let organization: Organization; + let cpe: Cpe; + beforeAll(async () => { + connection = await connectToDatabase(); + cpe = Cpe.create({ + lastSeenAt: new Date(), + name: 'Test Product', + version: '1.0.0', + vendor: 'Test Vender' + }); + await cpe.save(); + organization = Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }); + await organization.save(); + }); + + afterAll(async () => { + await Cpe.delete(cpe.id); + await connection.close(); + }); + + describe('CPE API', () => { + it('should return a single CPE by id', async () => { + const response = await request(app) + .get(`/cpes/${cpe.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({}) + .expect(200); + expect(response.body.id).toEqual(cpe.id); + expect(response.body.name).toEqual(cpe.name); + }); + }); +}); diff --git a/backend/test/cves.test.ts b/backend/test/cves.test.ts new file mode 100644 index 00000000..fe887949 --- /dev/null +++ b/backend/test/cves.test.ts @@ -0,0 +1,63 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { Cve, Organization, connectToDatabase } from '../src/models'; +import { createUserToken } from './util'; + +// TODO: Add test for joining cpes and implement data from sample_data/cpes.json +describe('cves', () => { + let connection; + let cve: Cve; + let organization: Organization; + beforeAll(async () => { + connection = await connectToDatabase(); + cve = Cve.create({ + name: 'CVE-0001-0001' + }); + await cve.save(); + organization = Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }); + await organization.save(); + }); + + afterAll(async () => { + await Cve.delete(cve.id); + await Organization.delete(organization.id); + await connection.close(); + }); + describe('CVE API', () => { + it('should return a single CVE by name', async () => { + const response = await request(app) + .get(`/cves/name/${cve.name}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({}) + .expect(200); + expect(response.body.id).toEqual(cve.id); + expect(response.body.name).toEqual(cve.name); + }); + }); + describe('CVE API', () => { + it('should return a single CVE by id', async () => { + const response = await request(app) + .get(`/cves/${cve.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({}) + .expect(200); + expect(response.body.id).toEqual(cve.id); + expect(response.body.name).toEqual(cve.name); + }); + }); +}); diff --git a/backend/test/docker-events.test.ts b/backend/test/docker-events.test.ts new file mode 100644 index 00000000..cd1ea9a3 --- /dev/null +++ b/backend/test/docker-events.test.ts @@ -0,0 +1,99 @@ +import { listenForDockerEvents } from '../src/api/docker-events'; +import { handler as updateScanTaskStatus } from '../src/tasks/updateScanTaskStatus'; +import { Readable } from 'stream'; +import waitForExpect from 'wait-for-expect'; + +jest.mock('../src/tasks/updateScanTaskStatus', () => ({ + handler: jest.fn() +})); + +let event; +let stream: Readable; +jest.mock('dockerode', () => { + class MockDockerode { + async getEvents() { + stream = Readable.from([JSON.stringify(event)]); + return stream; + } + } + return MockDockerode; +}); + +afterEach(() => { + if (stream) { + stream.destroy(); + } +}); + +test('should listen to a start event', async () => { + event = { + status: 'start', + id: '9385a49c58efef1983ba56f5711b16b176f27b973252110e756e408894b3d0e9', + from: 'crossfeed-worker', + Type: 'container', + Action: 'start', + Actor: { + ID: '9385a49c58efef1983ba56f5711b16b176f27b973252110e756e408894b3d0e9', + Attributes: { + image: 'crossfeed-worker', + name: 'crossfeed_worker_cisa_censys_2681225' + } + }, + scope: 'local', + time: 1597458556, + timeNano: 1597458556898095000 + }; + listenForDockerEvents(); + await waitForExpect(() => { + expect(updateScanTaskStatus).toHaveBeenCalledWith( + { + detail: { + containers: [{}], + lastStatus: 'RUNNING', + stopCode: '', + stoppedReason: '', + taskArn: 'crossfeed_worker_cisa_censys_2681225' + } + }, + expect.anything(), + expect.anything() + ); + }); +}); + +test('should listen to a stop event', async () => { + event = { + status: 'die', + id: '9385a49c58efef1983ba56f5711b16b176f27b973252110e756e408894b3d0e9', + from: 'crossfeed-worker', + Type: 'container', + Action: 'die', + Actor: { + ID: '9385a49c58efef1983ba56f5711b16b176f27b973252110e756e408894b3d0e9', + Attributes: { + exitCode: '0', + image: 'crossfeed-worker', + name: 'crossfeed_worker_cisa_censys_2681225' + } + }, + scope: 'local', + time: 1597458571, + timeNano: 1597458571266194000 + }; + listenForDockerEvents(); + await waitForExpect(() => { + expect(updateScanTaskStatus).toHaveBeenCalledWith( + { + detail: { + containers: [{ exitCode: 0 }], + lastStatus: 'STOPPED', + stopCode: 'EssentialContainerExited', + stoppedReason: 'Essential container in task exited', + taskArn: 'crossfeed_worker_cisa_censys_2681225' + } + }, + expect.anything(), + expect.anything() + ); + }); +}); diff --git a/backend/test/domains.test.ts b/backend/test/domains.test.ts new file mode 100644 index 00000000..df029169 --- /dev/null +++ b/backend/test/domains.test.ts @@ -0,0 +1,455 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { + Domain, + connectToDatabase, + Organization, + Webpage, + OrganizationTag, + Service, + UserType +} from '../src/models'; +import { createUserToken } from './util'; +jest.mock('../src/tasks/s3-client'); +const saveCSV = require('../src/tasks/s3-client').saveCSV as jest.Mock; + +describe('domains', () => { + let organization; + let organization2; + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + }); + afterAll(async () => { + await connection.close(); + }); + + describe('export', () => { + it('export by org user should only return domains from that org', async () => { + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + await Service.create({ + domain, + port: 443, + wappalyzerResults: [ + { + technology: { + cpe: 'cpe:/a:software', + name: 'technology name', + slug: 'slug', + icon: 'icon', + website: 'website', + categories: [] + }, + version: '0.0.1' + } + ] + }).save(); + await Domain.create({ + name: name + '-2', + organization: organization2 + }).save(); + const response = await request(app) + .post('/domain/export') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + filters: { reverseName: name } + }) + .expect(200); + expect(response.body).toEqual({ url: 'http://mock_url' }); + expect(saveCSV).toBeCalledTimes(1); + expect(saveCSV.mock.calls[0][0]).toContain(name); + expect(saveCSV.mock.calls[0][0]).toContain('technology name'); + expect(saveCSV.mock.calls[0][0]).toContain('0.0.1'); + expect(saveCSV.mock.calls[0][0]).toContain('443'); + expect(saveCSV.mock.calls[0][0]).not.toContain(name + '-2'); + }); + }); + describe('list', () => { + it('list by org user should only return domains from that org', async () => { + const name = 'test-' + Math.random(); + await Domain.create({ + name, + organization + }).save(); + await Domain.create({ + name: name + '-2', + organization: organization2 + }).save(); + const response = await request(app) + .post('/domain/search') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + filters: { reverseName: name } + }) + .expect(200); + expect(response.body.count).toEqual(1); + expect(response.body.result[0].organization.name).toEqual( + organization.name + ); + }); + it('list by globalView should return domains from all orgs', async () => { + const name = 'test-' + Math.random(); + await Domain.create({ + name, + organization + }).save(); + await Domain.create({ + name: name + '-2', + organization: organization2 + }).save(); + const response = await request(app) + .post('/domain/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + filters: { reverseName: name } + }) + .expect(200); + expect(response.body.count).toEqual(2); + }); + it('list by globalView with org filter should only return domains from that org', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + await Domain.create({ + name: name + '-2', + organization: organization2 + }).save(); + const response = await request(app) + .post('/domain/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + filters: { organization: organization.id } + }) + .expect(200); + expect(response.body.count).toEqual(1); + expect(response.body.result[0].id).toEqual(domain.id); + }); + it('list by globalView with org name filter should only return domains from that org', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + await Domain.create({ + name: name + '-2', + organization: organization2 + }).save(); + const response = await request(app) + .post('/domain/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + filters: { organizationName: organization.name } + }) + .expect(200); + expect(response.body.count).toEqual(1); + expect(response.body.result[0].id).toEqual(domain.id); + }); + it('list by globalView with tag filter should only return domains from orgs with that tag', async () => { + const tag = await OrganizationTag.create({ + name: 'test-' + Math.random() + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + tags: [tag] + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + await Domain.create({ + name: name + '-2', + organization: organization2 + }).save(); + const response = await request(app) + .post('/domain/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + filters: { tag: tag.id } + }) + .expect(200); + expect(response.body.count).toEqual(1); + expect(response.body.result[0].id).toEqual(domain.id); + }); + it('list by org user with custom pageSize should work', async () => { + const name = 'test-' + Math.random(); + await Domain.create({ + name: name + '-1', + organization + }).save(); + await Domain.create({ + name: name + '-2', + organization + }).save(); + const response = await request(app) + .post('/domain/search') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + filters: { reverseName: name }, + pageSize: 1 + }) + .expect(200); + expect(response.body.count).toEqual(2); + expect(response.body.result.length).toEqual(1); + }); + it('list by org user with pageSize of -1 should return all domains', async () => { + const name = 'test-' + Math.random(); + await Domain.create({ + name: name + '-1', + organization + }).save(); + await Domain.create({ + name: name + '-2', + organization + }).save(); + const response = await request(app) + .post('/domain/search') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + filters: { reverseName: name }, + pageSize: -1 + }) + .expect(200); + expect(response.body.count).toEqual(2); + expect(response.body.result.length).toEqual(2); + }); + /*ToU tests begin here*/ + it("list by org user that hasn't signed the terms should fail", async () => { + const name = 'test-' + Math.random(); + await Domain.create({ + name, + organization + }).save(); + await Domain.create({ + name: name + '-2', + organization: organization2 + }).save(); + const response = await request(app) + .post('/domain/search') + .set( + 'Authorization', + createUserToken({ + dateAcceptedTerms: undefined, + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + filters: { reverseName: name } + }) + .expect(403); + expect(response.text).toContain('must accept terms'); + }); + + it("list by org user that hasn't signed the correct ToU should fail", async () => { + const name = 'test-' + Math.random(); + await Domain.create({ + name, + organization + }).save(); + await Domain.create({ + name: name + '-2', + organization: organization2 + }).save(); + const response = await request(app) + .post('/domain/search') + .set( + 'Authorization', + createUserToken({ + dateAcceptedTerms: new Date(), + acceptedTermsVersion: 'v0-user', + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + filters: { reverseName: name } + }) + .expect(403); + expect(response.text).toContain('must accept terms'); + }); + + it('list by org admin that has signed user level ToU should fail', async () => { + const name = 'test-' + Math.random(); + await Domain.create({ + name, + organization + }).save(); + await Domain.create({ + name: name + '-2', + organization: organization2 + }).save(); + const response = await request(app) + .post('/domain/search') + .set( + 'Authorization', + createUserToken({ + dateAcceptedTerms: new Date(), + acceptedTermsVersion: 'v1-user', + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + filters: { reverseName: name } + }) + .expect(403); + expect(response.text).toContain('must accept terms'); + }); + + it('list by org admin that has signed correct ToU should succeed', async () => { + const name = 'test-' + Math.random(); + await Domain.create({ + name, + organization + }).save(); + await Domain.create({ + name: name + '-2', + organization: organization2 + }).save(); + const response = await request(app) + .post('/domain/search') + .set( + 'Authorization', + createUserToken({ + dateAcceptedTerms: new Date(), + acceptedTermsVersion: 'v1-admin', + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + filters: { reverseName: name } + }) + .expect(200); + }); + }); + describe('get', () => { + it("get by org user should work for domain in the user's org", async () => { + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + const webpage = await Webpage.create({ + domain, + url: 'http://url', + status: 200 + }).save(); + const response = await request(app) + .get(`/domain/${domain.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .expect(200); + expect(response.body.id).toEqual(domain.id); + // expect(response.body.webpages.length).toEqual(1); + }); + it("get by org user should not work for domain not in the user's org", async () => { + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization: organization2 + }).save(); + const response = await request(app) + .get(`/domain/${domain.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .expect(404); + expect(response.body).toEqual({}); + }); + it('get by globalView should work for any domain', async () => { + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization: organization2 + }).save(); + const response = await request(app) + .get(`/domain/${domain.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(200); + expect(response.body.id).toEqual(domain.id); + }); + }); +}); diff --git a/backend/test/index.test.ts b/backend/test/index.test.ts new file mode 100644 index 00000000..88f89a4e --- /dev/null +++ b/backend/test/index.test.ts @@ -0,0 +1,9 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; + +describe('GET /', () => { + it('should return 200', async () => { + const response = await request(app).get('/').expect(200); + expect(response.body).toMatchSnapshot(); + }); +}); diff --git a/backend/test/organizations.test.ts b/backend/test/organizations.test.ts new file mode 100644 index 00000000..9bff6d20 --- /dev/null +++ b/backend/test/organizations.test.ts @@ -0,0 +1,1037 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { createUserToken, DUMMY_USER_ID } from './util'; +import { + Organization, + Role, + connectToDatabase, + Scan, + ScanTask, + User, + OrganizationTag, + UserType +} from '../src/models'; +const dns = require('dns'); + +describe('organizations', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + describe('create', () => { + it('create by globalAdmin should succeed', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.GLOBAL_ADMIN + }).save(); + const name = 'test-' + Math.random(); + const acronym = Math.random().toString(36).slice(2, 7); + const response = await request(app) + .post('/organizations/') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + ipBlocks: [], + acronym: acronym, + name, + rootDomains: ['cisa.gov'], + isPassive: false, + tags: [{ name: 'test' }] + }) + .expect(200); + expect(response.body.createdBy.id).toEqual(user.id); + expect(response.body.name).toEqual(name); + expect(response.body.tags[0].name).toEqual('test'); + }); + it("can't add organization with the same acronym", async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.GLOBAL_ADMIN + }).save(); + const name = 'test-' + Math.random(); + const acronym = Math.random().toString(36).slice(2, 7); + await request(app) + .post('/organizations/') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + ipBlocks: [], + name, + acronym: acronym, + rootDomains: ['cisa.gov'], + isPassive: false, + tags: [] + }) + .expect(200); + const response = await request(app) + .post('/organizations/') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + ipBlocks: [], + name, + acronym: acronym, + rootDomains: ['cisa.gov'], + isPassive: false, + tags: [] + }) + .expect(500); + expect(response.body).toMatchSnapshot(); + }); + it('create by globalView should fail', async () => { + const name = 'test-' + Math.random(); + const response = await request(app) + .post('/organizations/') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + ipBlocks: [], + name, + rootDomains: ['cisa.gov'], + isPassive: false + }) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('update', () => { + it('update by globalAdmin should succeed', async () => { + const organization = await Organization.create({ + acronym: Math.random().toString(36).slice(2, 7), + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const acronym = Math.random().toString(36).slice(2, 7); + const rootDomains = ['test-' + Math.random()]; + const ipBlocks = ['1.1.1.1']; + const isPassive = true; + const tags = [{ name: 'test' }]; + const response = await request(app) + .put(`/organizations/${organization.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + name, + acronym, + rootDomains, + ipBlocks, + isPassive, + tags + }) + .expect(200); + expect(response.body.name).toEqual(name); + expect(response.body.rootDomains).toEqual(rootDomains); + expect(response.body.ipBlocks).toEqual(ipBlocks); + expect(response.body.isPassive).toEqual(isPassive); + expect(response.body.tags[0].name).toEqual(tags[0].name); + }); + it('update by org admin should update everything but rootDomains and ipBlocks', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + acronym: Math.random().toString(36).slice(2, 7), + rootDomains: ['test-' + Math.random()], + pendingDomains: [{ name: 'test-' + Math.random(), token: '1234' }], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const acronym = Math.random().toString(36).slice(2, 7); + const rootDomains = ['test-' + Math.random()]; + const ipBlocks = ['1.1.1.1']; + const isPassive = true; + const pendingDomains = [{ name: 'test-' + Math.random(), token: '1234' }]; + const response = await request(app) + .put(`/organizations/${organization.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + name, + acronym, + rootDomains, + ipBlocks, + isPassive, + pendingDomains + }) + .expect(200); + expect(response.body.name).toEqual(name); + expect(response.body.rootDomains).toEqual(organization.rootDomains); + expect(response.body.pendingDomains).toEqual([]); // Pending domains should support removing, but not adding, domains + expect(response.body.ipBlocks).toEqual(organization.ipBlocks); + expect(response.body.isPassive).toEqual(isPassive); + }); + it('update by globalView should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const rootDomains = ['test-' + Math.random()]; + const ipBlocks = ['1.1.1.1']; + const isPassive = true; + const response = await request(app) + .put(`/organizations/${organization.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + name, + rootDomains, + ipBlocks, + isPassive + }) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('delete', () => { + it('delete by globalAdmin should succeed', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .delete(`/organizations/${organization.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .expect(200); + expect(response.body.affected).toEqual(1); + }); + it('delete by org admin should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .delete(`/organizations/${organization.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + it('delete by globalView should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .delete(`/organizations/${organization.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('list', () => { + it('list by globalView should succeed', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .get(`/organizations`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(200); + expect(response.body.length).toBeGreaterThanOrEqual(1); + }); + it('list by org member should only get their org', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + // this org should not show up in the response + await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .get(`/organizations`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .expect(200); + expect(response.body.length).toEqual(1); + expect(response.body[0].id).toEqual(organization.id); + }); + }); + describe('get', () => { + it('get by globalView should fail - TODO should we change this?', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .get(`/organizations/${organization.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + it('get by an org admin user should pass', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .get(`/organizations/${organization.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .expect(200); + expect(response.body.name).toEqual(organization.name); + }); + it('get by an org admin user of a different org should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .get(`/organizations/${organization2.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + it('get by an org regular user should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .get(`/organizations/${organization.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + it('get by an org admin user should return associated scantasks', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999 + }).save(); + const scanTask = await ScanTask.create({ + scan, + status: 'created', + type: 'fargate', + organization + }).save(); + const response = await request(app) + .get(`/organizations/${organization.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .expect(200); + expect(response.body.name).toEqual(organization.name); + expect(response.body.scanTasks.length).toEqual(1); + expect(response.body.scanTasks[0].id).toEqual(scanTask.id); + expect(response.body.scanTasks[0].scan.id).toEqual(scan.id); + }); + }); + describe('update', () => { + it('enabling a user-modifiable scan by org admin for an organization should succeed', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999, + isGranular: true, + isUserModifiable: true + }).save(); + const response = await request(app) + .post( + `/organizations/${organization.id}/granularScans/${scan.id}/update` + ) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + enabled: true + }) + .expect(200); + expect(response.body.granularScans.length).toEqual(1); + const updated = (await Organization.findOne( + { + id: organization.id + }, + { + relations: ['granularScans'] + } + )) as Organization; + expect(updated.name).toEqual(organization.name); + expect(updated.granularScans).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: scan.id + }) + ]) + ); + }); + it('disabling a user-modifiable scan by org admin for an organization should succeed', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999, + organizations: [organization], + isGranular: true, + isUserModifiable: true + }).save(); + const response = await request(app) + .post( + `/organizations/${organization.id}/granularScans/${scan.id}/update` + ) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + enabled: false + }) + .expect(200); + const updated = (await Organization.findOne( + { + id: organization.id + }, + { + relations: ['granularScans'] + } + )) as Organization; + expect(updated.name).toEqual(organization.name); + expect(updated.granularScans).toEqual([]); + }); + it('enabling a user-modifiable scan by org user for an organization should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999, + isGranular: true, + isUserModifiable: true + }).save(); + const response = await request(app) + .post( + `/organizations/${organization.id}/granularScans/${scan.id}/update` + ) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + enabled: true + }) + .expect(403); + }); + it('enabling a user-modifiable scan by globalAdmin for an organization should succeed', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999, + isGranular: true, + isUserModifiable: true + }).save(); + const response = await request(app) + .post( + `/organizations/${organization.id}/granularScans/${scan.id}/update` + ) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + enabled: true + }) + .expect(200); + const updated = (await Organization.findOne( + { + id: organization.id + }, + { + relations: ['granularScans'] + } + )) as Organization; + expect(updated.name).toEqual(organization.name); + expect(updated.granularScans).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: scan.id + }) + ]) + ); + }); + it('enabling a non-user-modifiable scan by org admin for an organization should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999, + isGranular: true + }).save(); + const response = await request(app) + .post( + `/organizations/${organization.id}/granularScans/${scan.id}/update` + ) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + enabled: true + }) + .expect(404); + }); + }); + describe('approveRole', () => { + it('approveRole by globalAdmin should work', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + let role = await Role.create({ + role: 'user', + approved: false, + organization + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/roles/${role.id}/approve`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .expect(200); + expect(response.body).toEqual({}); + + role = (await Role.findOne(role.id, { + relations: ['approvedBy'] + })) as Role; + expect(role.approved).toEqual(true); + expect(role.approvedBy.id).toEqual(DUMMY_USER_ID); + }); + it('approveRole by globalView should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const role = await Role.create({ + role: 'user', + approved: false, + organization + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/roles/${role.id}/approve`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + it('approveRole by org admin should work', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const role = await Role.create({ + role: 'user', + approved: false, + organization + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/roles/${role.id}/approve`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .expect(200); + expect(response.body).toEqual({}); + }); + it('approveRole by org user should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const role = await Role.create({ + role: 'user', + approved: false, + organization + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/roles/${role.id}/approve`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('removeRole', () => { + it('removeRole by globalAdmin should work', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const role = await Role.create({ + role: 'user', + approved: false, + organization + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/roles/${role.id}/remove`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .expect(200); + expect(response.body.affected).toEqual(1); + }); + it('removeRole by globalView should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const role = await Role.create({ + role: 'user', + approved: false, + organization + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/roles/${role.id}/remove`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + it('removeRole by org admin should work', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const role = await Role.create({ + role: 'user', + approved: false, + organization + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/roles/${role.id}/remove`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .expect(200); + expect(response.body.affected).toEqual(1); + }); + it('removeRole by org user should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const role = await Role.create({ + role: 'user', + approved: false, + organization + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/roles/${role.id}/remove`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('getTags', () => { + it('getTags by globalAdmin should work', async () => { + const tag = await OrganizationTag.create({ + name: 'test-' + Math.random() + }); + const response = await request(app) + .get(`/organizations/tags`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .expect(200); + expect(response.body.length).toBeGreaterThanOrEqual(1); + }); + it('getTags by standard user should return no tags', async () => { + const tag = await OrganizationTag.create({ + name: 'test-' + Math.random() + }); + const response = await request(app) + .get(`/organizations/tags`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.STANDARD + }) + ) + .expect(200); + expect(response.body).toHaveLength(0); + }); + }); + describe('initiateDomainVerification', () => { + it('initiateDomainVerification by org user should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/initiateDomainVerification`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + it('initiateDomainVerification by org admin should add pending domain', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/initiateDomainVerification`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + domain: 'example.com' + }) + .expect(200); + expect(response.body).toHaveLength(1); + expect(response.body[0].name).toEqual('example.com'); + }); + it('initiateDomainVerification for existing root domain should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/initiateDomainVerification`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + domain: organization.rootDomains[0] + }) + .expect(422); + }); + it('initiateDomainVerification for existing pending domain should return same token', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + pendingDomains: [ + { name: 'test' + Math.random(), token: 'test' + Math.random() } + ], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/initiateDomainVerification`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + domain: organization.pendingDomains[0].name + }) + .expect(200); + expect(response.body).toHaveLength(1); + expect(response.body).toEqual(organization.pendingDomains); + }); + }); + describe('checkDomainVerification', () => { + it('checkDomainVerification by org user should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .post(`/organizations/${organization.id}/checkDomainVerification`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + it('checkDomainVerification by org admin for domain that has DNS record created should succeed', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response1 = await request(app) + .post(`/organizations/${organization.id}/initiateDomainVerification`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + domain: 'example.com' + }) + .expect(200); + dns.promises.resolveTxt = jest.fn(() => [ + ['test'], + [response1.body[0].token] + ]); + const response2 = await request(app) + .post(`/organizations/${organization.id}/checkDomainVerification`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + domain: 'example.com' + }) + .expect(200); + expect(response2.body.success).toEqual(true); + expect(response2.body.organization.rootDomains).toContain('example.com'); + }); + it('checkDomainVerification by org admin for domain that does not have DNS record created should fail', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response1 = await request(app) + .post(`/organizations/${organization.id}/initiateDomainVerification`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + domain: 'example.com' + }) + .expect(200); + dns.promises.resolveTxt = jest.fn(() => [['test']]); + const response2 = await request(app) + .post(`/organizations/${organization.id}/checkDomainVerification`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + domain: 'example.com' + }) + .expect(200); + expect(response2.body.success).toEqual(false); + }); + }); +}); diff --git a/backend/test/pe-proxy.test.ts b/backend/test/pe-proxy.test.ts new file mode 100644 index 00000000..e76e7a11 --- /dev/null +++ b/backend/test/pe-proxy.test.ts @@ -0,0 +1,52 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { createUserToken } from './util'; +import { connectToDatabase, UserType } from '../src/models'; + +describe('pe-proxy', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + it('standard user is not authorized to access P&E proxy', async () => { + const response = await request(app) + .get('/pe') + .set( + 'Authorization', + createUserToken({ + userType: UserType.STANDARD + }) + ) + .expect(401); + expect(response.text).toEqual('Unauthorized'); + }); + it('global admin is authorized to access P&E proxy', async () => { + const response = await request(app) + .get('/pe') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ); + // Allow 504. Indicates the user is authorized to + // proxy to P&E app, but the app is not responding + expect([200, 504]).toContain(response.status); + }); + it('global view user is authorized to access P&E proxy', async () => { + const response = await request(app) + .get('/pe') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ); + // Allow 504. Indicates the user is authorized to + // proxy to P&E app, but the app is not responding + expect([200, 504]).toContain(response.status); + }); +}); diff --git a/backend/test/reports.test.ts b/backend/test/reports.test.ts new file mode 100644 index 00000000..5d072063 --- /dev/null +++ b/backend/test/reports.test.ts @@ -0,0 +1,145 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { connectToDatabase, Organization, Role, User } from '../src/models'; +import { createUserToken } from './util'; + +jest.mock('../src/tasks/s3-client'); +const listReports = require('../src/tasks/s3-client').listReports as jest.Mock; +const exportReport = require('../src/tasks/s3-client') + .exportReport as jest.Mock; + +describe('reports', () => { + let organization; + let organization2; + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + }); + afterAll(async () => { + await connection.close(); + }); + it('calling reports list should not work for a user outside of the org', async () => { + const firstName = 'first name'; + const lastName = 'last name'; + const email = Math.random() + '@crossfeed.cisa.gov'; + const user = await User.create({ + firstName, + lastName, + email + }).save(); + await Role.create({ + role: 'user', + approved: false, + organization, + user + }).save(); + const response = await request(app) + .post('/reports/list') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization2.id, role: 'user' }] + }) + ) + .send({ currentOrganization: { id: organization.id } }) + .expect(404); + expect(response.text).toEqual('User is not a member of this organization.'); + expect(listReports).toBeCalledTimes(0); + }); + it('calling reports list should work for a user inside of the org', async () => { + const firstName = 'first name'; + const lastName = 'last name'; + const email = Math.random() + '@crossfeed.cisa.gov'; + const user = await User.create({ + firstName, + lastName, + email + }).save(); + await Role.create({ + role: 'user', + approved: false, + organization, + user + }).save(); + const response = await request(app) + .post('/reports/list') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ currentOrganization: { id: organization.id } }) + .expect(200); + expect(response.text).toEqual('{"Contents":"report content"}'); + expect(listReports).toBeCalledTimes(1); + }); + it('calling report export should not work for a user outside of the org', async () => { + const firstName = 'first name'; + const lastName = 'last name'; + const email = Math.random() + '@crossfeed.cisa.gov'; + const user = await User.create({ + firstName, + lastName, + email + }).save(); + await Role.create({ + role: 'user', + approved: false, + organization, + user + }).save(); + const response = await request(app) + .post('/reports/export') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization2.id, role: 'user' }] + }) + ) + .send({ currentOrganization: { id: organization.id } }) + .expect(404); + expect(response.text).toEqual('User is not a member of this organization.'); + expect(exportReport).toBeCalledTimes(0); + }); + it('calling report export should work for a user inside of the org', async () => { + const firstName = 'first name'; + const lastName = 'last name'; + const email = Math.random() + '@crossfeed.cisa.gov'; + const user = await User.create({ + firstName, + lastName, + email + }).save(); + await Role.create({ + role: 'user', + approved: false, + organization, + user + }).save(); + const response = await request(app) + .post('/reports/export') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ currentOrganization: { id: organization.id } }) + .expect(200); + expect(response.text).toEqual('{"url":"report_url"}'); + expect(exportReport).toBeCalledTimes(1); + }); +}); diff --git a/backend/test/saved-searches.test.ts b/backend/test/saved-searches.test.ts new file mode 100644 index 00000000..2158122a --- /dev/null +++ b/backend/test/saved-searches.test.ts @@ -0,0 +1,498 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { createUserToken, DUMMY_USER_ID } from './util'; +import { + Organization, + Role, + connectToDatabase, + Scan, + ScanTask, + User, + SavedSearch, + UserType +} from '../src/models'; + +describe('saved-search', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + describe('create', () => { + it('create by user should succeed', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const name = 'test-' + Math.random(); + const response = await request(app) + .post('/saved-searches/') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .send({ + name, + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {} + }) + .expect(200); + expect(response.body).toMatchSnapshot({ + createdAt: expect.any(String), + updatedAt: expect.any(String), + id: expect.any(String), + name: expect.any(String), + createdBy: { + id: expect.any(String) + } + }); + expect(response.body.createdBy.id).toEqual(user.id); + expect(response.body.name).toEqual(name); + }); + describe('update', () => { + it('update by globalAdmin should fail', async () => { + const body = { + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {} + }; + const search = await SavedSearch.create(body).save(); + body.name = 'test-' + Math.random(); + body.searchTerm = '123'; + body.createVulnerabilities = true; + const response = await request(app) + .put(`/saved-searches/${search.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .send(body) + .expect(404); + }); + it('update by standard user with access should succeed', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const body = { + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {} + }; + const search = await SavedSearch.create({ + ...body, + createdBy: user + }).save(); + body.name = 'test-' + Math.random(); + body.searchTerm = '123'; + body.createVulnerabilities = true; + const response = await request(app) + .put(`/saved-searches/${search.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.STANDARD, + id: user.id + }) + ) + .send(body) + .expect(200); + expect(response.body.name).toEqual(body.name); + expect(response.body.searchTerm).toEqual(body.searchTerm); + expect(response.body.createVulnerabilities).toEqual( + body.createVulnerabilities + ); + }); + it('update by standard user without access should fail', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const user1 = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const body = { + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {}, + createdBy: user + }; + const search = await SavedSearch.create(body).save(); + const response = await request(app) + .put(`/saved-searches/${search.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.STANDARD, + id: user1.id + }) + ) + .send(body) + .expect(404); + expect(response.body).toEqual({}); + }); + it('update by globalView should fail', async () => { + const body = { + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {} + }; + const search = await SavedSearch.create(body).save(); + const response = await request(app) + .put(`/saved-searches/${search.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send(body) + .expect(404); + expect(response.body).toEqual({}); + }); + }); + describe('delete', () => { + it('delete by globalAdmin should fail', async () => { + const search = await SavedSearch.create({ + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {} + }).save(); + const response = await request(app) + .delete(`/saved-searches/${search.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .expect(404); + }); + it('delete by user with access should succeed', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const search = await SavedSearch.create({ + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {}, + createdBy: user + }).save(); + const response = await request(app) + .delete(`/saved-searches/${search.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.STANDARD, + id: user.id + }) + ) + .expect(200); + expect(response.body.affected).toEqual(1); + }); + it('delete by user without access should fail', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const user1 = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const search = await SavedSearch.create({ + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {}, + createdBy: user + }).save(); + const response = await request(app) + .delete(`/saved-searches/${search.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.STANDARD, + id: user1.id + }) + ) + .expect(404); + expect(response.body).toEqual({}); + }); + it('delete by globalView should fail', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const user1 = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const search = await SavedSearch.create({ + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {}, + createdBy: user + }).save(); + const response = await request(app) + .delete(`/saved-searches/${search.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW, + id: user1.id + }) + ) + .expect(404); + expect(response.body).toEqual({}); + }); + }); + describe('list', () => { + it('list by globalView should return none', async () => { + const search = await SavedSearch.create({ + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {} + }).save(); + const response = await request(app) + .get(`/saved-searches`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(200); + expect(response.body.count).toEqual(0); + }); + it('list by user should only get their search', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const user1 = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const search = await SavedSearch.create({ + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {}, + createdBy: user + }).save(); + // this org should not show up in the response + const search2 = await SavedSearch.create({ + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {}, + createdBy: user1 + }).save(); + const response = await request(app) + .get(`/saved-searches`) + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .expect(200); + expect(response.body.count).toEqual(1); + expect(response.body.result[0].id).toEqual(search.id); + }); + }); + describe('get', () => { + it('get by globalView should fail', async () => { + const search = await SavedSearch.create({ + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {} + }).save(); + const response = await request(app) + .get(`/saved-searches/${search.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(404); + }); + it('get by a user should pass', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const search = await SavedSearch.create({ + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {}, + createdBy: user + }).save(); + const response = await request(app) + .get(`/saved-searches/${search.id}`) + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .expect(200); + expect(response.body.name).toEqual(search.name); + }); + it('get by a different user should fail', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const user1 = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.STANDARD + }).save(); + const search = await SavedSearch.create({ + name: 'test-' + Math.random(), + count: 3, + sortDirection: '', + sortField: '', + searchTerm: '', + searchPath: '', + filters: [], + createVulnerabilities: false, + vulnerabilityTemplate: {}, + createdBy: user1 + }).save(); + const response = await request(app) + .get(`/saved-searches/${search.id}`) + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.STANDARD + }) + ) + .expect(404); + expect(response.body).toEqual({}); + }); + }); + }); +}); diff --git a/backend/test/scan-tasks.test.ts b/backend/test/scan-tasks.test.ts new file mode 100644 index 00000000..72e8995c --- /dev/null +++ b/backend/test/scan-tasks.test.ts @@ -0,0 +1,241 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { + User, + Domain, + connectToDatabase, + Organization, + ScanTask, + Scan, + UserType +} from '../src/models'; +import { createUserToken } from './util'; +jest.mock('../src/tasks/ecs-client'); +const { getLogs } = require('../src/tasks/ecs-client'); + +describe('domains', () => { + let organization; + beforeAll(async () => { + await connectToDatabase(); + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + }); + describe('list', () => { + it('list by globalView should return scan tasks', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 100 + }).save(); + const scanTask = await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'failed' + }).save(); + + const response = await request(app) + .post('/scan-tasks/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(200); + expect(response.body.count).toBeGreaterThanOrEqual(1); + expect(response.body.result.length).toBeGreaterThanOrEqual(1); + expect( + response.body.result.map((e) => e.id).indexOf(scanTask.id) + ).toBeGreaterThan(-1); + }); + it('list by globalView with filter should return filtered scan tasks', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 100 + }).save(); + const scanTask = await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'failed' + }).save(); + + const scan2 = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 100 + }).save(); + const scanTask2 = await ScanTask.create({ + organization, + scan: scan2, + type: 'fargate', + status: 'failed' + }).save(); + + const response = await request(app) + .post('/scan-tasks/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + filters: { name: 'findomain' } + }) + .expect(200); + expect(response.body.count).toBeGreaterThanOrEqual(1); + expect(response.body.result.length).toBeGreaterThanOrEqual(1); + expect( + response.body.result.map((e) => e.id).indexOf(scanTask.id) + ).toBeGreaterThan(-1); + expect(response.body.result.map((e) => e.id).indexOf(scanTask2.id)).toBe( + -1 + ); + }); + it('list by regular user should fail', async () => { + const response = await request(app) + .post('/scan-tasks/search') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('kill', () => { + it('kill by globalAdmin should kill the scantask', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 100 + }).save(); + const scanTask = await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'created' + }).save(); + + const response = await request(app) + .post(`/scan-tasks/${scanTask.id}/kill`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .expect(200); + expect(response.body).toEqual({}); + }); + it(`kill by globalAdmin should not work on a finished scantask`, async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 100 + }).save(); + const scanTask = await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'finished' + }).save(); + + const response = await request(app) + .post(`/scan-tasks/${scanTask.id}/kill`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .expect(400); + expect(response.text).toContain('already finished'); + }); + it('kill by globalView should fail', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 100 + }).save(); + const scanTask = await ScanTask.create({ + organization, + scan, + type: 'fargate', + status: 'created' + }).save(); + + const response = await request(app) + .post(`/scan-tasks/${scanTask.id}/kill`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('logs', () => { + it('logs by globalView user should get logs', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 100 + }).save(); + const scanTask = await ScanTask.create({ + organization, + scan, + fargateTaskArn: 'fargateTaskArn', + type: 'fargate', + status: 'started' + }).save(); + + const response = await request(app) + .get(`/scan-tasks/${scanTask.id}/logs`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(200) + .expect('Content-Type', /text\/plain/); // Prevent XSS by setting text/plain header + expect(response.text).toEqual('logs'); + expect(getLogs).toHaveBeenCalledWith('fargateTaskArn'); + }); + it('logs by regular user should fail', async () => { + const scan = await Scan.create({ + name: 'findomain', + arguments: {}, + frequency: 100 + }).save(); + const scanTask = await ScanTask.create({ + organization, + scan, + fargateTaskArn: 'fargateTaskArn', + type: 'fargate', + status: 'started' + }).save(); + + const response = await request(app) + .get(`/scan-tasks/${scanTask.id}/logs`) + .set('Authorization', createUserToken({})) + .expect(403); + expect(response.text).toEqual( + 'Unauthorized access. View logs for details.' + ); + expect(getLogs).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/backend/test/scans.test.ts b/backend/test/scans.test.ts new file mode 100644 index 00000000..dbdc5fdf --- /dev/null +++ b/backend/test/scans.test.ts @@ -0,0 +1,512 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { + User, + Scan, + connectToDatabase, + Organization, + OrganizationTag, + UserType +} from '../src/models'; +import { createUserToken } from './util'; +import { handler as scheduler } from '../src/tasks/scheduler'; + +jest.mock('../src/tasks/scheduler', () => ({ + handler: jest.fn() +})); + +describe('scan', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + describe('list', () => { + it('list by globalAdmin should return all scans', async () => { + const name = 'test-' + Math.random(); + await Scan.create({ + name, + arguments: {}, + frequency: 999999 + }).save(); + await Scan.create({ + name: name + '-2', + arguments: {}, + frequency: 999999 + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const response = await request(app) + .get('/scans') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .expect(200); + expect(response.body.scans.length).toBeGreaterThanOrEqual(2); + expect(response.body.organizations.length).toBeGreaterThanOrEqual(1); + expect( + response.body.organizations.map((e) => e.id).indexOf(organization.id) + ).toBeGreaterThan(-1); + }); + // it('list by globalView should fail', async () => { + // const name = 'test-' + Math.random(); + // await Scan.create({ + // name, + // arguments: {}, + // frequency: 999999 + // }).save(); + // await Scan.create({ + // name: name + '-2', + // arguments: {}, + // frequency: 999999 + // }).save(); + // const response = await request(app) + // .get('/scans') + // .set( + // 'Authorization', + // createUserToken({ + // userType: UserType.GLOBAL_VIEW + // }) + // ) + // .expect(403); + // }); + }); + describe('listGranular', () => { + it('list by regular user should return all granular, user-modifiable scans', async () => { + const name = 'test-' + Math.random(); + const scan1 = await Scan.create({ + name, + arguments: {}, + frequency: 999999, + isGranular: false, + isUserModifiable: false, + isSingleScan: false + }).save(); + const scan2 = await Scan.create({ + name: name + '-2', + arguments: {}, + frequency: 999999, + isGranular: true, + isUserModifiable: true, + isSingleScan: false + }).save(); + const response = await request(app) + .get('/granularScans') + .set('Authorization', createUserToken({})) + .expect(200); + expect(response.body.scans.length).toBeGreaterThanOrEqual(1); + expect(response.body.scans.map((e) => e.id).indexOf(scan1.id)).toEqual( + -1 + ); + expect( + response.body.scans.map((e) => e.id).indexOf(scan2.id) + ).toBeGreaterThanOrEqual(-1); + }); + it('list by regular user should exclude single scans', async () => { + const name = 'test-' + Math.random(); + const scan1 = await Scan.create({ + name, + arguments: {}, + frequency: 999999, + isGranular: true, + isUserModifiable: true, + isSingleScan: false + }).save(); + const scan2 = await Scan.create({ + name: name + '-2', + arguments: {}, + frequency: 999999, + isGranular: true, + isSingleScan: true + }).save(); + const response = await request(app) + .get('/granularScans') + .set('Authorization', createUserToken({})) + .expect(200); + expect(response.body.scans.length).toBeGreaterThanOrEqual(1); + expect(response.body.scans.map((e) => e.id).indexOf(scan2.id)).toEqual( + -1 + ); + }); + }); + describe('create', () => { + it('create by globalAdmin should succeed', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.GLOBAL_ADMIN + }).save(); + const name = 'censys'; + const arguments_ = { a: 'b' }; + const frequency = 999999; + const response = await request(app) + .post('/scans') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + name, + arguments: arguments_, + frequency, + isGranular: false, + organizations: [], + isUserModifiable: false, + isSingleScan: false, + tags: [] + }) + .expect(200); + + expect(response.body.name).toEqual(name); + expect(response.body.arguments).toEqual(arguments_); + expect(response.body.frequency).toEqual(frequency); + expect(response.body.isGranular).toEqual(false); + expect(response.body.organizations).toEqual([]); + expect(response.body.tags).toEqual([]); + expect(response.body.createdBy.id).toEqual(user.id); + }); + it('create a granular scan by globalAdmin should succeed', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + userType: UserType.GLOBAL_ADMIN + }).save(); + const name = 'censys'; + const arguments_ = { a: 'b' }; + const frequency = 999999; + const tag = await OrganizationTag.create({ + name: 'test-' + Math.random() + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + tags: [tag] + }).save(); + const response = await request(app) + .post('/scans') + .set( + 'Authorization', + createUserToken({ + id: user.id, + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + name, + arguments: arguments_, + frequency, + isGranular: true, + organizations: [organization.id], + isUserModifiable: false, + isSingleScan: false, + tags: [tag] + }) + .expect(200); + expect(response.body.name).toEqual(name); + expect(response.body.arguments).toEqual(arguments_); + expect(response.body.frequency).toEqual(frequency); + expect(response.body.isGranular).toEqual(true); + expect(response.body.organizations).toEqual([ + { + id: organization.id + } + ]); + expect(response.body.tags[0].id).toEqual(tag.id); + }); + it('create by globalView should fail', async () => { + const name = 'censys'; + const arguments_ = { a: 'b' }; + const frequency = 999999; + const response = await request(app) + .post('/scans') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + name, + arguments: arguments_, + frequency, + isGranular: false, + organizations: [], + isUserModifiable: false, + isSingleScan: false + }) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('update', () => { + it('update by globalAdmin should succeed', async () => { + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999 + }).save(); + const name = 'findomain'; + const arguments_ = { a: 'b2' }; + const frequency = 999991; + const response = await request(app) + .put(`/scans/${scan.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + name, + arguments: arguments_, + frequency, + isGranular: false, + organizations: [], + isUserModifiable: false, + isSingleScan: false, + tags: [] + }) + .expect(200); + + expect(response.body.name).toEqual(name); + expect(response.body.arguments).toEqual(arguments_); + expect(response.body.frequency).toEqual(frequency); + }); + it('update a non-granular scan to a granular scan by globalAdmin should succeed', async () => { + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999, + isGranular: false, + isSingleScan: false + }).save(); + const tag = await OrganizationTag.create({ + name: 'test-' + Math.random() + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + tags: [tag] + }).save(); + const name = 'findomain'; + const arguments_ = { a: 'b2' }; + const frequency = 999991; + const response = await request(app) + .put(`/scans/${scan.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + name, + arguments: arguments_, + frequency, + isGranular: true, + organizations: [organization.id], + isSingleScan: false, + isUserModifiable: true, + tags: [tag] + }) + .expect(200); + + expect(response.body.name).toEqual(name); + expect(response.body.arguments).toEqual(arguments_); + expect(response.body.frequency).toEqual(frequency); + expect(response.body.isGranular).toEqual(true); + expect(response.body.isUserModifiable).toEqual(true); + expect(response.body.organizations).toEqual([ + { + id: organization.id + } + ]); + expect(response.body.tags[0].id).toEqual(tag.id); + }); + it('update by globalView should fail', async () => { + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999 + }).save(); + const name = 'findomain'; + const arguments_ = { a: 'b2' }; + const frequency = 999991; + const response = await request(app) + .put(`/scans/${scan.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + name, + arguments: arguments_, + frequency + }) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('delete', () => { + it('delete by globalAdmin should succeed', async () => { + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999 + }).save(); + const response = await request(app) + .del(`/scans/${scan.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .expect(200); + + expect(response.body.affected).toEqual(1); + }); + it('delete by globalView should fail', async () => { + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999 + }).save(); + const response = await request(app) + .del(`/scans/${scan.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('get', () => { + it('get by globalView should succeed', async () => { + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999 + }).save(); + const response = await request(app) + .get(`/scans/${scan.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(200); + expect(response.body.scan.name).toEqual('censys'); + }); + + it('get by regular user on a scan not from their org should fail', async () => { + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999 + }).save(); + const response = await request(app) + .get(`/scans/${scan.id}`) + .set('Authorization', createUserToken({})) + .expect(403); + + expect(response.body).toEqual({}); + }); + }); +}); + +describe('scheduler invoke', () => { + it('invoke by globalAdmin should succeed', async () => { + const response = await request(app) + .post(`/scheduler/invoke`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .expect(200); + + expect(response.body).toEqual({}); + expect(scheduler).toHaveBeenCalledTimes(1); + }); + it('invoke by globalView should fail', async () => { + const response = await request(app) + .post(`/scheduler/invoke`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(403); + + expect(response.body).toEqual({}); + expect(scheduler).toHaveBeenCalledTimes(0); + }); +}); + +describe('run scan', () => { + it('run scan should manualRunPending to true', async () => { + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999, + lastRun: new Date() + }).save(); + const response = await request(app) + .post(`/scans/${scan.id}/run`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .expect(200); + + expect(response.body.manualRunPending).toEqual(true); + }); + it('runScan by globalView should fail', async () => { + const scan = await Scan.create({ + name: 'censys', + arguments: {}, + frequency: 999999, + lastRun: new Date() + }).save(); + const response = await request(app) + .post(`/scans/${scan.id}/run`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(403); + + expect(response.body).toEqual({}); + }); +}); diff --git a/backend/test/search.test.ts b/backend/test/search.test.ts new file mode 100644 index 00000000..7f2c4d03 --- /dev/null +++ b/backend/test/search.test.ts @@ -0,0 +1,196 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { + User, + Domain, + connectToDatabase, + Organization, + UserType +} from '../src/models'; +import { createUserToken } from './util'; +import '../src/tasks/es-client'; + +jest.mock('../src/tasks/es-client'); +const searchDomains = require('../src/tasks/es-client') + .searchDomains as jest.Mock; +jest.mock('../src/api/search/buildRequest'); +const buildRequest = require('../src/api/search/buildRequest') + .buildRequest as jest.Mock; + +jest.mock('../src/tasks/s3-client'); +const saveCSV = require('../src/tasks/s3-client').saveCSV as jest.Mock; + +const body = { + hits: { + hits: [ + { + _source: { + name: 'test', + ip: 'test', + organization: { + name: 'test' + }, + services: [ + { + port: 443, + products: [] + } + ] + } + }, + { + _source: { + name: 'test2', + ip: 'test', + organization: { + name: 'test' + }, + services: [ + { + port: 443, + products: [] + } + ] + } + } + ] + } +}; + +describe('search', () => { + let organization; + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + }); + afterAll(async () => { + await connection.close(); + }); + beforeEach(async () => { + searchDomains + .mockImplementationOnce(() => { + return { body }; + }) + .mockImplementationOnce(() => { + return { + body: { + hits: { + hits: [] + } + } + }; + }); + }); + describe('search', () => { + it('search by global admin should work', async () => { + const response = await request(app) + .post('/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + current: 1, + resultsPerPage: 25, + searchTerm: 'term', + sortDirection: 'asc', + sortField: 'name', + filters: [] + }) + .expect(200); + expect(buildRequest.mock.calls[0][1]).toEqual({ + matchAllOrganizations: true, + organizationIds: [] + }); + expect(response.body).toEqual(body); + }); + it('search by regular user should work', async () => { + const response = await request(app) + .post('/search') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + current: 1, + resultsPerPage: 25, + searchTerm: 'term', + sortDirection: 'asc', + sortField: 'name', + filters: [] + }) + .expect(200); + expect(buildRequest.mock.calls[0][1]).toEqual({ + matchAllOrganizations: false, + organizationIds: [organization.id] + }); + }); + + it('export by regular user should work', async () => { + const response = await request(app) + .post('/search/export') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + current: 1, + resultsPerPage: 25, + searchTerm: 'term', + sortDirection: 'asc', + sortField: 'name', + filters: [] + }) + .expect(200); + expect(response.body).toEqual({ url: 'http://mock_url' }); + expect(saveCSV).toBeCalledTimes(1); + expect(saveCSV.mock.calls[0][0]).toContain('test'); + }); + }); +}); + +describe('buildRequest', () => { + const buildRequest = jest.requireActual( + '../src/api/search/buildRequest' + ).buildRequest; + test('sample request by global admin', () => { + const req = buildRequest( + { + current: 1, + resultsPerPage: 25, + searchTerm: 'term', + sortDirection: 'asc', + sortField: 'name', + filters: [] + }, + { matchAllOrganizations: true, organizationIds: [] } + ); + expect(req).toMatchSnapshot(); + }); + test('sample request by non-global admin', () => { + const req = buildRequest( + { + current: 1, + resultsPerPage: 25, + searchTerm: 'term', + sortDirection: 'asc', + sortField: 'name', + filters: [] + }, + { matchAllOrganizations: false, organizationIds: ['id1'] } + ); + expect(req).toMatchSnapshot(); + }); +}); diff --git a/backend/test/setup.ts b/backend/test/setup.ts new file mode 100644 index 00000000..b381267f --- /dev/null +++ b/backend/test/setup.ts @@ -0,0 +1,17 @@ +import { handler as syncdb } from '../src/tasks/syncdb'; +import { User, connectToDatabase, UserType } from '../src/models'; +import { DUMMY_USER_ID } from './util'; + +export default async () => { + console.warn('Syncing test db...'); + await (syncdb as any)('dangerouslyforce'); + console.warn('Done syncing test db.'); + await connectToDatabase(); + await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + id: DUMMY_USER_ID, + userType: UserType.STANDARD + }).save(); +}; diff --git a/backend/test/stats.test.ts b/backend/test/stats.test.ts new file mode 100644 index 00000000..dff88cd0 --- /dev/null +++ b/backend/test/stats.test.ts @@ -0,0 +1,170 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { + User, + Domain, + connectToDatabase, + Organization, + Vulnerability, + Service, + UserType +} from '../src/models'; +import { createUserToken } from './util'; + +describe('stats', () => { + let connection; + const standard = { + domains: { + numVulnerabilities: [ + { + id: expect.any(String), + label: expect.any(String) + } + ] + }, + vulnerabilities: { + byOrg: [ + { + id: expect.any(String), + label: expect.any(String), + orgId: expect.any(String) + } + ], + latestVulnerabilities: [ + { + createdAt: expect.any(String), + updatedAt: expect.any(String), + id: expect.any(String), + domain: { + createdAt: expect.any(String), + updatedAt: expect.any(String), + id: expect.any(String), + name: expect.any(String), + reverseName: expect.any(String) + } + } + ] + } + }; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + describe('get', () => { + it('get by org user should return only domains from that org', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + await Vulnerability.create({ + title: 'vuln title', + domain, + cvss: 9, + severity: 'High' + }).save(); + await Service.create({ + service: 'http', + port: 80, + domain + }).save(); + await Domain.create({ + name: 'test-' + Math.random(), + organization: organization2 + }).save(); + const response = await request(app) + .post('/stats') + .set( + 'Authorization', + createUserToken({ + roles: [ + { + org: organization.id, + role: 'user' + } + ] + }) + ) + .expect(200); + expect(response.body.result).toMatchSnapshot(standard); + expect(response.body.result.domains.numVulnerabilities[0].id).toEqual( + domain.name + '|Critical' + ); + }); + it('get by globalView should filter domains to a single org if specified', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const name = 'test-' + Math.random(); + const domain = await Domain.create({ + name, + organization + }).save(); + await Vulnerability.create({ + title: 'vuln title', + domain, + cvss: 9, + severity: 'High' + }).save(); + await Service.create({ + service: 'http', + port: 80, + domain + }).save(); + const domain2 = await Domain.create({ + name: 'test-' + Math.random(), + organization: organization2 + }).save(); + await Vulnerability.create({ + title: 'vuln title 2', + domain: domain2, + cvss: 1, + severity: 'Low' + }).save(); + await Service.create({ + service: 'https', + port: 443, + domain: domain2 + }).save(); + const response = await request(app) + .post('/stats') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + filters: { organization: organization.id } + }) + .expect(200); + expect(response.body.result).toMatchSnapshot(standard); + expect(response.body.result.domains.numVulnerabilities[0].id).toEqual( + domain.name + '|Critical' + ); + }); + }); +}); diff --git a/backend/test/users.test.ts b/backend/test/users.test.ts new file mode 100644 index 00000000..d1fc60e9 --- /dev/null +++ b/backend/test/users.test.ts @@ -0,0 +1,671 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { + User, + connectToDatabase, + Organization, + Role, + UserType +} from '../src/models'; +import { createUserToken, DUMMY_USER_ID } from './util'; + +const nodemailer = require('nodemailer'); //Doesn't work with import + +const sendMailMock = jest.fn(); +jest.mock('nodemailer'); +nodemailer.createTransport.mockReturnValue({ sendMail: sendMailMock }); + +beforeEach(() => { + sendMailMock.mockClear(); + nodemailer.createTransport.mockClear(); +}); + +describe('user', () => { + let organization; + let organization2; + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + }); + afterAll(async () => { + await connection.close(); + }); + describe('invite', () => { + it('invite by a regular user should not work', async () => { + const name = 'test-' + Math.random(); + const firstName = 'first name'; + const lastName = 'last name'; + const email = Math.random() + '@crossfeed.cisa.gov'; + const response = await request(app) + .post('/users') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + firstName, + lastName, + email + }) + .expect(403); + }); + it('invite by a global admin should work', async () => { + const firstName = 'first name'; + const lastName = 'last name'; + const email = Math.random() + '@crossfeed.cisa.gov'; + const response = await request(app) + .post('/users') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + firstName, + lastName, + email + }) + .expect(200); + expect(response.body.email).toEqual(email); + expect(response.body.invitePending).toEqual(true); + expect(response.body.firstName).toEqual(firstName); + expect(response.body.lastName).toEqual(lastName); + expect(response.body.roles).toEqual([]); + expect(response.body.userType).toEqual(UserType.STANDARD); + }); + it('invite by a global admin should work if setting user type', async () => { + const firstName = 'first name'; + const lastName = 'last name'; + const email = Math.random() + '@crossfeed.cisa.gov'; + const response = await request(app) + .post('/users') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + firstName, + lastName, + email, + userType: UserType.GLOBAL_ADMIN + }) + .expect(200); + expect(response.body.email).toEqual(email); + expect(response.body.invitePending).toEqual(true); + expect(response.body.firstName).toEqual(firstName); + expect(response.body.lastName).toEqual(lastName); + expect(response.body.roles).toEqual([]); + expect(response.body.userType).toEqual(UserType.GLOBAL_ADMIN); + }); + it('invite by a global view should not work', async () => { + const firstName = 'first name'; + const lastName = 'last name'; + const email = Math.random() + '@crossfeed.cisa.gov'; + const response = await request(app) + .post('/users') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + firstName, + lastName, + email + }) + .expect(403); + expect(response.body).toEqual({}); + }); + it('invite by an organization admin should work', async () => { + const firstName = 'first name'; + const lastName = 'last name'; + const email = Math.random() + '@crossfeed.cisa.gov'; + const response = await request(app) + .post('/users') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + firstName, + lastName, + email, + organization: organization.id, + organizationAdmin: false + }) + .expect(200); + expect(response.body.email).toEqual(email); + expect(response.body.invitePending).toEqual(true); + expect(response.body.firstName).toEqual(firstName); + expect(response.body.lastName).toEqual(lastName); + expect(response.body.roles[0].approved).toEqual(true); + expect(response.body.roles[0].role).toEqual('user'); + expect(response.body.roles[0].organization.id).toEqual(organization.id); + + const role = (await Role.findOne(response.body.roles[0].id, { + relations: ['createdBy', 'approvedBy'] + })) as Role; + expect(role.createdBy.id).toEqual(DUMMY_USER_ID); + expect(role.approvedBy.id).toEqual(DUMMY_USER_ID); + }); + it('invite by an organization admin should not work if setting user type', async () => { + const firstName = 'first name'; + const lastName = 'last name'; + const email = Math.random() + '@crossfeed.cisa.gov'; + const response = await request(app) + .post('/users') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + firstName, + lastName, + email, + organization: organization.id, + organizationAdmin: false, + userType: UserType.GLOBAL_ADMIN + }) + .expect(403); + expect(response.body).toEqual({}); + }); + it('invite existing user by a different organization admin should work, and should not modify other user details', async () => { + const firstName = 'first name'; + const lastName = 'last name'; + const email = Math.random() + '@crossfeed.cisa.gov'; + const user = await User.create({ + firstName, + lastName, + email + }).save(); + await Role.create({ + role: 'user', + approved: false, + organization, + user + }).save(); + const response = await request(app) + .post('/users') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization2.id, role: 'admin' }] + }) + ) + .send({ + firstName: 'new first name', + lastName: 'new last name', + email, + organization: organization2.id, + organizationAdmin: false + }) + .expect(200); + expect(response.body.id).toEqual(user.id); + expect(response.body.email).toEqual(email); + expect(response.body.invitePending).toEqual(false); + expect(response.body.firstName).toEqual('first name'); + expect(response.body.lastName).toEqual('last name'); + expect(response.body.roles[1].approved).toEqual(true); + expect(response.body.roles[1].role).toEqual('user'); + }); + it('invite existing user by a different organization admin should work, and should modify user name if user name is initially blank', async () => { + const email = Math.random() + '@crossfeed.cisa.gov'; + const user = await User.create({ + firstName: '', + lastName: '', + email + }).save(); + await Role.create({ + role: 'user', + approved: false, + organization, + user + }).save(); + const response = await request(app) + .post('/users') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization2.id, role: 'admin' }] + }) + ) + .send({ + firstName: 'new first name', + lastName: 'new last name', + email, + organization: organization2.id, + organizationAdmin: false + }) + .expect(200); + expect(response.body.id).toEqual(user.id); + expect(response.body.email).toEqual(email); + expect(response.body.invitePending).toEqual(false); + expect(response.body.firstName).toEqual('new first name'); + expect(response.body.lastName).toEqual('new last name'); + expect(response.body.fullName).toEqual('new first name new last name'); + expect(response.body.roles[1].approved).toEqual(true); + expect(response.body.roles[1].role).toEqual('user'); + }); + it('invite existing user by same organization admin should work, and should update the user organization role', async () => { + const adminUser = await User.create({ + firstName: 'first', + lastName: 'last', + email: Math.random() + '@crossfeed.cisa.gov' + }).save(); + const email = Math.random() + '@crossfeed.cisa.gov'; + const user = await User.create({ + firstName: 'first', + lastName: 'last', + email + }).save(); + await Role.create({ + role: 'user', + approved: false, + organization, + user, + createdBy: adminUser, + approvedBy: adminUser + }).save(); + const response = await request(app) + .post('/users') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'admin' }] + }) + ) + .send({ + firstName: 'first', + lastName: 'last', + email, + organization: organization.id, + organizationAdmin: true + }) + .expect(200); + expect(response.body.id).toEqual(user.id); + expect(response.body.email).toEqual(email); + expect(response.body.invitePending).toEqual(false); + expect(response.body.firstName).toEqual('first'); + expect(response.body.lastName).toEqual('last'); + expect(response.body.roles[0].approved).toEqual(true); + expect(response.body.roles[0].role).toEqual('admin'); + + const role = (await Role.findOne(response.body.roles[0].id, { + relations: ['createdBy', 'approvedBy'] + })) as Role; + expect(role.createdBy.id).toEqual(adminUser.id); + expect(role.approvedBy.id).toEqual(DUMMY_USER_ID); + }); + it('invite existing user by global admin that updates user type should work', async () => { + const adminUser = await User.create({ + firstName: 'first', + lastName: 'last', + email: Math.random() + '@crossfeed.cisa.gov' + }).save(); + const email = Math.random() + '@crossfeed.cisa.gov'; + const user = await User.create({ + firstName: 'first', + lastName: 'last', + email + }).save(); + const response = await request(app) + .post('/users') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + firstName: 'first', + lastName: 'last', + email, + userType: UserType.GLOBAL_ADMIN + }) + .expect(200); + expect(response.body.id).toEqual(user.id); + expect(response.body.email).toEqual(email); + expect(response.body.invitePending).toEqual(false); + expect(response.body.firstName).toEqual('first'); + expect(response.body.lastName).toEqual('last'); + expect(response.body.roles).toEqual([]); + expect(response.body.userType).toEqual(UserType.GLOBAL_ADMIN); + }); + it('invite existing user by global view should not work', async () => { + const adminUser = await User.create({ + firstName: 'first', + lastName: 'last', + email: Math.random() + '@crossfeed.cisa.gov' + }).save(); + const email = Math.random() + '@crossfeed.cisa.gov'; + const user = await User.create({ + firstName: 'first', + lastName: 'last', + email + }).save(); + const response = await request(app) + .post('/users') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + firstName: 'first', + lastName: 'last', + email + }) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('me', () => { + it("me by a regular user should give that user's information", async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov' + }).save(); + const response = await request(app) + .get('/users/me') + .set( + 'Authorization', + createUserToken({ + id: user.id + }) + ) + .expect(200); + expect(response.body.email).toEqual(user.email); + }); + }); + describe('meAcceptTerms', () => { + it('me accept terms by a regular user should accept terms', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov' + }).save(); + const response = await request(app) + .post('/users/me/acceptTerms') + .set( + 'Authorization', + createUserToken({ + id: user.id + }) + ) + .send({ + version: '1-user' + }) + .expect(200); + expect(response.body.email).toEqual(user.email); + expect(response.body.dateAcceptedTerms).toBeTruthy(); + expect(response.body.acceptedTermsVersion).toEqual('1-user'); + }); + it('accepting terms twice updates user', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + dateAcceptedTerms: new Date('2020-08-03T13:58:31.715Z') + }).save(); + const response = await request(app) + .post('/users/me/acceptTerms') + .set( + 'Authorization', + createUserToken({ + id: user.id + }) + ) + .send({ + version: '2-user' + }) + .expect(200); + expect(response.body.email).toEqual(user.email); + expect(response.body.dateAcceptedTerms).toBeTruthy(); + expect(response.body.acceptedTermsVersion).toEqual('2-user'); + }); + }); + describe('list', () => { + it('list by globalView should give all users', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov' + }).save(); + const response = await request(app) + .post('/users/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + page: 1, + sort: 'email', + order: 'ASC', + filters: {}, + pageSize: -1, + groupBy: undefined + }) + .expect(200); + expect(response.body.count).toBeGreaterThanOrEqual(1); + expect( + response.body.result.map((e) => e.id).indexOf(user.id) + ).not.toEqual(-1); + }); + it('list by regular user should fail', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov' + }).save(); + const response = await request(app) + .post('/users/search') + .set('Authorization', createUserToken({})) + .send({ + page: 1, + sort: 'email', + order: 'ASC', + filters: {}, + pageSize: -1, + groupBy: undefined + }) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('delete', () => { + it('delete by globalAdmin should work', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov' + }).save(); + const response = await request(app) + .del(`/users/${user.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .expect(200); + expect(response.body.affected).toEqual(1); + }); + it('delete by globalView should not work', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov' + }).save(); + const response = await request(app) + .del(`/users/${user.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + it('delete by regular user should not work', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov' + }).save(); + const response = await request(app) + .del(`/users/${user.id}`) + .set('Authorization', createUserToken({})) + .expect(403); + expect(response.body).toEqual({}); + }); + it('delete by regular user on themselves should not work', async () => { + const user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + dateAcceptedTerms: new Date('2020-08-03T13:58:31.715Z') + }).save(); + const response = await request(app) + .del(`/users/${user.id}`) + .set( + 'Authorization', + createUserToken({ + id: user.id + }) + ) + .expect(403); + expect(response.body).toEqual({}); + }); + }); + describe('update', () => { + let user, firstName, lastName, orgId; + beforeEach(async () => { + user = await User.create({ + firstName: '', + lastName: '', + email: Math.random() + '@crossfeed.cisa.gov', + dateAcceptedTerms: new Date('2020-08-03T13:58:31.715Z') + }).save(); + firstName = 'new first name'; + lastName = 'new last name'; + orgId = organization.id; + }); + it('update by globalAdmin should work', async () => { + const response = await request(app) + .put(`/users/${user.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ firstName, lastName }) + .expect(200); + expect(response.body.firstName).toEqual(firstName); + expect(response.body.lastName).toEqual(lastName); + user = await User.findOne(user.id, { + relations: ['roles', 'roles.organization', 'roles.createdBy'] + }); + expect(user.roles.length).toEqual(0); + expect(user.userType).toEqual(UserType.STANDARD); + }); + it('update by globalAdmin that updates user type should work', async () => { + const response = await request(app) + .put(`/users/${user.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ firstName, lastName, userType: UserType.GLOBAL_ADMIN }) + .expect(200); + expect(response.body.firstName).toEqual(firstName); + expect(response.body.lastName).toEqual(lastName); + user = await User.findOne(user.id, { + relations: ['roles', 'roles.organization', 'roles.createdBy'] + }); + expect(user.roles.length).toEqual(0); + expect(user.userType).toEqual(UserType.GLOBAL_ADMIN); + }); + it('update by globalView should not work', async () => { + const response = await request(app) + .put(`/users/${user.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ firstName, lastName }) + .expect(403); + expect(response.body).toEqual({}); + }); + it('update by regular user should not work', async () => { + const response = await request(app) + .put(`/users/${user.id}`) + .set('Authorization', createUserToken({})) + .send({ firstName, lastName }) + .expect(403); + expect(response.body).toEqual({}); + }); + it('update by regular user on themselves should work', async () => { + const response = await request(app) + .put(`/users/${user.id}`) + .set( + 'Authorization', + createUserToken({ + id: user.id + }) + ) + .send({ firstName, lastName }) + .expect(200); + expect(response.body.firstName).toEqual(firstName); + expect(response.body.lastName).toEqual(lastName); + user = await User.findOne(user.id, { + relations: ['roles', 'roles.organization'] + }); + expect(user.roles.length).toEqual(0); + }); + it('update by regular user on themselves should not work if changing user type', async () => { + const response = await request(app) + .put(`/users/${user.id}`) + .set( + 'Authorization', + createUserToken({ + id: user.id + }) + ) + .send({ firstName, lastName, userType: UserType.GLOBAL_ADMIN }) + .expect(403); + expect(response.body).toEqual({}); + }); + }); +}); diff --git a/backend/test/util.ts b/backend/test/util.ts new file mode 100644 index 00000000..f3e33d46 --- /dev/null +++ b/backend/test/util.ts @@ -0,0 +1,22 @@ +import * as jwt from 'jsonwebtoken'; +import { UserType } from '../src/models'; +import { UserToken } from '../src/api/auth'; + +export const DUMMY_USER_ID = 'c1afb49c-2216-4e3c-ac52-aa9480956ce9'; + +export function createUserToken(user: Partial = {}) { + const token = jwt.sign( + { + roles: [], + id: DUMMY_USER_ID, + userType: UserType.STANDARD, + dateAcceptedTerms: new Date('2020-08-03T13:58:31.715Z'), + ...user + }, + process.env.JWT_SECRET!, + { + expiresIn: '1 day' + } + ); + return token; +} diff --git a/backend/test/vulnerabilities.test.ts b/backend/test/vulnerabilities.test.ts new file mode 100644 index 00000000..e402a944 --- /dev/null +++ b/backend/test/vulnerabilities.test.ts @@ -0,0 +1,647 @@ +import * as request from 'supertest'; +import app from '../src/api/app'; +import { + User, + Domain, + connectToDatabase, + Organization, + Vulnerability, + OrganizationTag, + UserType +} from '../src/models'; +import { createUserToken } from './util'; +jest.mock('../src/tasks/s3-client'); +const saveCSV = require('../src/tasks/s3-client').saveCSV as jest.Mock; + +describe('vulnerabilities', () => { + let connection; + beforeAll(async () => { + connection = await connectToDatabase(); + }); + afterAll(async () => { + await connection.close(); + }); + describe('export', () => { + it('export by org user should only return vulnerabilities from that org', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const vulnerability = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const domain2 = await Domain.create({ + name: 'test-' + Math.random(), + organization: organization2 + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain: domain2 + }).save(); + const response = await request(app) + .post('/vulnerabilities/export') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({}) + .expect(200); + expect(response.body).toEqual({ url: 'http://mock_url' }); + expect(saveCSV).toBeCalledTimes(1); + expect(saveCSV.mock.calls[0][0]).toContain(vulnerability.title); + expect(saveCSV.mock.calls[0][0]).not.toContain(vulnerability2.title); + }); + }); + describe('list', () => { + it('list by org user should only return vulnerabilities from that org', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const vulnerability = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const domain2 = await Domain.create({ + name: 'test-' + Math.random(), + organization: organization2 + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain: domain2 + }).save(); + const response = await request(app) + .post('/vulnerabilities/search') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({}) + .expect(200); + expect(response.body.count).toEqual(1); + expect(response.body.result[0].id).toEqual(vulnerability.id); + }); + it('list by globalView should return vulnerabilities from all orgs', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const title = 'test-' + Math.random(); + const vulnerability = await Vulnerability.create({ + title: title + '-1', + domain + }).save(); + const domain2 = await Domain.create({ + name: 'test-' + Math.random(), + organization: organization2 + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: title + '-2', + domain: domain2 + }).save(); + const response = await request(app) + .post('/vulnerabilities/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + filters: { title } + }) + .expect(200); + expect(response.body.count).toEqual(2); + }); + it('list by globalView with org filter should work', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const title = 'test-' + Math.random(); + const vulnerability = await Vulnerability.create({ + title: title + '-1', + domain + }).save(); + const domain2 = await Domain.create({ + name: 'test-' + Math.random(), + organization: organization2 + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: title + '-2', + domain: domain2 + }).save(); + const response = await request(app) + .post('/vulnerabilities/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + filters: { organization: organization.id } + }) + .expect(200); + expect(response.body.count).toEqual(1); + expect(response.body.result[0].id).toEqual(vulnerability.id); + }); + it('list by globalView with tag filter should work', async () => { + const tag = await OrganizationTag.create({ + name: 'test-' + Math.random() + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + tags: [tag] + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const title = 'test-' + Math.random(); + const vulnerability = await Vulnerability.create({ + title: title + '-1', + domain + }).save(); + const domain2 = await Domain.create({ + name: 'test-' + Math.random(), + organization: organization2 + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: title + '-2', + domain: domain2 + }).save(); + const response = await request(app) + .post('/vulnerabilities/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + filters: { tag: tag.id } + }) + .expect(200); + expect(response.body.count).toEqual(1); + expect(response.body.result[0].id).toEqual(vulnerability.id); + }); + it('list by globalView with isKev filter should work', async () => { + const tag = await OrganizationTag.create({ + name: 'test-' + Math.random() + }).save(); + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false, + tags: [tag] + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const title = 'test-' + Math.random(); + const vulnerability = await Vulnerability.create({ + title: title + '-1', + isKev: true, + domain + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: title + '-2', + isKev: false, + domain + }).save(); + const response = await request(app) + .post('/vulnerabilities/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + filters: { organization: organization.id, isKev: true } + }) + .expect(200); + expect(response.body.count).toEqual(1); + expect(response.body.result[0].id).toEqual(vulnerability.id); + + const response2 = await request(app) + .post('/vulnerabilities/search') + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .send({ + filters: { organization: organization.id, isKev: false } + }) + .expect(200); + expect(response2.body.count).toEqual(1); + expect(response2.body.result[0].id).toEqual(vulnerability2.id); + }); + it('list by org user with custom pageSize should work', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const vulnerability = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const response = await request(app) + .post('/vulnerabilities/search') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + pageSize: 1 + }) + .expect(200); + expect(response.body.count).toEqual(2); + expect(response.body.result.length).toEqual(1); + }); + it('list by org user with pageSize of -1 should return all results', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const vulnerability = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const response = await request(app) + .post('/vulnerabilities/search') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + pageSize: -1 + }) + .expect(200); + expect(response.body.count).toEqual(2); + expect(response.body.result.length).toEqual(2); + }); + it('list by org user with groupBy set should group results', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const domain2 = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const vulnerability = await Vulnerability.create({ + title: 'CVE-9999-0001', + cve: 'CVE-9999-0001', + severity: 'High', + domain + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: 'CVE-9999-0001', + cve: 'CVE-9999-0001', + severity: 'High', + domain: domain2 + }).save(); + const vulnerability3 = await Vulnerability.create({ + title: 'CVE-9999-0003', + cve: 'CVE-9999-0003', + severity: 'High', + domain + }).save(); + const response = await request(app) + .post('/vulnerabilities/search') + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + groupBy: 'title' + }) + .expect(200); + expect(response.body.count).toEqual(2); + expect(response.body.result.length).toEqual(2); + expect(response.body.result).toEqual([ + { + cve: 'CVE-9999-0001', + isKev: false, + severity: 'High', + cnt: '2', + description: '', + title: 'CVE-9999-0001' + }, + { + cve: 'CVE-9999-0003', + isKev: false, + severity: 'High', + cnt: '1', + description: '', + title: 'CVE-9999-0003' + } + ]); + }); + }); + describe('get', () => { + it("get by org user should work for vulnerability in the user's org", async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const vulnerability = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const response = await request(app) + .get(`/vulnerabilities/${vulnerability.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .expect(200); + expect(response.body.id).toEqual(vulnerability.id); + }); + it("get by org user should not work for vulnerability not in the user's org", async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization: organization2 + }).save(); + const vulnerability = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const response = await request(app) + .get(`/vulnerabilities/${vulnerability.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .expect(404); + expect(response.body).toEqual({}); + }); + it('get by globalView should work for any vulnerability', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization: organization + }).save(); + const vulnerability = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const response = await request(app) + .get(`/vulnerabilities/${vulnerability.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_VIEW + }) + ) + .expect(200); + expect(response.body.id).toEqual(vulnerability.id); + }); + }); + + describe('update', () => { + it("update by org user should work for vulnerability in the user's org", async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const vulnerability = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain, + state: 'open', + substate: 'unconfirmed' + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const response = await request(app) + .put(`/vulnerabilities/${vulnerability.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization.id, role: 'user' }] + }) + ) + .send({ + substate: 'remediated' + }) + .expect(200); + expect(response.body.state).toEqual('closed'); + expect(response.body.substate).toEqual('remediated'); + }); + it('update by global admin should work', async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const vulnerability = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain, + state: 'open', + substate: 'unconfirmed' + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const response = await request(app) + .put(`/vulnerabilities/${vulnerability.id}`) + .set( + 'Authorization', + createUserToken({ + userType: UserType.GLOBAL_ADMIN + }) + ) + .send({ + substate: 'remediated' + }) + .expect(200); + expect(response.body.state).toEqual('closed'); + expect(response.body.substate).toEqual('remediated'); + }); + it("update by org user should not work for vulnerability outside the user's org", async () => { + const organization = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const organization2 = await Organization.create({ + name: 'test-' + Math.random(), + rootDomains: ['test-' + Math.random()], + ipBlocks: [], + isPassive: false + }).save(); + const domain = await Domain.create({ + name: 'test-' + Math.random(), + organization + }).save(); + const vulnerability = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain, + state: 'open', + substate: 'unconfirmed' + }).save(); + const vulnerability2 = await Vulnerability.create({ + title: 'test-' + Math.random(), + domain + }).save(); + const response = await request(app) + .put(`/vulnerabilities/${vulnerability.id}`) + .set( + 'Authorization', + createUserToken({ + roles: [{ org: organization2.id, role: 'user' }] + }) + ) + .send({ + substate: 'remediated' + }) + .expect(404); + }); + }); +}); diff --git a/backend/tools/build-worker.sh b/backend/tools/build-worker.sh new file mode 100755 index 00000000..8ad5aa04 --- /dev/null +++ b/backend/tools/build-worker.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Builds worker docker image. +# If testing out tasks locally, you must run this command after making +# any changes to the worker. This command is also run automatically +# at the beginning of ./deploy-worker.sh. + +set -e + +docker build -t crossfeed-worker -f Dockerfile.worker . + +docker build -t pe-worker -f Dockerfile.pe . \ No newline at end of file diff --git a/backend/tools/deploy-worker.sh b/backend/tools/deploy-worker.sh new file mode 100755 index 00000000..085583d5 --- /dev/null +++ b/backend/tools/deploy-worker.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Deploys worker to Terraform. +# If the worker_ecs_repository_url output from Terraform changes, you should replace "XXX.dkr.ecr.us-east-1.amazonaws.com" in this file with that URL. +# To deploy staging, run ./deploy-worker.sh. +# To deploy prod, run ./deploy-worker.sh crossfeed-prod-worker. + +set -e + +AWS_ECR_DOMAIN=957221700844.dkr.ecr.us-east-1.amazonaws.com + +WORKER_TAG=${1:-crossfeed-staging-worker} +PE_WORKER_TAG=${1:-pe-staging-worker} + +./tools/build-worker.sh +aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $AWS_ECR_DOMAIN +docker tag crossfeed-worker:latest $AWS_ECR_DOMAIN/$WORKER_TAG:latest +docker push $AWS_ECR_DOMAIN/$WORKER_TAG:latest + +docker tag pe-worker:latest $AWS_ECR_DOMAIN/$PE_WORKER_TAG:latest +docker push $AWS_ECR_DOMAIN/$PE_WORKER_TAG:latest diff --git a/backend/tsconfig.json b/backend/tsconfig.json new file mode 100644 index 00000000..63f6220f --- /dev/null +++ b/backend/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "preserveConstEnums": true, + "strictNullChecks": true, + "sourceMap": true, + "allowJs": true, + "target": "es5", + "outDir": ".build", + "moduleResolution": "node", + "lib": ["es2015"], + "rootDir": "./", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "strictPropertyInitialization": false, + "allowSyntheticDefaultImports": true, + "downlevelIteration": true, + "baseUrl": ".", + "skipLibCheck": true, + "resolveJsonModule": true + }, + "include": [ + "src/**/*", + ] +} diff --git a/backend/webpack.backend.config.js b/backend/webpack.backend.config.js new file mode 100644 index 00000000..48bb572b --- /dev/null +++ b/backend/webpack.backend.config.js @@ -0,0 +1,37 @@ +const slsw = require('serverless-webpack'); +const webpack = require('webpack'); +const path = require('path'); + +module.exports = { + entry: slsw.lib.entries, + optimization: { + minimize: false + }, + target: 'node', + // These are not used for being built, and they can't build properly, so we exclude them. + externals: ['dockerode', 'canvas', 'pg-native'], + mode: slsw.lib.webpack.isLocal ? 'development' : 'production', + module: { + rules: [ + { + test: [/\.tsx?$/], + exclude: [/node_modules/, /\.test.tsx?$/], + use: [ + { + loader: 'ts-loader' + } + ] + } + ] + }, + resolve: { + modules: ['node_modules', path.resolve(__dirname, 'scripts')], + extensions: ['.ts', '.tsx', '.json', '.js', '.jsx', '...'] + }, + plugins: [ + new webpack.IgnorePlugin({ + resourceRegExp: + /^pg-native$|^cloudflare:sockets$|^mongodb$|^react-native-sqlite-storage$|^\@sap\/hana-client$/ + }) + ] +}; diff --git a/backend/webpack.worker.config.js b/backend/webpack.worker.config.js new file mode 100644 index 00000000..1de53671 --- /dev/null +++ b/backend/webpack.worker.config.js @@ -0,0 +1,45 @@ +const path = require('path'); +const webpack = require('webpack'); + +module.exports = { + entry: { + worker: path.join(__dirname, 'src/worker.ts') + }, + output: { + path: path.join(__dirname, 'dist'), + filename: '[name].bundle.js' + }, + optimization: { + minimize: false + }, + plugins: [ + // These are not used for being built, and they can't build properly, so we exclude them. + new webpack.NormalModuleReplacementPlugin( + /(dockerode)/, + require.resolve('./mock.js') + ), + new webpack.IgnorePlugin({ + resourceRegExp: /^pg-native$|^cloudflare:sockets$/ + }) + ], + externals: ['canvas'], + target: 'node', + mode: 'production', + module: { + rules: [ + { + test: [/\.tsx?$/], + exclude: [/node_modules/, /\.test.tsx?$/], + use: [ + { + loader: 'ts-loader' + } + ] + } + ] + }, + resolve: { + modules: ['node_modules', path.resolve(__dirname, 'scripts')], + extensions: ['.ts', '.tsx', '.json', '.js', '.jsx', '...'] + } +}; diff --git a/backend/worker/.safety-policy.yml b/backend/worker/.safety-policy.yml new file mode 100644 index 00000000..9db97d6f --- /dev/null +++ b/backend/worker/.safety-policy.yml @@ -0,0 +1,14 @@ +# Safety Security and License Configuration file +# We recommend checking this file into your source control in the root of your Python project +# If this file is named .safety-policy.yml and is in the same directory where you run `safety check` it will be used by default. +# Otherwise, you can use the flag `safety check --policy-file ` to specify a custom location and name for the file. +# To validate and review your policy file, run the validate command: `safety validate policy_file --path ` +security: # configuration for the `safety check` command + ignore-cvss-severity-below: 0 # A severity number between 0 and 10. Some helpful reference points: 9=ignore all vulnerabilities except CRITICAL severity. 7=ignore all vulnerabilities except CRITICAL & HIGH severity. 4=ignore all vulnerabilities except CRITICAL, HIGH & MEDIUM severity. + ignore-cvss-unknown-severity: False # True or False. We recommend you set this to False. + ignore-vulnerabilities: # Here you can list multiple specific vulnerabilities you want to ignore (optionally for a time period) + # We recommend making use of the optional `reason` and `expires` keys for each vulnerability that you ignore. + 54672: # Vulnerability found in scrapy version >= 0.7 + reason: No fix currently available # optional, for internal note purposes to communicate with your team. This reason will be reported in the Safety reports + expires: '2024-06-01' # We will revisit for a fix in 6 months. + continue-on-vulnerability-error: False # Suppress non-zero exit codes when vulnerabilities are found. Enable this in pipelines and CI/CD processes if you want to pass builds that have vulnerabilities. We recommend you set this to False. diff --git a/backend/worker/__init__.py b/backend/worker/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/worker/common_tlds.dict b/backend/worker/common_tlds.dict new file mode 100644 index 00000000..5be4cec8 --- /dev/null +++ b/backend/worker/common_tlds.dict @@ -0,0 +1,369 @@ +com +org +ru +net +de +br +uk +it +pl +jp +fr +au +ir +in +info +cz +nl +es +ca +ua +cn +kr +eu +co +ch +gr +tw +za +se +ro +hu +at +be +mx +vn +ar +sk +dk +no +io +tr +me +us +cl +biz +fi +tv +pt +nz +ie +xyz +id +il +by +hk +club +sg +lt +рф +my +online +kz +pro +cc +si +hr +bg +th +rs +su +pk +az +top +site +ng +edu +lv +pe +ae +ee +tk +ph +cat +pw +sa +uz +gov +is +mobi +win +nu +lu +ml +asia +ma +lk +shop +ge +ve +live +blog +ws +space +ba +ga +uy +bd +cf +website +life +tn +ai +tech +md +news +mk +ke +do +fm +ec +to +am +store +mn +la +py +coop +media +travel +al +world +work +np +one +eg +guru +cr +kg +link +stream +tz +ly +gg +app +icu +nyc +qa +agency +gt +host +network +bid +cloud +vip +bo +cy +dz +im +bz +aero +gq +ug +global +design +digital +eus +pa +af +vc +academy +li +ao +center +jobs +tj +studio +sv +ovh +mm +jo +ag +click +video +sd +kw +zone +zw +moe +press +cm +ps +ci +city +ooo +re +ninja +lb +wiki +mt +om +education +company +mz +gh +mu +kh +trade +solutions +mo +church +men +group +tips +sy +cu +ni +ac +plus +red +sh +guide +rw +games +bh +sn +st +hn +art +iq +expert +events +cash +social +party +school +bike +tools +ltd +services +moscow +et +bank +fo +so +market +cool +sexy +team +marketing +ms +tt +zm +bzh +mg +works +bio +bet +bw +cx +land +as +community +pg +gal +love +pub +cd +bt +email +tm +na +systems +date +ink +cafe +gdn +blue +capital +coffee +sc +pics +bn +chat +run +fit +science +help +bf +house +укр +care +nc +exchange +porn +photography +bm +audio +loan +scot +gratis +swiss +watch +ad +kim +support +training +рус +gl +gs +technology +codes +gallery +reviews +wtf +movie +mv +wien +webcam +farm +money +style +wang +ht +jm +software +bar +beer +law +photo +int +photos +directory +africa +energy +pf +gi +tc +fund +mw +international +fj +lol +amsterdam +report +camp +pr +earth +pink +sm +pm +ky +ventures +restaurant +bi +foundation +mr +je +mc +deals +direct +mil +show +tube +careers +film +fyi +buzz +cam +tl \ No newline at end of file diff --git a/backend/worker/generate_config.sh b/backend/worker/generate_config.sh new file mode 100755 index 00000000..0bcfb88e --- /dev/null +++ b/backend/worker/generate_config.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +# Generate database.ini +cat < pe-reports/src/pe_reports/data/database.ini +[postgres] +host=${DB_HOST} +database=${PE_DB_NAME} +user=${PE_DB_USERNAME} +password=${PE_DB_PASSWORD} +port=5432 + +[shodan] +key1=${PE_SHODAN_API_KEYS} + +[hibp] +key=${HIBP_API_KEY} + +[pe_api] +pe_api_key= +pe_api_url= + +[staging] +[cyhy_mongo] + +[sixgill] +client_id=${SIXGILL_CLIENT_ID} +client_secret=${SIXGILL_CLIENT_SECRET} + +[whoisxml] +key= + +[intelx] +api_key=${INTELX_API_KEY} + +[dnsmonitor] +[pe_db_password_key] +[blocklist] +[dehashed] +[dnstwist] + +[API_Client_ID] +[API_Client_secret] +[API_WHOIS] + + +EOF + +# Find the path to the pe_reports package in site-packages +pe_reports_path=$(pip show pe-reports | grep -E '^Location:' | awk '{print $2}') + +# Ensure pe_reports_path ends with /pe_reports +pe_reports_path="${pe_reports_path%/pe-reports}/pe_reports" + +# Copy database.ini to the module's installation directory +cp /app/pe-reports/src/pe_reports/data/database.ini "${pe_reports_path}/data/" + +exec "$@" \ No newline at end of file diff --git a/backend/worker/mitmproxy_sign_requests.py b/backend/worker/mitmproxy_sign_requests.py new file mode 100644 index 00000000..691a5afb --- /dev/null +++ b/backend/worker/mitmproxy_sign_requests.py @@ -0,0 +1,103 @@ +""" +mitmproxy addon that signs requests and adds a Crossfeed-specific user agent. +""" +from mitmproxy import http, ctx +import os +import requests +import json +import traceback +from requests_http_signature import HTTPSignatureHeaderAuth + + +class SignRequests: + def __init__(self, key_id="", public_key="", private_key="", user_agent=""): + self.key_id = key_id + self.private_key = private_key + self.public_key = public_key + self.user_agent = user_agent + self.signature_auth = HTTPSignatureHeaderAuth( + key=self.private_key.encode(), key_id=key_id, algorithm="rsa-sha256" + ) + + def key_resolver(self, key_id, algorithm): + return self.public_key.encode() + + def verify_signature(self, method, url, date, signature): + HTTPSignatureHeaderAuth.verify( + requests.Request( + method=url, url=url, headers={"date": date, "Signature": signature} + ), + self.key_resolver, + "Signature", + ) + + def request(self, flow): + try: + if self.user_agent: + flow.request.headers["User-Agent"] = self.user_agent + + if self.private_key: + # For ease of verification, only sign the minimum attributes required: URL, date, and method. + signed_request = requests.Request( + method=flow.request.method, + url=flow.request.url, + headers={}, + data=None, + ).prepare() + self.signature_auth.__call__(signed_request) + flow.request.headers["Signature"] = signed_request.headers["Signature"] + flow.request.headers["Date"] = signed_request.headers["Date"] + + # ctx.log.info("Sent HTTP request with signature " + signed_request.headers["Signature"]) + except Exception as e: + flow.response = http.HTTPResponse.make( + 500, + f"mitmproxy failed:
            {e}

            {traceback.format_exc()}", + {"Content-Type": "text/html"}, + ) + + +test = os.getenv("WORKER_TEST", None) is not None + +if test: + # This is a test RSA private key and not used in any deployed environment + # file deepcode ignore HardcodedNonCryptoSecret: + private_key = """-----BEGIN RSA PRIVATE KEY----- +MIICXgIBAAKBgQDCFENGw33yGihy92pDjZQhl0C36rPJj+CvfSC8+q28hxA161QF +NUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6Z4UMR7EOcpfdUE9Hf3m/hs+F +UR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJwoYi+1hqp1fIekaxsyQIDAQAB +AoGBAJR8ZkCUvx5kzv+utdl7T5MnordT1TvoXXJGXK7ZZ+UuvMNUCdN2QPc4sBiA +QWvLw1cSKt5DsKZ8UETpYPy8pPYnnDEz2dDYiaew9+xEpubyeW2oH4Zx71wqBtOK +kqwrXa/pzdpiucRRjk6vE6YY7EBBs/g7uanVpGibOVAEsqH1AkEA7DkjVH28WDUg +f1nqvfn2Kj6CT7nIcE3jGJsZZ7zlZmBmHFDONMLUrXR/Zm3pR5m0tCmBqa5RK95u +412jt1dPIwJBANJT3v8pnkth48bQo/fKel6uEYyboRtA5/uHuHkZ6FQF7OUkGogc +mSJluOdc5t6hI1VsLn0QZEjQZMEOWr+wKSMCQQCC4kXJEsHAve77oP6HtG/IiEn7 +kpyUXRNvFsDE0czpJJBvL/aRFUJxuRK91jhjC68sA7NsKMGg5OXb5I5Jj36xAkEA +gIT7aFOYBFwGgQAQkWNKLvySgKbAZRTeLBacpHMuQdl1DfdntvAyqpAZ0lY0RKmW +G6aFKaqQfOXKCyWoUiVknQJAXrlgySFci/2ueKlIE1QqIiLSZ8V8OlpFLRnb1pzI +7U1yQXnTAEFYM560yJlzUpOb1V4cScGd365tiSMvxLOvTA== +-----END RSA PRIVATE KEY-----""" + + public_key = """-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3 +6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6 +Z4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw +oYi+1hqp1fIekaxsyQIDAQAB +-----END PUBLIC KEY-----""" + addons = [ + SignRequests( + key_id="crossfeed", + public_key=public_key, + private_key=private_key, + user_agent="Crossfeed test user agent", + ) + ] +else: + addons = [ + SignRequests( + key_id="crossfeed", + public_key=os.getenv("WORKER_SIGNATURE_PUBLIC_KEY", ""), + private_key=os.getenv("WORKER_SIGNATURE_PRIVATE_KEY", ""), + user_agent=os.getenv("WORKER_USER_AGENT", ""), + ) + ] diff --git a/backend/worker/pe-worker-entry.sh b/backend/worker/pe-worker-entry.sh new file mode 100755 index 00000000..4a441751 --- /dev/null +++ b/backend/worker/pe-worker-entry.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +set -e + +echo "Starting pe-worker-entry.sh script" +echo "$SERVICE_QUEUE_URL" + +echo "Running $SERVICE_TYPE" + +# Check if the QUEUE_URL environment variable is set +if [ -z "$SERVICE_QUEUE_URL" ]; then + echo "SERVICE_QUEUE_URL environment variable is not set. Exiting." + exit 1 +fi + +# Function to retrieve a message from RabbitMQ queue +get_rabbitmq_message() { + curl -s -u "guest:guest" \ + -H "content-type:application/json" \ + -X POST "http://rabbitmq:15672/api/queues/%2F/$SERVICE_QUEUE_URL/get" \ + --data '{"count": 1, "requeue": false, "encoding": "auto", "ackmode": "ack_requeue_false"}' +} + + +while true; do + # Receive message from the Scan specific queue + if [ "$IS_LOCAL" = true ]; then + echo "Running local RabbitMQ logic..." + # Call the function and capture the response + RESPONSE=$(get_rabbitmq_message) && + echo "Response from get_rabbitmq_message: $RESPONSE" && + # Extract the JSON payload from the response body + MESSAGE=$(echo "$RESPONSE" | jq -r '.[0].payload') + MESSAGE=$(echo "$MESSAGE" | sed 's/\\"/"/g') + echo "MESSAGE: $MESSAGE" + + else + echo "Running live SQS logic..." + MESSAGE=$(aws sqs receive-message --queue-url "$SERVICE_QUEUE_URL" --output json --max-number-of-messages 1) + echo "MESSAGE: $MESSAGE" + fi + + # Check if there are no more messages. If no more, then exit Fargate container + if [ -z "$MESSAGE" ] || [ "$MESSAGE" == "null" ]; then + echo "No more messages in the queue. Exiting." + break + fi + + # Extract the org_name from the message body + if [ "$IS_LOCAL" = true ]; then + ORG=$(echo "$MESSAGE" | jq -r '.org') + else + ORG=$(echo "$MESSAGE" | jq -r '.Messages[0].Body | fromjson | .org') + fi + + if [[ "$SERVICE_TYPE" = *"shodan"* ]]; then + COMMAND="pe-source shodan --soc_med_included --org=$ORG" + elif [[ "$SERVICE_TYPE" = *"dnstwist"* ]]; then + COMMAND="pe-source dnstwist --org=$ORG" + elif [[ "$SERVICE_TYPE" = *"hibp"* ]]; then + COMMAND="pe-source hibp --org=$ORG" + elif [[ "$SERVICE_TYPE" = *"intelx"* ]]; then + COMMAND="pe-source intelx --org=$ORG --soc_med_included" + elif [[ "$SERVICE_TYPE" = *"cybersixgill"* ]]; then + COMMAND="pe-source cybersixgill --org=$ORG --soc_med_included" + else + echo "Unsupported SERVICE_TYPE: $SERVICE_TYPE" + break + fi + + echo "Running $COMMAND" + + # Run the pe-source command + eval "$COMMAND" && + + cat /app/pe_reports_logging.log + + # Delete the processed message from the queue + if [ "$IS_LOCAL" = true ]; then + echo "Done with $ORG" + + else + RECEIPT_HANDLE=$(echo "$MESSAGE" | jq -r '.Messages[0].ReceiptHandle') + aws sqs delete-message --queue-url "$SERVICE_QUEUE_URL" --receipt-handle "$RECEIPT_HANDLE" + echo "Done with $ORG" + fi +done \ No newline at end of file diff --git a/backend/worker/pe_scripts/README.md b/backend/worker/pe_scripts/README.md new file mode 100644 index 00000000..5bc3fbb3 --- /dev/null +++ b/backend/worker/pe_scripts/README.md @@ -0,0 +1,6 @@ +# Quick ReadMe for PE!!! + +The scripts in this directory are run by the P&E team only. + +Scans that start with "runPe" initiate scripts in the pe-reports repository +which pull data from third-party APIs and store the results in the P&E database instance. diff --git a/backend/worker/pe_scripts/runPeAlerts.sh b/backend/worker/pe_scripts/runPeAlerts.sh new file mode 100755 index 00000000..03c1ba36 --- /dev/null +++ b/backend/worker/pe_scripts/runPeAlerts.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd /app/pe-reports + +pe-source cybersixgill --cybersix-methods=alerts --soc_med_included \ No newline at end of file diff --git a/backend/worker/pe_scripts/runPeCredentials.sh b/backend/worker/pe_scripts/runPeCredentials.sh new file mode 100755 index 00000000..69c7d6ba --- /dev/null +++ b/backend/worker/pe_scripts/runPeCredentials.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd /app/pe-reports + +pe-source cybersixgill --cybersix-methods=credentials --soc_med_included \ No newline at end of file diff --git a/backend/worker/pe_scripts/runPeDnsMonitor.sh b/backend/worker/pe_scripts/runPeDnsMonitor.sh new file mode 100755 index 00000000..7cfe5b26 --- /dev/null +++ b/backend/worker/pe_scripts/runPeDnsMonitor.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd /app/pe-reports + +pe-source dnsmonitor \ No newline at end of file diff --git a/backend/worker/pe_scripts/runPeDnstwist.sh b/backend/worker/pe_scripts/runPeDnstwist.sh new file mode 100755 index 00000000..ca83662e --- /dev/null +++ b/backend/worker/pe_scripts/runPeDnstwist.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd /app/pe-reports/src/adhoc + +python3 run_dnstwist.py \ No newline at end of file diff --git a/backend/worker/pe_scripts/runPeHibp.sh b/backend/worker/pe_scripts/runPeHibp.sh new file mode 100755 index 00000000..0fe9479d --- /dev/null +++ b/backend/worker/pe_scripts/runPeHibp.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd /app/pe-reports/src/adhoc + +python3 hibp_latest.py \ No newline at end of file diff --git a/backend/worker/pe_scripts/runPeIntelx.sh b/backend/worker/pe_scripts/runPeIntelx.sh new file mode 100755 index 00000000..ed3ad5ea --- /dev/null +++ b/backend/worker/pe_scripts/runPeIntelx.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd /app/pe-reports + +pe-source intelx \ No newline at end of file diff --git a/backend/worker/pe_scripts/runPeMentions.sh b/backend/worker/pe_scripts/runPeMentions.sh new file mode 100755 index 00000000..3d47692f --- /dev/null +++ b/backend/worker/pe_scripts/runPeMentions.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd /app/pe-reports + +pe-source cybersixgill --cybersix-methods=mentions --soc_med_included \ No newline at end of file diff --git a/backend/worker/pe_scripts/runPeShodan.sh b/backend/worker/pe_scripts/runPeShodan.sh new file mode 100755 index 00000000..7a73cf60 --- /dev/null +++ b/backend/worker/pe_scripts/runPeShodan.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd /app/pe-reports + +pe-source shodan --soc_med_included \ No newline at end of file diff --git a/backend/worker/pe_scripts/runPeTopCVEs.sh b/backend/worker/pe_scripts/runPeTopCVEs.sh new file mode 100755 index 00000000..d51f246a --- /dev/null +++ b/backend/worker/pe_scripts/runPeTopCVEs.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd /app/pe-reports + +pe-source cybersixgill --cybersix-methods=topCVEs --soc_med_included \ No newline at end of file diff --git a/backend/worker/requirements.txt b/backend/worker/requirements.txt new file mode 100644 index 00000000..d362d5a5 --- /dev/null +++ b/backend/worker/requirements.txt @@ -0,0 +1,37 @@ +build==0.10.0 +certifi==2023.7.22 +charset-normalizer==3.1.0 +click==8.1.3 +dateparser==1.1.8 +dnstwist==20230509 +docopt==0.6.2 +idna==3.4 +joblib==1.2.0 +git+https://github.com/mitmproxy/mitmproxy@e0e46f4 +mitmproxy_wireguard==0.1.23 +numpy==1.24.3 +pandas==2.1.4 +phonenumbers==8.13.8 +pip-tools==7.1.0 +pipreqs==0.4.11 +psycopg2-binary==2.9.5 +pyproject_hooks==1.0.0 +pytest==7.3.0 +python-dateutil==2.8.2 +pytz==2023.3 +pytz-deprecation-shim==0.1.0.post0 +regex==2023.3.23 +requests==2.31.0 +requests-http-signature==0.2.0 +Scrapy==2.9.0 +git+https://github.com/LeapBeyond/scrubadub.git@d0e12c5d922631af3532d044196b05fb1b7c8c1c +scikit-learn==1.2.2 +six==1.16.0 +threadpoolctl==3.1.0 +tomli==2.0.1 +trustymail @ git+https://github.com/Matthew-Grayson/trustymail@production +tzdata==2023.3 +tzlocal==4.3 +yarg==0.1.9 +wheel==0.38.1 +setuptools==65.5.1 diff --git a/backend/worker/shodan.sh b/backend/worker/shodan.sh new file mode 100644 index 00000000..d73535fa --- /dev/null +++ b/backend/worker/shodan.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +set -e + +cd /app/pe-reports + +echo "Starting Shodan" + +pe-source shodan --orgs=DHS --soc_med_included + +echo "Done" \ No newline at end of file diff --git a/backend/worker/test_mitmproxy_sign_requests.py b/backend/worker/test_mitmproxy_sign_requests.py new file mode 100644 index 00000000..766ca5fd --- /dev/null +++ b/backend/worker/test_mitmproxy_sign_requests.py @@ -0,0 +1,58 @@ +from mitmproxy import exceptions +from mitmproxy.test import tflow +from mitmproxy.test import taddons +from .mitmproxy_sign_requests import SignRequests + +# This is a test RSA private key and not used in any deployed environment +private_key = """-----BEGIN RSA PRIVATE KEY----- +MIICXgIBAAKBgQDCFENGw33yGihy92pDjZQhl0C36rPJj+CvfSC8+q28hxA161QF +NUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6Z4UMR7EOcpfdUE9Hf3m/hs+F +UR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJwoYi+1hqp1fIekaxsyQIDAQAB +AoGBAJR8ZkCUvx5kzv+utdl7T5MnordT1TvoXXJGXK7ZZ+UuvMNUCdN2QPc4sBiA +QWvLw1cSKt5DsKZ8UETpYPy8pPYnnDEz2dDYiaew9+xEpubyeW2oH4Zx71wqBtOK +kqwrXa/pzdpiucRRjk6vE6YY7EBBs/g7uanVpGibOVAEsqH1AkEA7DkjVH28WDUg +f1nqvfn2Kj6CT7nIcE3jGJsZZ7zlZmBmHFDONMLUrXR/Zm3pR5m0tCmBqa5RK95u +412jt1dPIwJBANJT3v8pnkth48bQo/fKel6uEYyboRtA5/uHuHkZ6FQF7OUkGogc +mSJluOdc5t6hI1VsLn0QZEjQZMEOWr+wKSMCQQCC4kXJEsHAve77oP6HtG/IiEn7 +kpyUXRNvFsDE0czpJJBvL/aRFUJxuRK91jhjC68sA7NsKMGg5OXb5I5Jj36xAkEA +gIT7aFOYBFwGgQAQkWNKLvySgKbAZRTeLBacpHMuQdl1DfdntvAyqpAZ0lY0RKmW +G6aFKaqQfOXKCyWoUiVknQJAXrlgySFci/2ueKlIE1QqIiLSZ8V8OlpFLRnb1pzI +7U1yQXnTAEFYM560yJlzUpOb1V4cScGd365tiSMvxLOvTA== +-----END RSA PRIVATE KEY-----""" + +public_key = """-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3 +6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6 +Z4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw +oYi+1hqp1fIekaxsyQIDAQAB +-----END PUBLIC KEY-----""" + + +def test_user_agent_and_signature(): + sr = SignRequests( + key_id="crossfeed", + public_key=public_key, + private_key=private_key, + user_agent="custom user agent", + ) + with taddons.context() as tctx: + f = tflow.tflow() + f.request.headers["User-Agent"] = "original user agent" + sr.request(f) + assert f.request.headers["User-Agent"] == "custom user agent" + sr.verify_signature( + method=f.request.method, + url=f.request.url, + date=f.request.headers["Date"], + signature=f.request.headers["Signature"], + ) + + +def test_no_user_agent_or_signature_set(): + sr = SignRequests(key_id="", public_key="", private_key="", user_agent="") + with taddons.context() as tctx: + f = tflow.tflow() + sr.request(f) + assert "User-Agent" not in f.request.headers + assert "Date" not in f.request.headers + assert "Signature" not in f.request.headers diff --git a/backend/worker/webscraper/.gitignore b/backend/worker/webscraper/.gitignore new file mode 100644 index 00000000..38934c50 --- /dev/null +++ b/backend/worker/webscraper/.gitignore @@ -0,0 +1,3 @@ +s3-data +out.jl +domains.txt \ No newline at end of file diff --git a/backend/worker/webscraper/scrapy.cfg b/backend/worker/webscraper/scrapy.cfg new file mode 100644 index 00000000..c1edb9b4 --- /dev/null +++ b/backend/worker/webscraper/scrapy.cfg @@ -0,0 +1,11 @@ +# Automatically created by: scrapy startproject +# +# For more information about the [deploy] section see: +# https://scrapyd.readthedocs.io/en/latest/deploy.html + +[settings] +default = webscraper.settings + +[deploy] +#url = http://localhost:6800/ +project = webscraper diff --git a/backend/worker/webscraper/webscraper/__init__.py b/backend/worker/webscraper/webscraper/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/worker/webscraper/webscraper/items.py b/backend/worker/webscraper/webscraper/items.py new file mode 100644 index 00000000..a581a5fc --- /dev/null +++ b/backend/worker/webscraper/webscraper/items.py @@ -0,0 +1,6 @@ +# Define here the models for your scraped items +# +# See documentation in: +# https://docs.scrapy.org/en/latest/topics/items.html + +import scrapy diff --git a/backend/worker/webscraper/webscraper/middlewares.py b/backend/worker/webscraper/webscraper/middlewares.py new file mode 100644 index 00000000..3efe286a --- /dev/null +++ b/backend/worker/webscraper/webscraper/middlewares.py @@ -0,0 +1,103 @@ +# Define here the models for your spider middleware +# +# See documentation in: +# https://docs.scrapy.org/en/latest/topics/spider-middleware.html + +from scrapy import signals + +# useful for handling different item types with a single interface +from itemadapter import is_item, ItemAdapter + + +class WebscraperSpiderMiddleware: + # Not all methods need to be defined. If a method is not defined, + # scrapy acts as if the spider middleware does not modify the + # passed objects. + + @classmethod + def from_crawler(cls, crawler): + # This method is used by Scrapy to create your spiders. + s = cls() + crawler.signals.connect(s.spider_opened, signal=signals.spider_opened) + return s + + def process_spider_input(self, response, spider): + # Called for each response that goes through the spider + # middleware and into the spider. + + # Should return None or raise an exception. + return None + + def process_spider_output(self, response, result, spider): + # Called with the results returned from the Spider, after + # it has processed the response. + + # Must return an iterable of Request, or item objects. + for i in result: + yield i + + def process_spider_exception(self, response, exception, spider): + # Called when a spider or process_spider_input() method + # (from other spider middleware) raises an exception. + + # Should return either None or an iterable of Request or item objects. + pass + + def process_start_requests(self, start_requests, spider): + # Called with the start requests of the spider, and works + # similarly to the process_spider_output() method, except + # that it doesn’t have a response associated. + + # Must return only requests (not items). + for r in start_requests: + yield r + + def spider_opened(self, spider): + spider.logger.info("Spider opened: %s" % spider.name) + + +class WebscraperDownloaderMiddleware: + # Not all methods need to be defined. If a method is not defined, + # scrapy acts as if the downloader middleware does not modify the + # passed objects. + + @classmethod + def from_crawler(cls, crawler): + # This method is used by Scrapy to create your spiders. + s = cls() + crawler.signals.connect(s.spider_opened, signal=signals.spider_opened) + return s + + def process_request(self, request, spider): + # Called for each request that goes through the downloader + # middleware. + + # Must either: + # - return None: continue processing this request + # - or return a Response object + # - or return a Request object + # - or raise IgnoreRequest: process_exception() methods of + # installed downloader middleware will be called + return None + + def process_response(self, request, response, spider): + # Called with the response returned from the downloader. + + # Must either; + # - return a Response object + # - return a Request object + # - or raise IgnoreRequest + return response + + def process_exception(self, request, exception, spider): + # Called when a download handler or a process_request() + # (from other downloader middleware) raises an exception. + + # Must either: + # - return None: continue processing this exception + # - return a Response object: stops process_exception() chain + # - return a Request object: stops process_exception() chain + pass + + def spider_opened(self, spider): + spider.logger.info("Spider opened: %s" % spider.name) diff --git a/backend/worker/webscraper/webscraper/pipelines.py b/backend/worker/webscraper/webscraper/pipelines.py new file mode 100644 index 00000000..c9b63243 --- /dev/null +++ b/backend/worker/webscraper/webscraper/pipelines.py @@ -0,0 +1,20 @@ +from scrapy.exceptions import DropItem +import json +import os +from io import BytesIO +from datetime import datetime + + +class ExportFilePipeline: + """Prints file contents to the console.""" + + def __init__(self, print=print): + self.urls_seen = set() + self.print = print + + def process_item(self, item, spider=None): + if item["url"] in self.urls_seen: + raise DropItem("Duplicate item found with url: %s" % item["url"]) + self.urls_seen.add(item["url"]) + self.print("database_output: " + json.dumps(item)) + return item diff --git a/backend/worker/webscraper/webscraper/settings.py b/backend/worker/webscraper/webscraper/settings.py new file mode 100644 index 00000000..40d5c9c5 --- /dev/null +++ b/backend/worker/webscraper/webscraper/settings.py @@ -0,0 +1,101 @@ +# Scrapy settings for webscraper project +# +# For simplicity, this file contains only settings considered important or +# commonly used. You can find more settings consulting the documentation: +# +# https://docs.scrapy.org/en/latest/topics/settings.html +# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html +# https://docs.scrapy.org/en/latest/topics/spider-middleware.html +import logging + +BOT_NAME = "webscraper" + +SPIDER_MODULES = ["webscraper.spiders"] +NEWSPIDER_MODULE = "webscraper.spiders" + + +# Crawl responsibly by identifying yourself (and your website) on the user-agent +# USER_AGENT = 'webscraper (+http://www.yourdomain.com)' + +# Obey robots.txt rules +ROBOTSTXT_OBEY = True + +# Configure maximum concurrent requests performed by Scrapy (default: 16) +# CONCURRENT_REQUESTS = 16 + +# Configure a delay for requests for the same website (default: 0) +# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay +# See also autothrottle settings and docs +# DOWNLOAD_DELAY = 3 +# The download delay setting will honor only one of: +# CONCURRENT_REQUESTS_PER_DOMAIN = 16 +# CONCURRENT_REQUESTS_PER_IP = 16 + +# Disable cookies (enabled by default) +COOKIES_ENABLED = False + +# Disable Telnet Console (enabled by default) +TELNETCONSOLE_ENABLED = False + +# Override the default request headers: +# DEFAULT_REQUEST_HEADERS = { +# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', +# 'Accept-Language': 'en', +# } + +# Enable or disable spider middlewares +# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html +# SPIDER_MIDDLEWARES = { +# 'webscraper.middlewares.WebscraperSpiderMiddleware': 543, +# } + +# Enable or disable downloader middlewares +# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html +# DOWNLOADER_MIDDLEWARES = { +# 'webscraper.middlewares.WebscraperDownloaderMiddleware': 543, +# } + +# Enable or disable extensions +# See https://docs.scrapy.org/en/latest/topics/extensions.html +# EXTENSIONS = { +# 'scrapy.extensions.telnet.TelnetConsole': None, +# } + +# Configure item pipelines +# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html +ITEM_PIPELINES = { + "webscraper.pipelines.ExportFilePipeline": 300, +} + +# Enable and configure the AutoThrottle extension (disabled by default) +# See https://docs.scrapy.org/en/latest/topics/autothrottle.html +AUTOTHROTTLE_ENABLED = True +# The initial download delay +AUTOTHROTTLE_START_DELAY = 5 +# The maximum download delay to be set in case of high latencies +AUTOTHROTTLE_MAX_DELAY = 60 +# The average number of requests Scrapy should be sending in parallel to +# each remote server +AUTOTHROTTLE_TARGET_CONCURRENCY = 2.0 +# Enable showing throttling stats for every response received: +AUTOTHROTTLE_DEBUG = False + +# Enable and configure HTTP caching (disabled by default) +# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings +# HTTPCACHE_ENABLED = True +# HTTPCACHE_EXPIRATION_SECS = 0 +# HTTPCACHE_DIR = 'httpcache' +# HTTPCACHE_IGNORE_HTTP_CODES = [] +# HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage' + +# FEEDS = { +# 'out.jl': { +# 'format': 'jsonlines' +# } +# } + +# DEPTH_LIMIT = 2 + +LOG_LEVEL = logging.INFO + +HTTPERROR_ALLOW_ALL = True diff --git a/backend/worker/webscraper/webscraper/spiders/__init__.py b/backend/worker/webscraper/webscraper/spiders/__init__.py new file mode 100644 index 00000000..ebd689ac --- /dev/null +++ b/backend/worker/webscraper/webscraper/spiders/__init__.py @@ -0,0 +1,4 @@ +# This package will contain the spiders of your Scrapy project +# +# Please refer to the documentation for information on how to create and manage +# your spiders. diff --git a/backend/worker/webscraper/webscraper/spiders/main_spider.py b/backend/worker/webscraper/webscraper/spiders/main_spider.py new file mode 100644 index 00000000..af3b2a86 --- /dev/null +++ b/backend/worker/webscraper/webscraper/spiders/main_spider.py @@ -0,0 +1,42 @@ +import scrapy +from scrapy.spiders import CrawlSpider, Rule +from scrapy.linkextractors import LinkExtractor +from urllib.parse import urlparse +import hashlib +import json + + +class MainSpider(CrawlSpider): + name = "main" + + rules = (Rule(LinkExtractor(), callback="parse_item", follow=True),) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + with open(self.domains_file, "r") as f: + self.start_urls = f.read().split("\n") + self.allowed_domains = [urlparse(url).netloc for url in self.start_urls] + + def parse_start_url(self, response): + return self.parse_item(response) + + def parse_item(self, response): + try: + body_decoded = response.body.decode() + except UnicodeDecodeError: + body_decoded = "" + + headers = [] + for name, values in response.headers.items(): + for value in values: + headers.append({"name": name.decode(), "value": value.decode()}) + + item = dict( + status=response.status, + url=response.url, + domain_name=urlparse(response.url).netloc, + body=body_decoded, + response_size=len(response.body), + headers=headers, + ) + yield item diff --git a/backend/worker/webscraper/webscraper/spiders/test_main_spider.py b/backend/worker/webscraper/webscraper/spiders/test_main_spider.py new file mode 100644 index 00000000..f7d86199 --- /dev/null +++ b/backend/worker/webscraper/webscraper/spiders/test_main_spider.py @@ -0,0 +1,79 @@ +import pytest +from .main_spider import MainSpider +from scrapy.http import Response, Request +from tempfile import NamedTemporaryFile +import json + +SAMPLE_HEADERS = { + "Server": "Apache", + "X-Content-Type-Options": "nosniff, nosniff", + "Link": '; rel="shortlink", ; rel="canonical", ; rel="revision"', + "X-UA-Compatible": "IE=edge", + "Content-Language": "en", + "X-Frame-Options": "SAMEORIGIN", + "X-Generator": "Drupal 8 (https://www.drupal.org)", + "Content-Type": "text/html; charset=UTF-8", + "Vary": "Accept-Encoding", + "Content-Encoding": "gzip", + "Cache-Control": "private, no-cache, must-revalidate", + "Expires": "Sun, 18 Oct 2020 00:08:03 GMT", + "Date": "Sun, 18 Oct 2020 00:08:03 GMT", + "Content-Length": "15726", + "Connection": "keep-alive", + "Strict-Transport-Security": "max-age=31536000 ; includeSubDomains", +} + + +@pytest.fixture +def spider(): + with NamedTemporaryFile() as f: + return MainSpider(domains_file=f.name) + + +def test_sample_website(spider): + response = Response( + url="https://www.cisa.gov", + request=Request(url="https://www.cisa.gov"), + body="Hello world".encode(), + headers=SAMPLE_HEADERS, + ) + results = list(spider.parse_item(response)) + assert results == [ + { + "status": 200, + "url": "https://www.cisa.gov", + "domain_name": "www.cisa.gov", + "body": "Hello world", + "response_size": 24, + "headers": [ + {"name": "Server", "value": "Apache"}, + {"name": "X-Content-Type-Options", "value": "nosniff, nosniff"}, + { + "name": "Link", + "value": '; rel="shortlink", ; rel="canonical", ; rel="revision"', + }, + {"name": "X-Ua-Compatible", "value": "IE=edge"}, + {"name": "Content-Language", "value": "en"}, + {"name": "X-Frame-Options", "value": "SAMEORIGIN"}, + {"name": "X-Generator", "value": "Drupal 8 (https://www.drupal.org)"}, + {"name": "Content-Type", "value": "text/html; charset=UTF-8"}, + {"name": "Vary", "value": "Accept-Encoding"}, + {"name": "Content-Encoding", "value": "gzip"}, + { + "name": "Cache-Control", + "value": "private, no-cache, must-revalidate", + }, + {"name": "Expires", "value": "Sun, 18 Oct 2020 00:08:03 GMT"}, + {"name": "Date", "value": "Sun, 18 Oct 2020 00:08:03 GMT"}, + {"name": "Content-Length", "value": "15726"}, + {"name": "Connection", "value": "keep-alive"}, + { + "name": "Strict-Transport-Security", + "value": "max-age=31536000 ; includeSubDomains", + }, + ], + } + ] + + # Make sure this doesn't give an error; this can fail if the response has any binary values. + json.dumps(results) diff --git a/backend/worker/webscraper/webscraper/test_pipelines.py b/backend/worker/webscraper/webscraper/test_pipelines.py new file mode 100644 index 00000000..ecde460f --- /dev/null +++ b/backend/worker/webscraper/webscraper/test_pipelines.py @@ -0,0 +1,59 @@ +import pytest +from .pipelines import ExportFilePipeline +from scrapy.exceptions import DropItem +from unittest.mock import MagicMock + + +@pytest.fixture +def pipeline(): + return ExportFilePipeline(print=MagicMock()) + + +@pytest.fixture +def item(): + return { + "status": 200, + "url": "https://www.cisa.gov", + "domain_name": "www.cisa.gov", + "body": "Hello world", + "response_size": 24, + "headers": [ + {"name": "Server", "value": "Apache"}, + {"name": "X-Content-Type-Options", "value": "nosniff, nosniff"}, + { + "name": "Link", + "value": '; rel="shortlink", ; rel="canonical", ; rel="revision"', + }, + {"name": "X-Ua-Compatible", "value": "IE=edge"}, + {"name": "Content-Language", "value": "en"}, + {"name": "X-Frame-Options", "value": "SAMEORIGIN"}, + {"name": "X-Generator", "value": "Drupal 8 (https://www.drupal.org)"}, + {"name": "Content-Type", "value": "text/html; charset=UTF-8"}, + {"name": "Vary", "value": "Accept-Encoding"}, + {"name": "Content-Encoding", "value": "gzip"}, + {"name": "Cache-Control", "value": "private, no-cache, must-revalidate"}, + {"name": "Expires", "value": "Sun, 18 Oct 2020 00:08:03 GMT"}, + {"name": "Date", "value": "Sun, 18 Oct 2020 00:08:03 GMT"}, + {"name": "Content-Length", "value": "15726"}, + {"name": "Connection", "value": "keep-alive"}, + { + "name": "Strict-Transport-Security", + "value": "max-age=31536000 ; includeSubDomains", + }, + ], + } + + +def test_print_item(pipeline, item): + pipeline.process_item(item) + pipeline.print.assert_called_once() + + +def test_discard_duplicate_items(pipeline, item): + pipeline.process_item(item) + pipeline.print.assert_called_once() + pipeline.print.reset_mock() + with pytest.raises(DropItem): + pipeline.process_item(item) + pipeline.process_item(dict(item, url="new url")) + pipeline.print.assert_called_once() diff --git a/backend/worker/worker-entry.sh b/backend/worker/worker-entry.sh new file mode 100755 index 00000000..2a510ab8 --- /dev/null +++ b/backend/worker/worker-entry.sh @@ -0,0 +1,33 @@ +# Sets up an explicit proxy using mitmproxy. + +set -e + +PROXY_PORT=8080 + +# Reduce some long and unnecessary tabular output from pm2 with grep +pm2 start --interpreter none --error ~/pm2-error.log mitmdump -- -s worker/mitmproxy_sign_requests.py --set stream_large_bodies=1 --listen-port $PROXY_PORT | grep "^\[PM2\]" + +wait-port $PROXY_PORT -t 5000 || pm2 logs + +sleep 1 + +# Install the mitmproxy SSL certificate so that HTTPS connections can be proxied. +cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy-ca-cert.crt +update-ca-certificates --fresh + +# Required for node.js to trust our mitmproxy self-signed cert +export NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/mitmproxy-ca-cert.crt +export AWS_CA_BUNDLE=/usr/local/share/ca-certificates/mitmproxy-ca-cert.crt + +# Main code +echo "Running main code..." + +timeout 1d node --unhandled-rejections=strict worker.bundle.js + +pm2 stop all | grep "^\[PM2\]" + +echo "Printing pm2 error logs (if available):" + +cat ~/pm2-error.log + +echo "Done" \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100755 index 00000000..c8e87c31 --- /dev/null +++ b/build.sh @@ -0,0 +1,3 @@ +docker-compose down --volumes --rmi all +cd backend && npm run build-worker && cd .. && npm start +cd backend && npm run syncdb && npm run syncdb -- -d populate \ No newline at end of file diff --git a/dev.env.example b/dev.env.example new file mode 100644 index 00000000..be23dba0 --- /dev/null +++ b/dev.env.example @@ -0,0 +1,106 @@ +NODE_OPTIONS="--max-old-space-size=8192" + +DB_HOST=db +DB_USERNAME=crossfeed +DB_PASSWORD=password +DB_NAME=crossfeed +JWT_SECRET=CHANGE_ME + +REACT_APP_API_URL=http://localhost:3000 +REACT_APP_FARGATE_LOG_GROUP=crossfeed-staging-worker + +CF_API_KEY= +PE_API_KEY= + +CENSYS_API_ID= +CENSYS_API_SECRET= + +SHODAN_API_KEY= +HIBP_API_KEY= +LG_API_KEY= +LG_WORKSPACE_NAME= + +AWS_ACCESS_KEY_ID=aws_access_key +AWS_SECRET_ACCESS_KEY=aws_secret_key +AWS_REGION=us-east-1 + +LOGIN_GOV_REDIRECT_URI=http://localhost/login-gov-callback +LOGIN_GOV_BASE_URL=https://idp.int.identitysandbox.gov +# Dev RSA key -- Change for staging/production +LOGIN_GOV_JWT_KEY={"kty":"RSA","n":"xfCmufRkkmzqxmnQ90Mv03OyUVe2ezoToxUg-kS38N4xD4EmCViQbMcXUG54LbNgUkq0zNPr3qB9ic4SE7EOCwQfqRevwKFf8BaP4WWaJIJ8mOy7VzrT21hJo0NtcKsVjnXKq3KkWWJ0U1Zdaq2audCCTq-_faQfljjVR9jeGDgU8GTU6REs-CGXBRlIxFL3HXJnaTkJsdJeLKQ775Nf94Hx7nGS9bktyrWiBqwN7a3LIFarGjGCbcloJf64ZYv9IOp20ar0-eGyG0EJREBhUvPmTVr_RQW-67MlQOJN94Q_5xm8yt-AzH80dpN8JiPDVP0TpAmSfglUacpp31nsKw","e":"AQAB","d":"Fv2In_ie5dL4werwdoe7Olgp0gDaFR39wedmWSs6IiPsltxtSpCa1ceaEaGDG-vFuEktDs1ejBEgA62Hs_nQo77q3nz90OXterlkJM3kRXFSf4CfkdYnXUa35tqiD4APlOhhjeBW7nrdAAD8ALQBUKvDNth66WDyukQHobyyryVAHYzpOT3nIDbx8EwVVhCvq4PsLc2sF9yi7KMOXowU-3ROXG_x6a7qSRED_nbBNPj1WWRgB93r1TmCq1Awnn429b-QHNQv2DFv-Vt5Yw06RE67U3aunGKPVANULVOnvTw4GVxPDbBBJ_eWtNhwtwtctlWRxgO0QAydHVlGR7GsgQ","p":"4-9AvaRWCkgFJ30wmDsAuxOn3nDYTzPxfSbattyVaT-hSMbiggRTEmqZ8tptbYSgx35s-ZFeT8XiU8XulYmXoEUmUopiYF3m8MMe5uFtLrpfP5s_SkPE9Jly2jfm6NQRP0ute6AsvDQxTBYPEQrrtve4ulRIuPNo8qNE5AY0WBs","q":"3k_wEjf7BbGn3XZ8vv4nqpxNTZY_TXmvAuFDs5DTEPdUbNzR-vXx4P4QNsp8ybfxoK2O-eaF2z5j6_1-t7ABF_uyubjP47Jm6EMqhF6RGg-Z6PFEZe-XTJbE7YTACLCzh3tkcC7kT9H9gbhj8g05zigwCDURWo8JaAg5Qo2uHTE","dp":"Kl5QtG-VpreYbayxmbpt-lg-_fQP4TkQjGjqgs8h3rx7KGH_vJc9MdEq6J99c7wRfsObUhCZbU6lMVk7bgRzcNEpvHIIs00BHoPGfLguaV8vUU10SEOsmqLjXHjDrUeuJQvWJYKyjhFNkI0RI-PZyNrnNYtxMR_dxCxhI9mbZT0","dq":"dNRbnKdwsuBXEGp5SkH0hJOZiGGiKMv-7iuF0bMVSMBBzOgLLbDciVnbGYA2LigNwlwTXD8KL1rNVjKkylGjcYAjv7hhAA88R2ksyd2Msb5rKuDICi3sPCKroQr3hFmgL13oPZBXCZ-Ycvh9BbJvo2i5PUbuNMIgtlxEAzbDvrE","qi":"x9S2jLZXjtiWJ6nrfC1Jdcmgg13pj0Dm8lpmvWvJpVSnne1VyOoddXrQCtVPZAeibnbJ_KJ05W7fur0tq5CJp2u455G3Zpwsk31QsVTSSfQqvC8HUD1DO9lKiazFNoRgl9i2lY-Kic6y_IkGO9yKOZZBjPDcuVrwZqJ58LIXU_A"} +LOGIN_GOV_ISSUER=urn:gov:gsa:openidconnect.profiles:sp:sso:cisa:crossfeed-dev + +CROSSFEED_SUPPORT_EMAIL_SENDER=noreply@staging.crossfeed.cyber.dhs.gov +CROSSFEED_SUPPORT_EMAIL_REPLYTO=vulnerability@cisa.dhs.gov +FRONTEND_DOMAIN=http://localhost + +SLS_LAMBDA_PREFIX=crossfeed-dev + +WORKER_USER_AGENT="Mozilla/5.0 (compatible; Crossfeed_Development/1.0; +https://github.com/cisagov/crossfeed/)" +WORKER_SIGNATURE_PUBLIC_KEY="-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3 +6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6 +Z4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw +oYi+1hqp1fIekaxsyQIDAQAB +-----END PUBLIC KEY-----" +# Dev RSA key -- Change for staging/production +WORKER_SIGNATURE_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY----- +MIICXgIBAAKBgQDCFENGw33yGihy92pDjZQhl0C36rPJj+CvfSC8+q28hxA161QF +NUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6Z4UMR7EOcpfdUE9Hf3m/hs+F +UR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJwoYi+1hqp1fIekaxsyQIDAQAB +AoGBAJR8ZkCUvx5kzv+utdl7T5MnordT1TvoXXJGXK7ZZ+UuvMNUCdN2QPc4sBiA +QWvLw1cSKt5DsKZ8UETpYPy8pPYnnDEz2dDYiaew9+xEpubyeW2oH4Zx71wqBtOK +kqwrXa/pzdpiucRRjk6vE6YY7EBBs/g7uanVpGibOVAEsqH1AkEA7DkjVH28WDUg +f1nqvfn2Kj6CT7nIcE3jGJsZZ7zlZmBmHFDONMLUrXR/Zm3pR5m0tCmBqa5RK95u +412jt1dPIwJBANJT3v8pnkth48bQo/fKel6uEYyboRtA5/uHuHkZ6FQF7OUkGogc +mSJluOdc5t6hI1VsLn0QZEjQZMEOWr+wKSMCQQCC4kXJEsHAve77oP6HtG/IiEn7 +kpyUXRNvFsDE0czpJJBvL/aRFUJxuRK91jhjC68sA7NsKMGg5OXb5I5Jj36xAkEA +gIT7aFOYBFwGgQAQkWNKLvySgKbAZRTeLBacpHMuQdl1DfdntvAyqpAZ0lY0RKmW +G6aFKaqQfOXKCyWoUiVknQJAXrlgySFci/2ueKlIE1QqIiLSZ8V8OlpFLRnb1pzI +7U1yQXnTAEFYM560yJlzUpOb1V4cScGd365tiSMvxLOvTA== +-----END RSA PRIVATE KEY-----" + +USE_COGNITO=1 + +REACT_APP_USE_COGNITO=1 +REACT_APP_USER_POOL_ID=us-east-1_uxiY8DOum +REACT_APP_USER_POOL_CLIENT_ID=1qf4cii9v0t9hn1hnr54f2ao0j +REACT_APP_TOTP_ISSUER=Local Crossfeed + +FARGATE_MAX_CONCURRENCY=100 +SCHEDULER_ORGS_PER_SCANTASK=2 + +ELASTICSEARCH_ENDPOINT=http://es:9200 +REACT_APP_TERMS_VERSION=1 + +REACT_APP_COOKIE_DOMAIN=localhost +MATOMO_URL=http://matomo +PE_API_URL=http://localhost:5000 + +EXPORT_BUCKET_NAME=crossfeed-local-exports + +REPORTS_BUCKET_NAME=crossfeed-local-reports + +EMAIL_BUCKET_NAME=cisa-crossfeed-staging-html-email + +IS_LOCAL=1 + + +PE_DB_NAME=pe +PE_DB_USERNAME=pe +PE_DB_PASSWORD=password + + +SHODAN_QUEUE_URL =shodanQueue +SHODAN_SERVICE_NAME=pe-shodan +PE_SHODAN_API_KEYS= +DNSTWIST_QUEUE_URL=dnstwistQueue +DNSTWIST_SERVICE_NAME=pe-dnstwist +HIBP_QUEUE_URL=hibpQueue +HIBP_SERVICE_NAME=pe-hibp +INTELX_QUEUE_URL=intelxQueue +INTELX_SERVICE_NAME=pe-intelx +CYBERSIXGILL_QUEUE_URL=cybersixgillQueue +CYBERSIXGILL_SERVICE_NAME=pe-cybersixgill + +PE_CLUSTER_NAME=pe-staging-worker diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..b64e0279 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,157 @@ +version: '3.4' + +services: + db: + image: postgres:15.3 + volumes: + - ./postgres-data:/var/lib/postgresql/data + - ./backend/db-init:/docker-entrypoint-initdb.d + ports: + - '5432:5432' + env_file: + - ./.env + networks: + - backend + environment: + - POSTGRES_USER=${DB_USERNAME} + - POSTGRES_PASSWORD=${DB_PASSWORD} + command: ['postgres', '-c', 'log_statement=all', '-c', 'log_duration=on'] + + frontend: + build: ./frontend + volumes: + - ./frontend/src:/app/src + ports: + - '80:3000' + env_file: + - ./.env + tty: true + + backend: + build: ./backend + volumes: + - ./backend/src:/app/src + - /var/run/docker.sock:/var/run/docker.sock + networks: + - backend + ports: + - '3000:3000' + env_file: + - ./.env + depends_on: + - db + + minio: + image: bitnami/minio:2020.9.26 + user: root + command: 'minio server /data' + networks: + - backend + volumes: + - ./minio-data:/data + ports: + - 9000:9000 + environment: + - MINIO_ACCESS_KEY=aws_access_key + - MINIO_SECRET_KEY=aws_secret_key + logging: + driver: none + + docs: + build: + context: ./ + dockerfile: ./Dockerfile.docs + volumes: + - ./docs/src:/app/docs/src + - ./docs/gatsby-browser.js:/app/docs/gatsby-browser.js + - ./docs/gatsby-config.js:/app/docs/gatsby-config.js + - ./docs/gatsby-node.js:/app/docs/gatsby-node.js + ports: + - '4000:4000' + - '44475:44475' + + es: + image: docker.elastic.co/elasticsearch/elasticsearch:7.9.0 + environment: + - discovery.type=single-node + - bootstrap.memory_lock=true + - 'ES_JAVA_OPTS=-Xms512m -Xmx512m' + command: ['elasticsearch', '-Elogger.level=WARN'] + networks: + - backend + ulimits: + memlock: + soft: -1 + hard: -1 + volumes: + - es-data:/usr/share/elasticsearch/data + ports: + - 9200:9200 + - 9300:9300 + logging: + driver: none + + # kib: + # image: docker.elastic.co/kibana/kibana:7.9.0 + # networks: + # - backend + # ports: + # - 5601:5601 + # environment: + # ELASTICSEARCH_URL: http://es:9200 + # ELASTICSEARCH_HOSTS: http://es:9200 + # LOGGING_QUIET: 'true' + + matomodb: + image: mariadb:10.6 + command: --max-allowed-packet=64MB + networks: + - backend + volumes: + - ./matomo-db-data:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=password + logging: + driver: none + + matomo: + image: matomo:3.14.1 + user: root + networks: + - backend + volumes: + - ./matomo-data:/var/www/html + environment: + - MATOMO_DATABASE_HOST=matomodb + - MATOMO_DATABASE_ADAPTER=mysql + - MATOMO_DATABASE_TABLES_PREFIX=matomo_ + - MATOMO_DATABASE_USERNAME=root + - MATOMO_DATABASE_PASSWORD=password + - MATOMO_DATABASE_DBNAME=matomo + - MATOMO_GENERAL_PROXY_URI_HEADER=1 + - MATOMO_GENERAL_ASSUME_SECURE_PROTOCOL=1 + logging: + driver: none + rabbitmq: + image: 'rabbitmq:3.8-management' + ports: + - '5672:5672' # RabbitMQ default port + - '15672:15672' # RabbitMQ management plugin + networks: + - backend + environment: + RABBITMQ_DEFAULT_USER: guest + RABBITMQ_DEFAULT_PASS: guest + volumes: + - rabbitmq-data:/var/lib/rabbitmq + +volumes: + postgres-data: + es-data: + minio-data: + matomo-db-data: + matomo-data: + rabbitmq-data: + +networks: + backend: diff --git a/docs/.dockerignore b/docs/.dockerignore new file mode 100644 index 00000000..b25d4052 --- /dev/null +++ b/docs/.dockerignore @@ -0,0 +1,6 @@ +node_modules +.cache +./docs/node_modules +./docs/.cache +**/node_modules +**/.cache \ No newline at end of file diff --git a/docs/.eslintrc.js b/docs/.eslintrc.js new file mode 100644 index 00000000..482ca17b --- /dev/null +++ b/docs/.eslintrc.js @@ -0,0 +1,18 @@ +module.exports = { + globals: { + __PATH_PREFIX__: true, + }, + extends: 'react-app', + rules: { + 'jsx-a11y/label-has-associated-control': [ + 'error', + { + labelComponents: [], + labelAttributes: [], + controlComponents: [], + assert: 'htmlFor', + depth: 25, + }, + ], + }, +}; diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000..570da134 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,3 @@ +src/generated +public +.cache \ No newline at end of file diff --git a/docs/.npmrc b/docs/.npmrc new file mode 100644 index 00000000..b6f27f13 --- /dev/null +++ b/docs/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/docs/.prettierignore b/docs/.prettierignore new file mode 100644 index 00000000..88cbdbf5 --- /dev/null +++ b/docs/.prettierignore @@ -0,0 +1,5 @@ +.cache +package.json +package-lock.json +public +generated \ No newline at end of file diff --git a/docs/.prettierrc b/docs/.prettierrc new file mode 100644 index 00000000..92beac47 --- /dev/null +++ b/docs/.prettierrc @@ -0,0 +1,7 @@ +{ + "endOfLine": "lf", + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5" +} \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..cc8a0ad9 --- /dev/null +++ b/docs/README.md @@ -0,0 +1 @@ +Based off of https://github.com/18F/federalist-uswds-gatsby. diff --git a/docs/gatsby-browser.js b/docs/gatsby-browser.js new file mode 100644 index 00000000..36033789 --- /dev/null +++ b/docs/gatsby-browser.js @@ -0,0 +1,81 @@ +/** + * Implement Gatsby's Browser APIs in this file. + * + * See: https://www.gatsbyjs.org/docs/browser-apis/ + */ +import 'swagger-ui-react/swagger-ui.css'; +import './src/styles/index.scss'; +import 'uswds'; +import 'prismjs/themes/prism-coy.css'; +import 'prismjs/plugins/command-line/prism-command-line.css'; + +import { siteMetadata } from './gatsby-config'; + +let loaded = false; + +const digitalAnalytics = (pathname) => { + window.gas && window.gas('send', 'pageview', pathname); +}; + +const googleAnalytics = (pathname) => { + window.ga && window.ga('send', 'pageview', pathname); +}; + +const loadScript = (src, onLoad, attrs = {}) => + new Promise((resolve) => { + const script = document.createElement('script'); + script.src = src; + Object.assign(script, attrs); + script.onload = () => { + onLoad(); + resolve(); + }; + document.body.appendChild(script); + }); + +export const onInitialClientRender = () => { + const { dap, ga } = siteMetadata; + const { pathname } = window.location; + + const scripts = []; + + if (dap && dap.agency) { + let src = `https://dap.digitalgov.gov/Universal-Federated-Analytics-Min.js?agency=${dap.agency}`; + if (dap.subagency) { + src += `&subagency=${dap.subagency}`; + } + const onLoad = () => digitalAnalytics(pathname); + scripts.push(loadScript(src, onLoad, { id: '_fed_an_ua_tag' })); + } + + if (ga && ga.ua) { + const src = `https://www.googletagmanager.com/gtag/js?id=${ga.ua}`; + const onLoad = () => googleAnalytics(pathname); + scripts.push(loadScript(src, onLoad)); + + /** + * `forceSSL` was used for analytics.js (the older Google Analytics script). + * It isn't documented for gtag.js, but the term occurs in the gtag.js code; + * figure it doesn't hurt to leave it in. -@afeld, 5/29/19 + */ + const gtag = document.createElement('script'); + gtag.text = ` + window.dataLayer = window.dataLayer || []; + function gtag() { dataLayer.push(arguments); } + gtag('js', new Date()); + gtag('config', '${ga.ua}', { 'anonymize_ip': true, 'forceSSL': true }); + `; + document.body.appendChild(gtag); + } + + Promise.all(scripts).then(() => { + loaded = true; + }); +}; + +export const onRouteUpdate = ({ location }) => { + if (loaded) { + digitalAnalytics(location.pathname); + googleAnalytics(location.pathname); + } +}; diff --git a/docs/gatsby-config.js b/docs/gatsby-config.js new file mode 100644 index 00000000..a327b5f1 --- /dev/null +++ b/docs/gatsby-config.js @@ -0,0 +1,166 @@ +module.exports = { + siteMetadata: { + author: 'CISA', + title: `Crossfeed`, + description: `Crossfeed is a tool that continuously enumerates and monitors an organization's public-facing attack surface in order to discover assets and flag potential security flaws.`, + navigation: [ + { + items: [{ text: 'Home', link: '/' }], + }, + { + items: [ + { + text: 'User Guide', + link: '/user-guide/quickstart/', + // If rootLink is specified, this navigation item will be + // highlighted as current when the user navigates to sub-pages whose + // paths start with the given rootLink. + rootLink: '/user-guide/', + }, + ], + }, + { + items: [ + { text: 'Development', link: '/dev/quickstart/', rootLink: '/dev/' }, + ], + }, + { + items: [{ text: 'Scanning FAQ', link: '/scans/' }], + }, + { + title: '', + items: [{ text: 'API Reference', link: '/api-reference/' }], + }, + ], + secondaryLinks: [ + { + text: 'Find Crossfeed on GitHub', + link: 'https://github.com/cisagov/crossfeed', + }, + ], + + /** + * Search.gov configuration + * + * 1. Create an account with Search.gov https://search.usa.gov/signup + * 2. Add a new site. + * 3. Add your site/affiliate name here. + */ + searchgov: { + // You should not change this. + endpoint: 'https://search.usa.gov', + + // replace this with your search.gov account + affiliate: 'federalist-uswds-example', + + // replace with your access key + access_key: '...', + + // this renders the results within the page instead of sending to user to search.gov + inline: true, + }, + + /** + * Digital Analytics Program (DAP) configuration + * + * USAID - Agency for International Development + * USDA - Department of Agriculture + * DOC - Department of Commerce + * DOD - Department of Defense + * ED - Department of Education + * DOE - Department of Energy + * HHS - Department of Health and Human Services + * DHS - Department of Homeland Security + * HUD - Department of Housing and Urban Development + * DOJ - Department of Justice + * DOL - Department of Labor + * DOS - Department of State + * DOI - Department of the Interior + * TREAS - Department of the Treasury + * DOT - Department of Transportation + * VA - Department of Veterans Affairs + * EPA - Environmental Protection Agency + * EOP - Executive Office of the President + * GSA - General Services Administration + * NASA - National Aeronautics and Space Administration + * NARA - National Archives and Records Administration + * NSF - National Science Foundation + * NRC - Nuclear Regulatory Commission + * OPM - Office of Personnel Management + * USPS - Postal Service + * SBA - Small Business Administration + * SSA - Social Security Administration + */ + dap: { + // agency: 'your-agency', + // Optional + // subagency: 'your-subagency', + }, + + /** + * Google Analytics configuration + */ + ga: { + // ua: 'your-ua', + }, + }, + pathPrefix: process.env.BASEURL || '/', + plugins: [ + `gatsby-plugin-sass`, + `gatsby-plugin-sharp`, + `gatsby-plugin-react-helmet`, + { + resolve: `gatsby-source-filesystem`, + options: { + name: `images`, + path: `${__dirname}/src/images`, + }, + }, + { + resolve: `gatsby-source-filesystem`, + options: { + name: `documentation-pages`, + path: `${__dirname}/src/documentation-pages`, + }, + }, + { + resolve: `gatsby-transformer-remark`, + options: { + plugins: [ + `gatsby-remark-autolink-headers`, + { + resolve: `gatsby-remark-prismjs`, + options: { + prompt: { + user: 'root', + host: 'localhost', + }, + }, + }, + { + resolve: `gatsby-remark-images`, + options: { + maxWidth: 590, + }, + }, + ], + }, + }, + { + resolve: `gatsby-plugin-manifest`, + options: { + name: `Crossfeed Documentation`, + short_name: `Crossfeed`, + start_url: `/`, + background_color: `#663399`, + theme_color: `#663399`, + display: `minimal-ui`, + icon: `src/images/logo.png`, // This path is relative to the root of the site. + }, + }, + `gatsby-plugin-meta-redirect`, + // this (optional) plugin enables Progressive Web App + Offline functionality + // To learn more, visit: https://gatsby.dev/offline + // `gatsby-plugin-offline`, + ], +}; diff --git a/docs/gatsby-node.js b/docs/gatsby-node.js new file mode 100644 index 00000000..37bf42e5 --- /dev/null +++ b/docs/gatsby-node.js @@ -0,0 +1,110 @@ +/** + * Implement Gatsby's Node APIs in this file. + * + * See: https://www.gatsbyjs.org/docs/node-apis/ + */ + +const path = require('path'); +const { createFilePath } = require('gatsby-source-filesystem'); + +// Adds the source "name" from the filesystem plugin to the markdown remark nodes +// so we can filter by it. +exports.onCreateNode = ({ node, getNode, actions }) => { + const { createNodeField } = actions; + + // We only care about MarkdownRemark content. + if (node.internal.type !== 'MarkdownRemark') { + return; + } + + const fileNode = getNode(node.parent); + + createNodeField({ + node, + name: 'sourceName', + value: fileNode.sourceInstanceName, + }); + + createNodeField({ + node, + name: 'name', + value: fileNode.name, + }); + + const slug = createFilePath({ + node, + getNode, + basePath: `src/documentation-pages`, + }); + createNodeField({ + node, + name: 'slug', + value: slug, + }); +}; + +exports.createPages = async ({ actions, graphql }) => { + const { createPage, createRedirect } = actions; + + createRedirect({ + fromPath: '/usage', + toPath: '/user-guide/quickstart', + isPermanent: false, + }); + + await createMarkdownPages(createPage, graphql); +}; + +async function createMarkdownPages(createPage, graphql) { + const pageTemplate = path.resolve('./src/templates/documentation-page.js'); + const pages = await markdownQuery(graphql, 'documentation-pages'); + + pages.forEach(({ node }) => { + createPage({ + path: node.fields.slug, + component: pageTemplate, + context: { + name: node.fields.slug, + }, + }); + }); +} + +async function markdownQuery(graphql, source) { + const result = await graphql(` + { + allMarkdownRemark(filter: { fields: { sourceName: { eq: "${source}" } } }) { + edges { + node { + fields { + name + slug + } + } + } + } + } + `); + + if (result.errors) { + console.error(result.errors); + } + + return result.data.allMarkdownRemark.edges; +} + +exports.onCreateWebpackConfig = ({ actions }) => { + actions.setWebpackConfig({ + module: { + rules: [ + { + test: /\.html$/, + loader: 'html-loader', + options: { + minimize: false, + }, + }, + ], + }, + }); +}; diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 00000000..671872ba --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,22868 @@ +{ + "name": "crossfeed-docs", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "crossfeed-docs", + "version": "1.0.0", + "hasInstallScript": true, + "dependencies": { + "@reach/router": "^1.3.4", + "clipboardy": "^3.0.0", + "resolve-url-loader": "^5.0.0", + "swagger-jsdoc": "^5.0.1" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.22.5", + "@fortawesome/fontawesome-svg-core": "^1.2.32", + "@fortawesome/free-solid-svg-icons": "^5.15.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "@typescript-eslint/eslint-plugin": "^5.59.0", + "@typescript-eslint/parser": "^5.59.0", + "classnames": "^2.2.6", + "eslint-config-react-app": "^7.0.1", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "gatsby": "^5.9.0", + "gatsby-cli": "^5.9.0", + "gatsby-plugin-manifest": "^5.9.0", + "gatsby-plugin-meta-redirect": "^1.1.1", + "gatsby-plugin-react-helmet": "^6.8.0", + "gatsby-plugin-sass": "^6.8.0", + "gatsby-plugin-sharp": "^5.9.0", + "gatsby-remark-autolink-headers": "^6.8.0", + "gatsby-remark-images": "^7.8.0", + "gatsby-remark-prismjs": "^7.8.0", + "gatsby-source-filesystem": "^5.9", + "gatsby-transformer-remark": "^6.10.0", + "html-loader": "^4.2.0", + "prettier": "^2.1.2", + "prismjs": "^1.27.0", + "prop-types": "^15.7.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-helmet": "^6.1.0", + "rimraf": "^3.0.2", + "sass": "^1.61.0", + "swagger-ui-react": "^4.19.0", + "uswds": "^2.13.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz", + "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + } + }, + "node_modules/@apidevtools/openapi-schemas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", + "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@apidevtools/swagger-methods": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", + "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==" + }, + "node_modules/@apidevtools/swagger-parser": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.0.2.tgz", + "integrity": "sha512-JFxcEyp8RlNHgBCE98nwuTkZT6eNFPc1aosWV6wPcQph72TSEEu1k3baJD4/x1qznU+JiDdz8F5pTwabZh+Dhg==", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "^9.0.6", + "@apidevtools/openapi-schemas": "^2.0.4", + "@apidevtools/swagger-methods": "^3.0.2", + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "z-schema": "^4.2.3" + }, + "peerDependencies": { + "openapi-types": ">=7" + } + }, + "node_modules/@ardatan/relay-compiler": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.0.0.tgz", + "integrity": "sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.14.0", + "@babel/generator": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.0.0", + "babel-preset-fbjs": "^3.4.0", + "chalk": "^4.0.0", + "fb-watchman": "^2.0.0", + "fbjs": "^3.0.0", + "glob": "^7.1.1", + "immutable": "~3.7.6", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "relay-runtime": "12.0.0", + "signedsource": "^1.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "relay-compiler": "bin/relay-compiler" + }, + "peerDependencies": { + "graphql": "*" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@ardatan/relay-compiler/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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@ardatan/relay-compiler/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/@ardatan/relay-compiler/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", + "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.11", + "@babel/parser": "^7.22.11", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.11.tgz", + "integrity": "sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w==", + "dev": true, + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", + "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", + "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", + "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", + "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.10.tgz", + "integrity": "sha512-KxN6TqZzcFi4uD3UifqXElBTBNLAEH1l3vzMQj6JwJZbL2sZlThxSViOKCYY+4Ah4V4JhQ95IVB7s/Y6SJSlMQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.10", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/plugin-syntax-decorators": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz", + "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", + "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz", + "integrity": "sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", + "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", + "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", + "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz", + "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz", + "integrity": "sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz", + "integrity": "sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", + "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", + "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", + "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz", + "integrity": "sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.11.tgz", + "integrity": "sha512-0E4/L+7gfvHub7wsbTv03oRtD69X31LByy44fGmFzbZScpupFByMcgCJ0VbBTkzyjSJKuRoGN8tcijOWKTmqOA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", + "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.10", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.10", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.10", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.10", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.10", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", + "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.11.tgz", + "integrity": "sha512-tWY5wyCZYBGY7IlalfKI1rLiGlIfnwsRHZqlky0HVv8qviwQ1Uo/05M6+s+TcTCVa6Bmoo2uJW5TMFX6Wa4qVg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.11", + "@babel/plugin-transform-typescript": "^7.22.11" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz", + "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.11.tgz", + "integrity": "sha512-NhfzUbdWbiE6fCFypbWCPu6AR8xre31EOPF7wwAIJEvGQ2avov04eymayWinCuyXmV1b0+jzoXP/HYzzUYdvwg==", + "dev": true, + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@braintree/sanitize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==", + "dev": true + }, + "node_modules/@builder.io/partytown": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@builder.io/partytown/-/partytown-0.7.6.tgz", + "integrity": "sha512-snXIGNiZpqjno3XYQN2lbBB+05hsQR/LSttbtIW1c0gmZ7Kh/DIo0YrxlDxCDulAMFPFM8J+4voLwvYepSj3sw==", + "dev": true, + "bin": { + "partytown": "bin/partytown.cjs" + } + }, + "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/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", + "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", + "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "0.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", + "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "1.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.36.tgz", + "integrity": "sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.2.36" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz", + "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.2.36" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", + "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", + "dev": true, + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.3" + } + }, + "node_modules/@gatsbyjs/parcel-namer-relative-to-cwd": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@gatsbyjs/parcel-namer-relative-to-cwd/-/parcel-namer-relative-to-cwd-2.12.0.tgz", + "integrity": "sha512-ENTps2Fg3EMy5WyTrX3TY62McmZcyhJbU/rD90UTyqZnB9XbuEFNW72Ya6qH0jXMPV7tcxNeD2P7HijuJ1O5lQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "@parcel/namer-default": "2.8.3", + "@parcel/plugin": "2.8.3", + "gatsby-core-utils": "^4.12.0" + }, + "engines": { + "node": ">=18.0.0", + "parcel": "2.x" + } + }, + "node_modules/@gatsbyjs/reach-router": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@gatsbyjs/reach-router/-/reach-router-2.0.1.tgz", + "integrity": "sha512-gmSZniS9/phwgEgpFARMpNg21PkYDZEpfgEzvkgpE/iku4uvXqCrxr86fXbTpI9mkrhKS1SCTYmLGe60VdHcdQ==", + "dev": true, + "dependencies": { + "invariant": "^2.2.4", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": "18.x", + "react-dom": "18.x" + } + }, + "node_modules/@gatsbyjs/webpack-hot-middleware": { + "version": "2.25.3", + "resolved": "https://registry.npmjs.org/@gatsbyjs/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz", + "integrity": "sha512-ul17OZ8Dlw+ATRbnuU+kwxuAlq9lKbYz/2uBS1FLCdgoPTF1H2heP7HbUbgfMZbfRQNcCG2rMscMnr32ritCDw==", + "dev": true, + "dependencies": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.3.3", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/@graphql-codegen/add": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@graphql-codegen/add/-/add-3.2.3.tgz", + "integrity": "sha512-sQOnWpMko4JLeykwyjFTxnhqjd/3NOG2OyMuvK76Wnnwh8DRrNf2VEs2kmSvLl7MndMlOj7Kh5U154dVcvhmKQ==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^3.1.1", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/add/node_modules/@graphql-codegen/plugin-helpers": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-3.1.2.tgz", + "integrity": "sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.0.0", + "change-case-all": "1.0.15", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/add/node_modules/change-case-all": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", + "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", + "dev": true, + "dependencies": { + "change-case": "^4.1.2", + "is-lower-case": "^2.0.2", + "is-upper-case": "^2.0.2", + "lower-case": "^2.0.2", + "lower-case-first": "^2.0.2", + "sponge-case": "^1.0.1", + "swap-case": "^2.0.2", + "title-case": "^3.0.3", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/@graphql-codegen/core": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-2.6.8.tgz", + "integrity": "sha512-JKllNIipPrheRgl+/Hm/xuWMw9++xNQ12XJR/OHHgFopOg4zmN3TdlRSyYcv/K90hCFkkIwhlHFUQTfKrm8rxQ==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^3.1.1", + "@graphql-tools/schema": "^9.0.0", + "@graphql-tools/utils": "^9.1.1", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/core/node_modules/@graphql-codegen/plugin-helpers": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-3.1.2.tgz", + "integrity": "sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.0.0", + "change-case-all": "1.0.15", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/core/node_modules/change-case-all": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", + "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", + "dev": true, + "dependencies": { + "change-case": "^4.1.2", + "is-lower-case": "^2.0.2", + "is-upper-case": "^2.0.2", + "lower-case": "^2.0.2", + "lower-case-first": "^2.0.2", + "sponge-case": "^1.0.1", + "swap-case": "^2.0.2", + "title-case": "^3.0.3", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/@graphql-codegen/plugin-helpers": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-2.7.2.tgz", + "integrity": "sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^8.8.0", + "change-case-all": "1.0.14", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/plugin-helpers/node_modules/@graphql-tools/utils": { + "version": "8.13.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.13.1.tgz", + "integrity": "sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-codegen/schema-ast": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-2.6.1.tgz", + "integrity": "sha512-5TNW3b1IHJjCh07D2yQNGDQzUpUl2AD+GVe1Dzjqyx/d2Fn0TPMxLsHsKPS4Plg4saO8FK/QO70wLsP7fdbQ1w==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^3.1.2", + "@graphql-tools/utils": "^9.0.0", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/schema-ast/node_modules/@graphql-codegen/plugin-helpers": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-3.1.2.tgz", + "integrity": "sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.0.0", + "change-case-all": "1.0.15", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/schema-ast/node_modules/change-case-all": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", + "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", + "dev": true, + "dependencies": { + "change-case": "^4.1.2", + "is-lower-case": "^2.0.2", + "is-upper-case": "^2.0.2", + "lower-case": "^2.0.2", + "lower-case-first": "^2.0.2", + "sponge-case": "^1.0.1", + "swap-case": "^2.0.2", + "title-case": "^3.0.3", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/@graphql-codegen/typescript": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-2.8.8.tgz", + "integrity": "sha512-A0oUi3Oy6+DormOlrTC4orxT9OBZkIglhbJBcDmk34jAKKUgesukXRd4yOhmTrnbchpXz2T8IAOFB3FWIaK4Rw==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^3.1.2", + "@graphql-codegen/schema-ast": "^2.6.1", + "@graphql-codegen/visitor-plugin-common": "2.13.8", + "auto-bind": "~4.0.0", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/typescript-operations": { + "version": "2.5.13", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-2.5.13.tgz", + "integrity": "sha512-3vfR6Rx6iZU0JRt29GBkFlrSNTM6t+MSLF86ChvL4d/Jfo/JYAGuB3zNzPhirHYzJPCvLOAx2gy9ID1ltrpYiw==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^3.1.2", + "@graphql-codegen/typescript": "^2.8.8", + "@graphql-codegen/visitor-plugin-common": "2.13.8", + "auto-bind": "~4.0.0", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/typescript-operations/node_modules/@graphql-codegen/plugin-helpers": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-3.1.2.tgz", + "integrity": "sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.0.0", + "change-case-all": "1.0.15", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/typescript-operations/node_modules/change-case-all": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", + "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", + "dev": true, + "dependencies": { + "change-case": "^4.1.2", + "is-lower-case": "^2.0.2", + "is-upper-case": "^2.0.2", + "lower-case": "^2.0.2", + "lower-case-first": "^2.0.2", + "sponge-case": "^1.0.1", + "swap-case": "^2.0.2", + "title-case": "^3.0.3", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/@graphql-codegen/plugin-helpers": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-3.1.2.tgz", + "integrity": "sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.0.0", + "change-case-all": "1.0.15", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/change-case-all": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", + "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", + "dev": true, + "dependencies": { + "change-case": "^4.1.2", + "is-lower-case": "^2.0.2", + "is-upper-case": "^2.0.2", + "lower-case": "^2.0.2", + "lower-case-first": "^2.0.2", + "sponge-case": "^1.0.1", + "swap-case": "^2.0.2", + "title-case": "^3.0.3", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "2.13.8", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-2.13.8.tgz", + "integrity": "sha512-IQWu99YV4wt8hGxIbBQPtqRuaWZhkQRG2IZKbMoSvh0vGeWb3dB0n0hSgKaOOxDY+tljtOf9MTcUYvJslQucMQ==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^3.1.2", + "@graphql-tools/optimize": "^1.3.0", + "@graphql-tools/relay-operation-optimizer": "^6.5.0", + "@graphql-tools/utils": "^9.0.0", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.15", + "dependency-graph": "^0.11.0", + "graphql-tag": "^2.11.0", + "parse-filepath": "^1.0.2", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/@graphql-codegen/plugin-helpers": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-3.1.2.tgz", + "integrity": "sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.0.0", + "change-case-all": "1.0.15", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/change-case-all": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", + "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", + "dev": true, + "dependencies": { + "change-case": "^4.1.2", + "is-lower-case": "^2.0.2", + "is-upper-case": "^2.0.2", + "lower-case": "^2.0.2", + "lower-case-first": "^2.0.2", + "sponge-case": "^1.0.1", + "swap-case": "^2.0.2", + "title-case": "^3.0.3", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/@graphql-tools/code-file-loader": { + "version": "7.3.23", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.23.tgz", + "integrity": "sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==", + "dev": true, + "dependencies": { + "@graphql-tools/graphql-tag-pluck": "7.5.2", + "@graphql-tools/utils": "^9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/graphql-tag-pluck": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.5.2.tgz", + "integrity": "sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.16.8", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/load": { + "version": "7.8.14", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.8.14.tgz", + "integrity": "sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg==", + "dev": true, + "dependencies": { + "@graphql-tools/schema": "^9.0.18", + "@graphql-tools/utils": "^9.2.1", + "p-limit": "3.1.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/merge": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", + "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/optimize": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.4.0.tgz", + "integrity": "sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/relay-operation-optimizer": { + "version": "6.5.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.5.18.tgz", + "integrity": "sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==", + "dev": true, + "dependencies": { + "@ardatan/relay-compiler": "12.0.0", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/schema": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", + "dev": true, + "dependencies": { + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "dev": true, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "peer": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "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, + "peer": 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/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/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/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" + }, + "node_modules/@lezer/common": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", + "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", + "dev": true + }, + "node_modules/@lezer/lr": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", + "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", + "dev": true, + "dependencies": { + "@lezer/common": "^0.15.0" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.3.tgz", + "integrity": "sha512-RXwGZ/0eCqtCY8FLTM/koR60w+MXyvBUpToXiIyjOcBnC81tAlTUHrRUavCEWPI9zc9VgvpK3+cbumPyR8BSuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.3.tgz", + "integrity": "sha512-337dNzh5yCdNCTk8kPfoU7jR3otibSlPDGW0vKZT97rKnQMb9tNdto3RtWoGPsQ8hKmlRZpojOJtmwjncq1MoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.3.tgz", + "integrity": "sha512-mU2HFJDGwECkoD9dHQEfeTG5mp8hNS2BCfwoiOpVPMeapjYpQz9Uw3FkUjRZ4dGHWKbin40oWHuL0bk2bCx+Sg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.3.tgz", + "integrity": "sha512-VJw60Mdgb4n+L0fO1PqfB0C7TyEQolJAC8qpqvG3JoQwvyOv6LH7Ib/WE3wxEW9nuHmVz9jkK7lk5HfWWgoO1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.3.tgz", + "integrity": "sha512-qaReO5aV8griBDsBr8uBF/faO3ieGjY1RY4p8JvTL6Mu1ylLrTVvOONqKFlNaCwrmUjWw5jnf7VafxDAeQHTow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.3.tgz", + "integrity": "sha512-cK+Elf3RjEzrm3SerAhrFWL5oQAsZSJ/LmjL1joIpTfEP1etJJ9CTRvdaV6XLYAxaEkfdhk/9hOvHLbR9yIhCA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@mischnic/json-sourcemap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", + "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", + "dev": true, + "dependencies": { + "@lezer/common": "^0.15.7", + "@lezer/lr": "^0.15.4", + "json5": "^2.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz", + "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz", + "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz", + "integrity": "sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz", + "integrity": "sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz", + "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz", + "integrity": "sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "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/@parcel/bundler-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz", + "integrity": "sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/graph": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/cache": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.8.3.tgz", + "integrity": "sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==", + "dev": true, + "dependencies": { + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/utils": "2.8.3", + "lmdb": "2.5.2" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/cache/node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz", + "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@parcel/cache/node_modules/@lmdb/lmdb-darwin-x64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz", + "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@parcel/cache/node_modules/@lmdb/lmdb-linux-arm": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz", + "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@parcel/cache/node_modules/@lmdb/lmdb-linux-arm64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz", + "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@parcel/cache/node_modules/@lmdb/lmdb-linux-x64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz", + "integrity": "sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@parcel/cache/node_modules/@lmdb/lmdb-win32-x64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz", + "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@parcel/cache/node_modules/lmdb": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz", + "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "msgpackr": "^1.5.4", + "node-addon-api": "^4.3.0", + "node-gyp-build-optional-packages": "5.0.3", + "ordered-binary": "^1.2.4", + "weak-lru-cache": "^1.2.2" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "2.5.2", + "@lmdb/lmdb-darwin-x64": "2.5.2", + "@lmdb/lmdb-linux-arm": "2.5.2", + "@lmdb/lmdb-linux-arm64": "2.5.2", + "@lmdb/lmdb-linux-x64": "2.5.2", + "@lmdb/lmdb-win32-x64": "2.5.2" + } + }, + "node_modules/@parcel/cache/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true + }, + "node_modules/@parcel/codeframe": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.8.3.tgz", + "integrity": "sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/codeframe/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@parcel/codeframe/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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@parcel/codeframe/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@parcel/codeframe/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@parcel/codeframe/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/@parcel/codeframe/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@parcel/compressor-raw": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz", + "integrity": "sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/core": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.8.3.tgz", + "integrity": "sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==", + "dev": true, + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/cache": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/graph": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "abortcontroller-polyfill": "^1.1.9", + "base-x": "^3.0.8", + "browserslist": "^4.6.6", + "clone": "^2.1.1", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", + "json5": "^2.2.0", + "msgpackr": "^1.5.4", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/core/node_modules/dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@parcel/core/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@parcel/diagnostic": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.8.3.tgz", + "integrity": "sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==", + "dev": true, + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/events": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.8.3.tgz", + "integrity": "sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/fs": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.8.3.tgz", + "integrity": "sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==", + "dev": true, + "dependencies": { + "@parcel/fs-search": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/watcher": "^2.0.7", + "@parcel/workers": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/fs-search": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.8.3.tgz", + "integrity": "sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/graph": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.8.3.tgz", + "integrity": "sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==", + "dev": true, + "dependencies": { + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/hash": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.8.3.tgz", + "integrity": "sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3", + "xxhash-wasm": "^0.4.2" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/logger": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.8.3.tgz", + "integrity": "sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/markdown-ansi": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz", + "integrity": "sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/markdown-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@parcel/markdown-ansi/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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@parcel/markdown-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@parcel/markdown-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@parcel/markdown-ansi/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/@parcel/markdown-ansi/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@parcel/namer-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.8.3.tgz", + "integrity": "sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/node-resolver-core": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz", + "integrity": "sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/node-resolver-core/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@parcel/optimizer-terser": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz", + "integrity": "sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "terser": "^5.2.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/package-manager": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.8.3.tgz", + "integrity": "sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/package-manager/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@parcel/packager-js": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.8.3.tgz", + "integrity": "sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "globals": "^13.2.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-js/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@parcel/packager-raw": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.8.3.tgz", + "integrity": "sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/plugin": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.8.3.tgz", + "integrity": "sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==", + "dev": true, + "dependencies": { + "@parcel/types": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-dev-server": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz", + "integrity": "sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/resolver-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.8.3.tgz", + "integrity": "sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==", + "dev": true, + "dependencies": { + "@parcel/node-resolver-core": "2.8.3", + "@parcel/plugin": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-js": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.8.3.tgz", + "integrity": "sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/source-map": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz", + "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": "^12.18.3 || >=14" + } + }, + "node_modules/@parcel/transformer-js": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.8.3.tgz", + "integrity": "sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "@swc/helpers": "^0.4.12", + "browserslist": "^4.6.6", + "detect-libc": "^1.0.3", + "nullthrows": "^1.1.1", + "regenerator-runtime": "^0.13.7", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/transformer-js/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/@parcel/transformer-js/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@parcel/transformer-json": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.8.3.tgz", + "integrity": "sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "json5": "^2.2.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/types": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.8.3.tgz", + "integrity": "sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==", + "dev": true, + "dependencies": { + "@parcel/cache": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/workers": "2.8.3", + "utility-types": "^3.10.0" + } + }, + "node_modules/@parcel/utils": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.8.3.tgz", + "integrity": "sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==", + "dev": true, + "dependencies": { + "@parcel/codeframe": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/markdown-ansi": "2.8.3", + "@parcel/source-map": "^2.1.1", + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@parcel/utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@parcel/utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@parcel/utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@parcel/utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@parcel/utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.3.0.tgz", + "integrity": "sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.3.0", + "@parcel/watcher-darwin-arm64": "2.3.0", + "@parcel/watcher-darwin-x64": "2.3.0", + "@parcel/watcher-freebsd-x64": "2.3.0", + "@parcel/watcher-linux-arm-glibc": "2.3.0", + "@parcel/watcher-linux-arm64-glibc": "2.3.0", + "@parcel/watcher-linux-arm64-musl": "2.3.0", + "@parcel/watcher-linux-x64-glibc": "2.3.0", + "@parcel/watcher-linux-x64-musl": "2.3.0", + "@parcel/watcher-win32-arm64": "2.3.0", + "@parcel/watcher-win32-ia32": "2.3.0", + "@parcel/watcher-win32-x64": "2.3.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.3.0.tgz", + "integrity": "sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.3.0.tgz", + "integrity": "sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.3.0.tgz", + "integrity": "sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.3.0.tgz", + "integrity": "sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.3.0.tgz", + "integrity": "sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.3.0.tgz", + "integrity": "sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.3.0.tgz", + "integrity": "sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.3.0.tgz", + "integrity": "sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.3.0.tgz", + "integrity": "sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.3.0.tgz", + "integrity": "sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.3.0.tgz", + "integrity": "sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.3.0.tgz", + "integrity": "sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/workers": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.8.3.tgz", + "integrity": "sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "chrome-trace-event": "^1.0.2", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", + "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", + "dev": true, + "dependencies": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <5.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/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==", + "dev": true + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "dev": true, + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@reach/router": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.3.4.tgz", + "integrity": "sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==", + "dependencies": { + "create-react-context": "0.3.0", + "invariant": "^2.2.3", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": "15.x || 16.x || 16.4.0-alpha.0911da3", + "react-dom": "15.x || 16.x || 16.4.0-alpha.0911da3" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz", + "integrity": "sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==", + "dev": true + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sindresorhus/slugify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-1.1.2.tgz", + "integrity": "sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==", + "dev": true, + "dependencies": { + "@sindresorhus/transliterate": "^0.1.1", + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/slugify/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz", + "integrity": "sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0", + "lodash.deburr": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, + "node_modules/@swagger-api/apidom-ast": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-0.75.0.tgz", + "integrity": "sha512-IOAVA835ZuNFR23Tpca/q1FUyv4cQ8c4nnN3NsmXU+rLP+qrhsyyqkUa0pRAMvE77EfZfOcfJpUo0WTYozPTag==", + "dev": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.1.1", + "stampit": "^4.3.2", + "unraw": "^3.0.0" + } + }, + "node_modules/@swagger-api/apidom-core": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-0.75.0.tgz", + "integrity": "sha512-DuWQm0YYhBhEDX/u8EbLtKhWpgrk7+DjYD6WYh8emt6eZGpRuVWDABPN6LXZy4BpQ60Fy0aBSZaSf5C+404LCw==", + "dev": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-ast": "^0.75.0", + "@types/ramda": "~0.29.3", + "minim": "~0.23.8", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.1.1", + "short-unique-id": "^4.4.4", + "stampit": "^4.3.2" + } + }, + "node_modules/@swagger-api/apidom-json-pointer": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-0.75.0.tgz", + "integrity": "sha512-BdwXIHA3Ulmdik3bOzvX2n320fDcdOX+GO0eUG2Ewi7OHI5gQEQZdkeGONF6PFpG5M5afKYnduYOxkz4MPQEjA==", + "dev": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.0.0" + } + }, + "node_modules/@swagger-api/apidom-ns-api-design-systems": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-0.75.0.tgz", + "integrity": "sha512-3+2w4WJ5iHeTeI5Go3T1kbpHUVeTd/GGrbjP5YpD8FGeW5aNodRnMZi5DnmPZ1jqJJT6JLLxQWTubFnd3v1ksQ==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-openapi-3-1": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.1.1", + "stampit": "^4.3.2" + } + }, + "node_modules/@swagger-api/apidom-ns-asyncapi-2": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-0.75.0.tgz", + "integrity": "sha512-W+EifcReXeNTaDlp75+sX5Ev3upkT1aZ3D1HLSKhGyi3weuOcPFYc7PTDVmoDJTSCch4NFXIFrAEvRNNxzhHvA==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-json-schema-draft-7": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.1.1", + "stampit": "^4.3.2" + } + }, + "node_modules/@swagger-api/apidom-ns-json-schema-draft-4": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-0.75.0.tgz", + "integrity": "sha512-DjkbOjeqz5AYr6PWFWSPb4hKiVFUpB0iRdZEtPOU4YKd9lSImDe4rnob2uDDJR5uQV6FoG2BAVRTckEvPQa0+g==", + "dev": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-ast": "^0.75.0", + "@swagger-api/apidom-core": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.1.1", + "stampit": "^4.3.2" + } + }, + "node_modules/@swagger-api/apidom-ns-json-schema-draft-6": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-0.75.0.tgz", + "integrity": "sha512-sDQLgRpjRUons2B8s3fvRZXCS4Zg5gC3zhkuQmh4a1Uu+Fu+QG2wQ/WY5Q7MBj6G8QL2wnxihCYOdTd9IpA/Xg==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-json-schema-draft-4": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.1.1", + "stampit": "^4.3.2" + } + }, + "node_modules/@swagger-api/apidom-ns-json-schema-draft-7": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-0.75.0.tgz", + "integrity": "sha512-P0g0J16QmAO4Tjd8E1Gi7ESlEcyouq3CaYVZ0Rz1KSNNi9nkUOKTd4/i1LSTgKQHs86U4WlJFSk6iQxfkzhgcQ==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-json-schema-draft-6": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.1.1", + "stampit": "^4.3.2" + } + }, + "node_modules/@swagger-api/apidom-ns-openapi-3-0": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-0.75.0.tgz", + "integrity": "sha512-ndJC9QeIIMeK2WpeJeEGUuwcmDXXuEtOKl9GCX4sbXicZbI00cv7FJCJeFPL7QdVsHFfAm+e9DbDgn1k2K7Eww==", + "dev": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-json-schema-draft-4": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.1.1", + "stampit": "^4.3.2" + } + }, + "node_modules/@swagger-api/apidom-ns-openapi-3-1": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-0.75.0.tgz", + "integrity": "sha512-j2lvGKceplAVDnhm84klUPzBAwJewdpZf7fD28szEeMMNfXi40y70rs6iFKTH6FVuBc/k5/nf/M44tQY+sdqGw==", + "dev": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-ast": "^0.75.0", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-openapi-3-0": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.1.1", + "stampit": "^4.3.2" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-0.75.0.tgz", + "integrity": "sha512-DE16Dg2Fjgv7mmZYhGkcvmcQVHk6+7ly1GRbTVBgLY10CGibd41FF3ttS1jiiT+yJxQbnuhvV0gJGV5X17GPNg==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-api-design-systems": "^0.75.0", + "@swagger-api/apidom-parser-adapter-json": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-0.75.0.tgz", + "integrity": "sha512-i3RMF3GKR62tW+cEYkRhbcnlm0SpGh59iQb+90my8udk3eeNwblvoqk5DlBWlZwT4FFQyAMXczYzX69DahKZKw==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-api-design-systems": "^0.75.0", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-0.75.0.tgz", + "integrity": "sha512-1Pa+cBFTMJFSVKdtsk7Q8h+/rR1/7Tfa/jkS6bIHRxuebQS6eY3JXgU22FhhOiuqNpLIkQOO1qHTknIJG77K2Q==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-asyncapi-2": "^0.75.0", + "@swagger-api/apidom-parser-adapter-json": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-0.75.0.tgz", + "integrity": "sha512-iqdmbdHgZ0I1KfrqZ+/qLqsDa/CuHzF/EvhAGHAwpVFP3w1bFS1gkUfnj5iSev4IUySyFpjf1dpZjHlXunrczg==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-asyncapi-2": "^0.75.0", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-json": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-0.75.0.tgz", + "integrity": "sha512-uYw1E7xUvf7fEaY9UdctTWmelztPv1qVl7VnZfct1LawOgtW8/hldhUaVrBmirBI10C6piy+3tDRA/mxRo6Y1Q==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-ast": "^0.75.0", + "@swagger-api/apidom-core": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.1.1", + "stampit": "^4.3.2", + "tree-sitter": "=0.20.4", + "tree-sitter-json": "=0.20.0", + "web-tree-sitter": "=0.20.3" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-0.75.0.tgz", + "integrity": "sha512-3Rc8tucPhqGakh4Txgmu+uoASnIDvjSwOo6Vh36LQo6SRf5S86NLmLOMd+nXfiP3WnWwoQtcfvi0IHML/dQhKg==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-openapi-3-0": "^0.75.0", + "@swagger-api/apidom-parser-adapter-json": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-0.75.0.tgz", + "integrity": "sha512-UBqvU6RwGVFPLO52+N/iW+g3pgfoIOxX6wtCtaeu71IvC8klQnvRPl7DRydNM46DuDeJRYfAR7rDUO/kWxu/LQ==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-openapi-3-1": "^0.75.0", + "@swagger-api/apidom-parser-adapter-json": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-0.75.0.tgz", + "integrity": "sha512-nQAuODuSgQw3JcY4lEll2RCp7Tj5RtksLwXGBpd6ZMmy4fqsYvgmhgpqlc/T4V3OXdsB98YVdEnGrwAq5GYdag==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-openapi-3-0": "^0.75.0", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-0.75.0.tgz", + "integrity": "sha512-7kICmmDib+Lg/HLe7pwUeXD1CzNyLhIocvxg4wz1nBxwLAcBnLybN1sAsPTISHG/1SVh/XOPaYMyOyfN1TmkAw==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@swagger-api/apidom-ns-openapi-3-1": "^0.75.0", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-0.75.0.tgz", + "integrity": "sha512-8d443eF60U/8lYhuzbRyloGISqCy2ypugGAKaDGPDwgldy232mQG6Izhrwqj65qj+945n3j/rD0FcwKdUZmK6w==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-ast": "^0.75.0", + "@swagger-api/apidom-core": "^0.75.0", + "@types/ramda": "~0.29.3", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.1.1", + "stampit": "^4.3.2", + "tree-sitter": "=0.20.4", + "tree-sitter-yaml": "=0.5.0", + "web-tree-sitter": "=0.20.3" + } + }, + "node_modules/@swagger-api/apidom-reference": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-0.75.0.tgz", + "integrity": "sha512-3eqMfGaNBa3+Ao/9zrRPfxCuz9/3jag3W2XV8xuS4Xq2g3xqCEzPPUeraf6zoerk5EdXMSSoO6O8v074E4R4dg==", + "dev": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.75.0", + "@types/ramda": "~0.29.3", + "axios": "^1.4.0", + "minimatch": "^7.4.3", + "process": "^0.11.10", + "ramda": "~0.29.0", + "ramda-adjunct": "^4.1.1", + "stampit": "^4.3.2" + }, + "optionalDependencies": { + "@swagger-api/apidom-json-pointer": "^0.75.0", + "@swagger-api/apidom-ns-asyncapi-2": "^0.75.0", + "@swagger-api/apidom-ns-openapi-3-0": "^0.75.0", + "@swagger-api/apidom-ns-openapi-3-1": "^0.75.0", + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^0.75.0", + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^0.75.0", + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^0.75.0", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^0.75.0", + "@swagger-api/apidom-parser-adapter-json": "^0.75.0", + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^0.75.0", + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^0.75.0", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^0.75.0", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^0.75.0", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.75.0" + } + }, + "node_modules/@swagger-api/apidom-reference/node_modules/axios": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/@swagger-api/apidom-reference/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==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@swagger-api/apidom-reference/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@swagger-api/apidom-reference/node_modules/minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@swc/helpers": { + "version": "0.4.36", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.36.tgz", + "integrity": "sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==", + "dev": true, + "dependencies": { + "legacy-swc-helpers": "npm:@swc/helpers@=0.4.14", + "tslib": "^2.4.0" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@turist/fetch": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@turist/fetch/-/fetch-7.2.0.tgz", + "integrity": "sha512-2x7EGw+6OJ29phunsbGvtxlNmSfcuPcyYudkMbi8gARCP9eJ1CtuMvnVUHL//O9Ixi9SJiug8wNt6lj86pN8XQ==", + "dev": true, + "dependencies": { + "@types/node-fetch": "2" + }, + "peerDependencies": { + "node-fetch": "2" + } + }, + "node_modules/@turist/time": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@turist/time/-/time-0.0.2.tgz", + "integrity": "sha512-qLOvfmlG2vCVw5fo/oz8WAZYlpe5a5OurgTj3diIxJCdjRHpapC+vQCz3er9LV79Vcat+DifBjeAhOAdmndtDQ==", + "dev": true + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/common-tags": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/common-tags/-/common-tags-1.8.1.tgz", + "integrity": "sha512-20R/mDpKSPWdJs5TOpz3e7zqbeCNuMCPhV7Yndk9KU2Rbij2r5W4RzwDPkzC+2lzUqXYu9rFzTktCBnDjHuNQg==", + "dev": true + }, + "node_modules/@types/configstore": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/configstore/-/configstore-2.1.1.tgz", + "integrity": "sha512-YY+hm3afkDHeSM2rsFXxeZtu0garnusBWNG1+7MknmDWQHqcH2w21/xOU9arJUi8ch4qyFklidANLCu3ihhVwQ==", + "dev": true + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-0.0.30.tgz", + "integrity": "sha512-orGL5LXERPYsLov6CWs3Fh6203+dXzJkR7OnddIr2514Hsecwc8xRpzCapshBbKFImCsvS/mk6+FWiN5LyZJAQ==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-TiNg8R1kjDde5Pub9F9vCwZA/BNW9HeXP5b9j7Qucqncy/McfPZ6xze/EyBdXS5FhMIGN6Fx3vg75l5KHy3V1Q==", + "dev": true + }, + "node_modules/@types/glob": { + "version": "5.0.38", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.38.tgz", + "integrity": "sha512-rTtf75rwyP9G2qO5yRpYtdJ6aU1QqEhWbtW55qEgquEDa6bXW0s2TWZfDm02GuppjEozOWG/F2UnPq5hAQb+gw==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.5.tgz", + "integrity": "sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==", + "dev": true, + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dev": true, + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.197", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", + "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", + "dev": true + }, + "node_modules/@types/mdast": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "dev": true, + "dependencies": { + "@types/unist": "^2" + } + }, + "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==", + "dev": true + }, + "node_modules/@types/mkdirp": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", + "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.5.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz", + "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==", + "dev": true + }, + "node_modules/@types/node-fetch": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", + "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/ramda": { + "version": "0.29.3", + "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.29.3.tgz", + "integrity": "sha512-Yh/RHkjN0ru6LVhSQtTkCRo6HXkfL9trot/2elzM/yXLJmbLm2v6kJc8yftTnwv1zvUob6TEtqI2cYjdqG3U0Q==", + "dev": true, + "dependencies": { + "types-ramda": "^0.29.4" + } + }, + "node_modules/@types/reach__router": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.11.tgz", + "integrity": "sha512-j23ChnIEiW8aAP4KT8OVyTXOFr+Ri65BDnwzmfHFO9WHypXYevHFjeil1Cj7YH3emfCE924BwAmgW4hOv7Wg3g==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react": { + "version": "18.2.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz", + "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/rimraf": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.5.tgz", + "integrity": "sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g==", + "dev": true, + "dependencies": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==", + "dev": true + }, + "node_modules/@types/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-gVC1InwyVrO326wbBZw+AO3u2vRXz/iRWq9jYhpG4W8LXyIgDv3ZmcLQ5Q4Gs+gFMyqx+viFoFT+l3p61QFCmQ==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==", + "dev": true + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@types/yoga-layout": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz", + "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vercel/webpack-asset-relocator-loader": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.7.3.tgz", + "integrity": "sha512-vizrI18v8Lcb1PmNNUBz7yxPxxXoOeuaVEjTG9MjvDrphjiSxFZrRJ5tIghk+qdLFRCXI5HBCshgobftbmrC5g==", + "dev": true, + "dependencies": { + "resolve": "^1.10.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/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, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-loose": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-loose/-/acorn-loose-8.3.0.tgz", + "integrity": "sha512-75lAs9H19ldmW+fAbyqHdjgdCrz0pWGXKmnqFoh8PyVd1L2RIb4RzYrSjmopeqv3E1G3/Pimu6GgLlrGbrkF7w==", + "dev": true, + "dependencies": { + "acorn": "^8.5.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/anser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/anser/-/anser-2.1.1.tgz", + "integrity": "sha512-nqLm4HxOTpeLOxcmB3QWmV5TcDFhW9y/fyQ+hivtDFcK4OQ+pQ5fzPnXHM1Mfcm0VkLtvVi1TCPr++Qy0Q/3EQ==", + "dev": true + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "dev": true + }, + "node_modules/application-config-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", + "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==", + "dev": true + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "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/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-iterate": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.4.tgz", + "integrity": "sha512-sNRaPGh9nnmdC8Zf+pT3UqP8rnWj5Hf9wiFGsX3wUQ2yVSIhO2ShFwCoceIPpB41QF6i2OEmrHmCo36xronCVA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", + "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/auto-bind": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", + "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/autolinker": { + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.16.2.tgz", + "integrity": "sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==", + "dev": true, + "dependencies": { + "tslib": "^2.3.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true + }, + "node_modules/babel-eslint": { + "name": "@babel/eslint-parser", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.11.tgz", + "integrity": "sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w==", + "dev": true, + "peer": true, + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/babel-jsx-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-jsx-utils/-/babel-jsx-utils-1.1.0.tgz", + "integrity": "sha512-Mh1j/rw4xM9T3YICkw22aBQ78FhsHdsmlb9NEk4uVAFBOg+Ez9ZgXXHugoBPCZui3XLomk/7/JBBH4daJqTkQQ==", + "dev": true + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-add-module-exports": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.4.tgz", + "integrity": "sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==", + "dev": true + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-lodash": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz", + "integrity": "sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0-beta.49", + "@babel/types": "^7.0.0-beta.49", + "glob": "^7.1.1", + "lodash": "^4.17.10", + "require-package-name": "^2.0.1" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-remove-graphql-queries": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-5.12.0.tgz", + "integrity": "sha512-9lLU6pYKtS0tSfqzehAHp1ODgTzOtoZPIkVfmjCTxATtEmgCO+Z8tptdW+pcp2cKEs9BIJ6SuOkE47SEXxVeiw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "@babel/types": "^7.20.7", + "gatsby-core-utils": "^4.12.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "gatsby": "^5.0.0-next" + } + }, + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", + "dev": true + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", + "dev": true + }, + "node_modules/babel-preset-fbjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", + "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", + "dev": true, + "dependencies": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-gatsby": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-3.12.0.tgz", + "integrity": "sha512-355xQi5cZIFYCdCbeJ9mHipEZrk0Jmk5zq21Kd4FlYAAYn0L8lC/YiSG44muRyPDdSVJiLOr6pMGOWQRe5PPyg==", + "dev": true, + "dependencies": { + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.20.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-classes": "^7.20.7", + "@babel/plugin-transform-runtime": "^7.19.6", + "@babel/plugin-transform-spread": "^7.20.7", + "@babel/preset-env": "^7.20.2", + "@babel/preset-react": "^7.18.6", + "@babel/runtime": "^7.20.13", + "babel-plugin-dynamic-import-node": "^2.3.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24", + "gatsby-core-utils": "^4.12.0", + "gatsby-legacy-polyfills": "^3.12.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.6", + "core-js": "^3.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==" + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/better-opn": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", + "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", + "dev": true, + "dependencies": { + "open": "^7.0.3" + }, + "engines": { + "node": ">8.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/boxen/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/boxen/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/boxen/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-manager": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-5.2.3.tgz", + "integrity": "sha512-9OErI8fksFkxAMJ8Mco0aiZSdphyd90HcKiOMJQncSlU1yq/9lHHxrT8PDayxrmr9IIIZPOAEfXuGSD7g29uog==", + "dev": true, + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "^9.1.2" + } + }, + "node_modules/cache-manager/node_modules/lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001524", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", + "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/change-case-all": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.14.tgz", + "integrity": "sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==", + "dev": true, + "dependencies": { + "change-case": "^4.1.2", + "is-lower-case": "^2.0.2", + "is-upper-case": "^2.0.2", + "lower-case": "^2.0.2", + "lower-case-first": "^2.0.2", + "sponge-case": "^1.0.1", + "swap-case": "^2.0.2", + "title-case": "^3.0.3", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/classlist-polyfill": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.2.0.tgz", + "integrity": "sha512-GzIjNdcEtH4ieA2S8NmrSxv7DfEV5fmixQeyTmqmRmRJPGpRBaSnA2a0VrCjyT8iW8JjEdMbKzDotAJf+ajgaQ==", + "dev": true + }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==", + "dev": true + }, + "node_modules/clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/clipboardy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", + "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", + "dependencies": { + "arch": "^2.2.0", + "execa": "^5.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "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/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-hrtime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-3.0.0.tgz", + "integrity": "sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dev": true, + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/core-js": { + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.1.tgz", + "integrity": "sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz", + "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.1.tgz", + "integrity": "sha512-f52QZwkFVDPf7UEQZGHKx6NYxsxmVGJe5DIvbzOdRMJlmT6yv0KDjR8rmy3ngr/t5wU54c7Sp/qIJH0ppbhVpQ==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/create-gatsby": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/create-gatsby/-/create-gatsby-3.12.0.tgz", + "integrity": "sha512-cAWZ6046W0kUDAVRwpAEYlHTUAZApN5xmuq24JMDQPO5Qzn1eWe7s2LZ8V3isWOMOHXHKMMVm83NtJYIHql80g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13" + }, + "bin": { + "create-gatsby": "cli.js" + } + }, + "node_modules/create-react-context": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz", + "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==", + "dependencies": { + "gud": "^1.0.0", + "warning": "^4.0.3" + }, + "peerDependencies": { + "prop-types": "^15.0.0", + "react": "^0.14.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "cssnano": "^6.0.1", + "jest-worker": "^29.4.3", + "postcss": "^8.4.24", + "schema-utils": "^4.0.1", + "serialize-javascript": "^6.0.1" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-selector-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", + "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==", + "dev": true + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz", + "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^6.0.1", + "lilconfig": "^2.1.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz", + "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^4.0.0", + "postcss-calc": "^9.0.0", + "postcss-colormin": "^6.0.0", + "postcss-convert-values": "^6.0.0", + "postcss-discard-comments": "^6.0.0", + "postcss-discard-duplicates": "^6.0.0", + "postcss-discard-empty": "^6.0.0", + "postcss-discard-overridden": "^6.0.0", + "postcss-merge-longhand": "^6.0.0", + "postcss-merge-rules": "^6.0.1", + "postcss-minify-font-values": "^6.0.0", + "postcss-minify-gradients": "^6.0.0", + "postcss-minify-params": "^6.0.0", + "postcss-minify-selectors": "^6.0.0", + "postcss-normalize-charset": "^6.0.0", + "postcss-normalize-display-values": "^6.0.0", + "postcss-normalize-positions": "^6.0.0", + "postcss-normalize-repeat-style": "^6.0.0", + "postcss-normalize-string": "^6.0.0", + "postcss-normalize-timing-functions": "^6.0.0", + "postcss-normalize-unicode": "^6.0.0", + "postcss-normalize-url": "^6.0.0", + "postcss-normalize-whitespace": "^6.0.0", + "postcss-ordered-values": "^6.0.0", + "postcss-reduce-initial": "^6.0.0", + "postcss-reduce-transforms": "^6.0.0", + "postcss-svgo": "^6.0.0", + "postcss-unique-selectors": "^6.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz", + "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "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 + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/devcert": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/devcert/-/devcert-1.2.2.tgz", + "integrity": "sha512-UsLqvtJGPiGwsIZnJINUnFYaWgK7CroreGRndWHZkRD58tPFr3pVbbSyHR8lbh41+azR4jKvuNZ+eCoBZGA5kA==", + "dev": true, + "dependencies": { + "@types/configstore": "^2.1.1", + "@types/debug": "^0.0.30", + "@types/get-port": "^3.2.0", + "@types/glob": "^5.0.34", + "@types/lodash": "^4.14.92", + "@types/mkdirp": "^0.5.2", + "@types/node": "^8.5.7", + "@types/rimraf": "^2.0.2", + "@types/tmp": "^0.0.33", + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^7.1.2", + "is-valid-domain": "^0.1.6", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "rimraf": "^2.6.2", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^1.10.0" + } + }, + "node_modules/devcert/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true + }, + "node_modules/devcert/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/devcert/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/devcert/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/devcert/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.2.tgz", + "integrity": "sha512-B8c6JdiEpxAKnd8Dm++QQxJL4lfuc757scZtcapj6qjTjrQzyq5iAyznLKVvK+77eYNiFblHBlt7MM0fOeqoKw==", + "dev": true + }, + "node_modules/domready": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz", + "integrity": "sha512-uIzsOJUNk+AdGE9a6VDeessoMCzF8RrZvJCX/W8QtyfgdR6Uofn/MvRonih3OtCO79b2VDzDOymuiABrQ4z3XA==", + "dev": true + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/drange": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", + "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.504", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.504.tgz", + "integrity": "sha512-cSMwIAd8yUh54VwitVRVvHK66QqHWE39C3DRj8SWiXitEpVSY3wNPD9y1pxQtLIi4w3UdzF9klLsmuPshz09DQ==", + "dev": true + }, + "node_modules/element-closest": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/element-closest/-/element-closest-2.0.2.tgz", + "integrity": "sha512-QCqAWP3kwj8Gz9UXncVXQGdrhnWxD8SQBSeZp5pOsyCcQ6RpL738L1/tfuwBiMi6F1fYkxqPnBrFBR4L+f49Cg==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", + "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", + "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz", + "integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/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==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", + "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.0", + "safe-array-concat": "^1.0.0" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", + "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.48.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "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.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-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" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.7.0.tgz", + "integrity": "sha512-bNaVVUvU4srexGhVcayn/F4pJAz19CWBkKoMx7aSQ4wtTbZQCnG5O9LHCE42mM+JSKOUp7n6vd5CIwzj7lOVGA==", + "dev": true, + "dependencies": { + "@types/eslint": "^7.29.0", + "arrify": "^2.0.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/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, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/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, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "peer": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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.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" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "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" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/event-source-polyfill": { + "version": "1.0.31", + "resolved": "https://registry.npmjs.org/event-source-polyfill/-/event-source-polyfill-1.0.31.tgz", + "integrity": "sha512-4IJSItgS/41IxN5UVAVuAyczwZF7ZIEsM1XAoUzIHA6A+xzusEZUutdXz2Nr+MQPLxfTiCvqE79/C8HT8fKFvA==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "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.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-http-proxy": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/express-http-proxy/-/express-http-proxy-1.6.3.tgz", + "integrity": "sha512-/l77JHcOUrDUX8V67E287VEUQT0lbm71gdGVoodnlWBziarYKgMcpqT7xvh/HM8Jv52phw8Bd8tY+a7QjOr7Yg==", + "dev": true, + "dependencies": { + "debug": "^3.0.1", + "es6-promise": "^4.1.1", + "raw-body": "^2.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/express-http-proxy/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-patch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "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" + } + }, + "node_modules/fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dev": true, + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "dev": true, + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "dev": true + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "dev": true, + "dependencies": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "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/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "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/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.9.0.tgz", + "integrity": "sha512-rahaRMkN8P8d/tgK/BLPX+WBVM27NbvdXBxqQujBtkDAIFspaRqN7Od7lfdGQA6KAD+f82fYCLBq1ipvcu8qLw==", + "dev": true + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dev": true, + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.1.tgz", + "integrity": "sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-exists-cached": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", + "integrity": "sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gatsby": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-5.12.3.tgz", + "integrity": "sha512-+qO2gKA95HH+b4RCf3AYHOW3Pz8YC1t3W9MOwbUQe7QgDXd0D9lRc7YAqk8XuXp8Pkp/NWuoeZY3d/1B8d8nng==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/core": "^7.20.12", + "@babel/eslint-parser": "^7.19.1", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/parser": "^7.20.13", + "@babel/runtime": "^7.20.13", + "@babel/traverse": "^7.20.13", + "@babel/types": "^7.20.7", + "@builder.io/partytown": "^0.7.5", + "@gatsbyjs/reach-router": "^2.0.1", + "@gatsbyjs/webpack-hot-middleware": "^2.25.3", + "@graphql-codegen/add": "^3.2.3", + "@graphql-codegen/core": "^2.6.8", + "@graphql-codegen/plugin-helpers": "^2.7.2", + "@graphql-codegen/typescript": "^2.8.8", + "@graphql-codegen/typescript-operations": "^2.5.13", + "@graphql-tools/code-file-loader": "^7.3.23", + "@graphql-tools/load": "^7.8.14", + "@jridgewell/trace-mapping": "^0.3.18", + "@nodelib/fs.walk": "^1.2.8", + "@parcel/cache": "2.8.3", + "@parcel/core": "2.8.3", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.10", + "@types/http-proxy": "^1.17.11", + "@typescript-eslint/eslint-plugin": "^5.60.1", + "@typescript-eslint/parser": "^5.60.1", + "@vercel/webpack-asset-relocator-loader": "^1.7.3", + "acorn-loose": "^8.3.0", + "acorn-walk": "^8.2.0", + "address": "1.2.2", + "anser": "^2.1.1", + "autoprefixer": "^10.4.14", + "axios": "^0.21.1", + "babel-jsx-utils": "^1.1.0", + "babel-loader": "^8.3.0", + "babel-plugin-add-module-exports": "^1.0.4", + "babel-plugin-dynamic-import-node": "^2.3.3", + "babel-plugin-lodash": "^3.3.4", + "babel-plugin-remove-graphql-queries": "^5.12.0", + "babel-preset-gatsby": "^3.12.0", + "better-opn": "^2.1.1", + "bluebird": "^3.7.2", + "body-parser": "1.20.1", + "browserslist": "^4.21.9", + "cache-manager": "^2.11.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "common-tags": "^1.8.2", + "compression": "^1.7.4", + "cookie": "^0.5.0", + "core-js": "^3.31.0", + "cors": "^2.8.5", + "css-loader": "^5.2.7", + "css-minimizer-webpack-plugin": "^2.0.0", + "css.escape": "^1.5.1", + "date-fns": "^2.30.0", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "detect-port": "^1.5.1", + "devcert": "^1.2.2", + "dotenv": "^8.6.0", + "enhanced-resolve": "^5.15.0", + "error-stack-parser": "^2.1.4", + "eslint": "^7.32.0", + "eslint-config-react-app": "^6.0.0", + "eslint-plugin-flowtype": "^5.10.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-webpack-plugin": "^2.7.0", + "event-source-polyfill": "1.0.31", + "execa": "^5.1.1", + "express": "^4.18.2", + "express-http-proxy": "^1.6.3", + "fastest-levenshtein": "^1.0.16", + "fastq": "^1.15.0", + "file-loader": "^6.2.0", + "find-cache-dir": "^3.3.2", + "fs-exists-cached": "1.0.0", + "fs-extra": "^11.1.1", + "gatsby-cli": "^5.12.0", + "gatsby-core-utils": "^4.12.0", + "gatsby-graphiql-explorer": "^3.12.0", + "gatsby-legacy-polyfills": "^3.12.0", + "gatsby-link": "^5.12.0", + "gatsby-page-utils": "^3.12.0", + "gatsby-parcel-config": "1.12.0", + "gatsby-plugin-page-creator": "^5.12.0", + "gatsby-plugin-typescript": "^5.12.0", + "gatsby-plugin-utils": "^4.12.0", + "gatsby-react-router-scroll": "^6.12.0", + "gatsby-script": "^2.12.0", + "gatsby-telemetry": "^4.12.0", + "gatsby-worker": "^2.12.0", + "glob": "^7.2.3", + "globby": "^11.1.0", + "got": "^11.8.6", + "graphql": "^16.7.1", + "graphql-compose": "^9.0.10", + "graphql-http": "^1.19.0", + "graphql-tag": "^2.12.6", + "hasha": "^5.2.2", + "invariant": "^2.2.4", + "is-relative": "^1.0.0", + "is-relative-url": "^3.0.0", + "joi": "^17.9.2", + "json-loader": "^0.5.7", + "latest-version": "^7.0.0", + "linkfs": "^2.1.0", + "lmdb": "2.5.3", + "lodash": "^4.17.21", + "meant": "^1.0.3", + "memoizee": "^0.4.15", + "micromatch": "^4.0.5", + "mime": "^3.0.0", + "mini-css-extract-plugin": "1.6.2", + "mitt": "^1.2.0", + "moment": "^2.29.4", + "multer": "^1.4.5-lts.1", + "node-fetch": "^2.6.11", + "node-html-parser": "^5.4.2", + "normalize-path": "^3.0.0", + "null-loader": "^4.0.1", + "opentracing": "^0.14.7", + "p-defer": "^3.0.0", + "parseurl": "^1.3.3", + "physical-cpu-count": "^2.0.0", + "platform": "^1.3.6", + "postcss": "^8.4.24", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^5.3.0", + "prompts": "^2.4.2", + "prop-types": "^15.8.1", + "query-string": "^6.14.1", + "raw-loader": "^4.0.2", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.14.0", + "react-server-dom-webpack": "0.0.0-experimental-c8b778b7f-20220825", + "redux": "4.2.1", + "redux-thunk": "^2.4.2", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "shallow-compare": "^1.2.2", + "signal-exit": "^3.0.7", + "slugify": "^1.6.6", + "socket.io": "4.7.1", + "socket.io-client": "4.7.1", + "stack-trace": "^0.0.10", + "string-similarity": "^1.2.2", + "strip-ansi": "^6.0.1", + "style-loader": "^2.0.0", + "style-to-object": "^0.4.1", + "terser-webpack-plugin": "^5.3.9", + "tmp": "^0.2.1", + "true-case-path": "^2.2.1", + "type-of": "^2.0.1", + "url-loader": "^4.1.1", + "uuid": "^8.3.2", + "webpack": "^5.88.1", + "webpack-dev-middleware": "^4.3.0", + "webpack-merge": "^5.9.0", + "webpack-stats-plugin": "^1.1.3", + "webpack-virtual-modules": "^0.5.0", + "xstate": "^4.38.0", + "yaml-loader": "^0.8.0" + }, + "bin": { + "gatsby": "cli.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "gatsby-sharp": "^1.12.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^0.0.0", + "react-dom": "^18.0.0 || ^0.0.0" + } + }, + "node_modules/gatsby-cli": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-5.12.0.tgz", + "integrity": "sha512-XLLwwq2l0AIM9O2OqT74EpxjTyJYwCLh1r0t1+dIt4p5owpNvpu9HSPPFgPGRfV0ADoBzrAHcixNOBtLPRax0Q==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/core": "^7.20.12", + "@babel/generator": "^7.20.14", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.20.13", + "@babel/template": "^7.20.7", + "@babel/types": "^7.20.7", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/common-tags": "^1.8.1", + "better-opn": "^2.1.1", + "boxen": "^5.1.2", + "chalk": "^4.1.2", + "clipboardy": "^2.3.0", + "common-tags": "^1.8.2", + "convert-hrtime": "^3.0.0", + "create-gatsby": "^3.12.0", + "envinfo": "^7.10.0", + "execa": "^5.1.1", + "fs-exists-cached": "^1.0.0", + "fs-extra": "^11.1.1", + "gatsby-core-utils": "^4.12.0", + "gatsby-telemetry": "^4.12.0", + "hosted-git-info": "^3.0.8", + "is-valid-path": "^0.1.1", + "joi": "^17.9.2", + "lodash": "^4.17.21", + "node-fetch": "^2.6.11", + "opentracing": "^0.14.7", + "pretty-error": "^2.1.2", + "progress": "^2.0.3", + "prompts": "^2.4.2", + "redux": "4.2.1", + "resolve-cwd": "^3.0.0", + "semver": "^7.5.3", + "signal-exit": "^3.0.7", + "stack-trace": "^0.0.10", + "strip-ansi": "^6.0.1", + "yargs": "^15.4.1", + "yoga-layout-prebuilt": "^1.10.0", + "yurnalist": "^2.1.0" + }, + "bin": { + "gatsby": "cli.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/gatsby-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/gatsby-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/gatsby-cli/node_modules/clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "dependencies": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gatsby-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/gatsby-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/gatsby-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/gatsby-cli/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gatsby-cli/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gatsby-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gatsby-cli/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/gatsby-core-utils": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-4.12.0.tgz", + "integrity": "sha512-1vK0cmL8FNHAddQ5WZt0yTPdFSZuMPNUSsHckM+ZdVmRxyif3aZYSi7ofj6sJo/UvhKj7fBqJv/smZYpp2PRqg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "ci-info": "2.0.0", + "configstore": "^5.0.1", + "fastq": "^1.15.0", + "file-type": "^16.5.4", + "fs-extra": "^11.1.1", + "got": "^11.8.6", + "hash-wasm": "^4.9.0", + "import-from": "^4.0.0", + "lmdb": "2.5.3", + "lock": "^1.1.0", + "node-object-hash": "^2.3.10", + "proper-lockfile": "^4.1.2", + "resolve-from": "^5.0.0", + "tmp": "^0.2.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/gatsby-graphiql-explorer": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-3.12.0.tgz", + "integrity": "sha512-vr86oLhif5uZ+VSTE34DYjtBDCIHWpJHh4+65fmgZh+WtDv1lyONJ/WWmyD+dNMHlGsZtR6wVvBjrj5iFRDGRw==", + "dev": true, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/gatsby-legacy-polyfills": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/gatsby-legacy-polyfills/-/gatsby-legacy-polyfills-3.12.0.tgz", + "integrity": "sha512-hj0M4w4xFvKHtBNE3StkLmbCS3LXK0oxW5g3UkubbyMAwFqylQnWzXfysBpeFicQN/tr2px1cNGaqp91Z3Nh+g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "core-js-compat": "3.31.0" + } + }, + "node_modules/gatsby-legacy-polyfills/node_modules/core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/gatsby-link": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-5.12.0.tgz", + "integrity": "sha512-Ky7q6zeminbKQpSYjKW8YkkbV8+b01MUM/WNtGDMzu6jOfYFvv0+2kJXTxF0mzyAJMq9Xx44yFK0LX5kLF5fZA==", + "dev": true, + "dependencies": { + "@types/reach__router": "^1.3.10", + "gatsby-page-utils": "^3.12.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@gatsbyjs/reach-router": "^2.0.0", + "react": "^18.0.0 || ^0.0.0", + "react-dom": "^18.0.0 || ^0.0.0" + } + }, + "node_modules/gatsby-page-utils": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-3.12.0.tgz", + "integrity": "sha512-xkwGE3qf+wzpI0Y7dQyZlWFC7HL7O6eTZ2DrkbIUPAyq3nWSJQnbuhZ9KaPBK3Qs955T8/iUeHU9YQu3Y5Wcgg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "bluebird": "^3.7.2", + "chokidar": "^3.5.3", + "fs-exists-cached": "^1.0.0", + "gatsby-core-utils": "^4.12.0", + "glob": "^7.2.3", + "lodash": "^4.17.21", + "micromatch": "^4.0.5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/gatsby-parcel-config": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/gatsby-parcel-config/-/gatsby-parcel-config-1.12.0.tgz", + "integrity": "sha512-Ouru3TuIadzcTJ3zC943V3TKaesKOB0PW07dAlvXnjX8BXLDz9bgaS+eQlq+kvIrE1bsdpIWwAo/eL58a2+RCg==", + "dev": true, + "dependencies": { + "@gatsbyjs/parcel-namer-relative-to-cwd": "^2.12.0", + "@parcel/bundler-default": "2.8.3", + "@parcel/compressor-raw": "2.8.3", + "@parcel/namer-default": "2.8.3", + "@parcel/optimizer-terser": "2.8.3", + "@parcel/packager-js": "2.8.3", + "@parcel/packager-raw": "2.8.3", + "@parcel/reporter-dev-server": "2.8.3", + "@parcel/resolver-default": "2.8.3", + "@parcel/runtime-js": "2.8.3", + "@parcel/transformer-js": "2.8.3", + "@parcel/transformer-json": "2.8.3" + }, + "engines": { + "parcel": "2.x" + }, + "peerDependencies": { + "@parcel/core": "^2.0.0" + } + }, + "node_modules/gatsby-plugin-manifest": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/gatsby-plugin-manifest/-/gatsby-plugin-manifest-5.12.0.tgz", + "integrity": "sha512-M4tq4AX4yVNUQnYQ5SI1ba/Khqof4PtyVtIpzzGE82O53Jg3M5AWZ0KGcz+d3UFdw1PGXYF+UtTzPlzMiTTeEg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "gatsby-core-utils": "^4.12.0", + "gatsby-plugin-utils": "^4.12.0", + "semver": "^7.5.3", + "sharp": "^0.32.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": "^5.0.0-next" + } + }, + "node_modules/gatsby-plugin-manifest/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gatsby-plugin-manifest/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gatsby-plugin-manifest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/gatsby-plugin-meta-redirect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-meta-redirect/-/gatsby-plugin-meta-redirect-1.1.1.tgz", + "integrity": "sha512-Oc4qgU3SlDUM9qoxIMKO+re2bdMs3/a2KXrfL65gb8XMLsHylBbveWtXZRhgjd2QDL/49RX4S9SEykuadRju2w==", + "dev": true, + "dependencies": { + "fs-extra": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gatsby-plugin-meta-redirect/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/gatsby-plugin-meta-redirect/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/gatsby-plugin-meta-redirect/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/gatsby-plugin-page-creator": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-5.12.0.tgz", + "integrity": "sha512-CwpI0Bp20+t7D8CVMD3R09df4eDo2RVB6Z6vgpmNdNzcRzk8GojuLSrdlA2s/RzwyCuxpDGyGGu5Ocnp4xJEhQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "@babel/traverse": "^7.20.13", + "@sindresorhus/slugify": "^1.1.2", + "chokidar": "^3.5.3", + "fs-exists-cached": "^1.0.0", + "fs-extra": "^11.1.1", + "gatsby-core-utils": "^4.12.0", + "gatsby-page-utils": "^3.12.0", + "gatsby-plugin-utils": "^4.12.0", + "gatsby-telemetry": "^4.12.0", + "globby": "^11.1.0", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": "^5.0.0-next" + } + }, + "node_modules/gatsby-plugin-react-helmet": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-6.12.0.tgz", + "integrity": "sha512-agcBCT9H8nlpkAU3D1fUeJbjh7IMPjGO/njoa7avIYLGsQ2nyGlHwcrEmS2zBHxYKaxPkztvr47OpCdnuEIvEw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": "^5.0.0-next", + "react-helmet": "^5.1.3 || ^6.0.0" + } + }, + "node_modules/gatsby-plugin-sass": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/gatsby-plugin-sass/-/gatsby-plugin-sass-6.12.0.tgz", + "integrity": "sha512-nAQ5Y0zLSxoexXmWCNo6AzTbCTJ8GTMtdCRF379dCnssUh3bFewdnaGraN8z7mTVb1Q12TfcRF+D4VGvVm/oig==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "resolve-url-loader": "^3.1.5", + "sass-loader": "^10.4.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": "^5.0.0-next", + "sass": "^1.30.0" + } + }, + "node_modules/gatsby-plugin-sharp": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-5.12.0.tgz", + "integrity": "sha512-of9E26/eLenTgNUjzFYJGbwIIGoXRCOCA1Dsz7dKvcx11b0pNf27C65AiEWPudWXHl+OUjFX/bNNBBooqN+nlg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "async": "^3.2.4", + "bluebird": "^3.7.2", + "debug": "^4.3.4", + "filenamify": "^4.3.0", + "fs-extra": "^11.1.1", + "gatsby-core-utils": "^4.12.0", + "gatsby-plugin-utils": "^4.12.0", + "lodash": "^4.17.21", + "probe-image-size": "^7.2.3", + "semver": "^7.5.3", + "sharp": "^0.32.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": "^5.0.0-next" + } + }, + "node_modules/gatsby-plugin-sharp/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gatsby-plugin-sharp/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gatsby-plugin-sharp/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/gatsby-plugin-typescript": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/gatsby-plugin-typescript/-/gatsby-plugin-typescript-5.12.0.tgz", + "integrity": "sha512-6oLxghN1y/XqDQKg8MwWgvJnkQu+5D+5NZqOlpDsGkJQz+k06S3WTK+diGnGJ9epmE0i7vCY5ZutGgrJ7icA+w==", + "dev": true, + "dependencies": { + "@babel/core": "^7.20.12", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.20.7", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.20.13", + "babel-plugin-remove-graphql-queries": "^5.12.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": "^5.0.0-next" + } + }, + "node_modules/gatsby-plugin-utils": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/gatsby-plugin-utils/-/gatsby-plugin-utils-4.12.0.tgz", + "integrity": "sha512-lU84VmWC9qGojROMZkBgGjCAzxcAUlyGAsd75vjj2y3yqGYtyvqInvK5tZvDyNNVvU21u040Ps4AKIvRVgMV/Q==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "fastq": "^1.15.0", + "fs-extra": "^11.1.1", + "gatsby-core-utils": "^4.12.0", + "gatsby-sharp": "^1.12.0", + "graphql-compose": "^9.0.10", + "import-from": "^4.0.0", + "joi": "^17.9.2", + "mime": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": "^5.0.0-next", + "graphql": "^16.0.0" + } + }, + "node_modules/gatsby-react-router-scroll": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-6.12.0.tgz", + "integrity": "sha512-KZqkJE/2LPtBemFVKKzCSDN86jqZatTCfMi+D0fkfeHDteaxDhJxIILtCizxr4TfPJRvvip0Wy/Oaafv4exmiA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@gatsbyjs/reach-router": "^2.0.0", + "react": "^18.0.0 || ^0.0.0", + "react-dom": "^18.0.0 || ^0.0.0" + } + }, + "node_modules/gatsby-remark-autolink-headers": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/gatsby-remark-autolink-headers/-/gatsby-remark-autolink-headers-6.12.0.tgz", + "integrity": "sha512-c+zXq+frX7TCFoGPig4H4zn5RqsV2pduO/jF/NQLtnH2D5JnaDT0rPwiTzUi+9soyZpAenuV8Sprv6JFELPW+w==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "github-slugger": "^1.5.0", + "lodash": "^4.17.21", + "mdast-util-to-string": "^2.0.0", + "unist-util-visit": "^2.0.3" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": "^5.0.0-next", + "react": "^18.0.0 || ^0.0.0", + "react-dom": "^18.0.0 || ^0.0.0" + } + }, + "node_modules/gatsby-remark-images": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/gatsby-remark-images/-/gatsby-remark-images-7.12.0.tgz", + "integrity": "sha512-+jTbqcAcR2dj676w9W38oQKeTZDFy0kYT/gJncbS0fEdlk9MlZFErpoXZ4gmqOxxbTxRDbrSCaNBMF/k89F0fg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "chalk": "^4.1.2", + "cheerio": "^1.0.0-rc.10", + "gatsby-core-utils": "^4.12.0", + "is-relative-url": "^3.0.0", + "lodash": "^4.17.21", + "mdast-util-definitions": "^4.0.0", + "query-string": "^6.14.1", + "unist-util-select": "^3.0.4", + "unist-util-visit-parents": "^3.1.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": "^5.0.0-next", + "gatsby-plugin-sharp": "^5.0.0-next" + } + }, + "node_modules/gatsby-remark-images/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/gatsby-remark-images/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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/gatsby-remark-images/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/gatsby-remark-images/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/gatsby-remark-images/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/gatsby-remark-images/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gatsby-remark-prismjs": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/gatsby-remark-prismjs/-/gatsby-remark-prismjs-7.12.0.tgz", + "integrity": "sha512-W5NETUn0UTdvfNUfCnAgfpEI0wIlWk0UDTOvqUFptvyN8R6UW3FMm+KC18uv9WOQyKMgvNGU+UjJ1towTQvNLw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "parse-numeric-range": "^1.3.0", + "unist-util-visit": "^2.0.3" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": "^5.0.0-next", + "prismjs": "^1.15.0" + } + }, + "node_modules/gatsby-script": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/gatsby-script/-/gatsby-script-2.12.0.tgz", + "integrity": "sha512-prYN8x8q+ErQpy8G4c8VR+BalFe1H7v09/esJWF8Ufmy7xi0FsbG56a/Ee2YDrnuu942lhY+ailWR+UnDSDA8g==", + "dev": true, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@gatsbyjs/reach-router": "^2.0.0", + "react": "^18.0.0 || ^0.0.0", + "react-dom": "^18.0.0 || ^0.0.0" + } + }, + "node_modules/gatsby-sharp": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/gatsby-sharp/-/gatsby-sharp-1.12.0.tgz", + "integrity": "sha512-5MbTPKfzkOCtwT74+FZTUFKaul/2UyF10apvMcmIKomq71/jHf6wJx+rHtSdgyq19r4VWL8DGG2CKgSpe0z9GQ==", + "dev": true, + "dependencies": { + "sharp": "^0.32.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/gatsby-source-filesystem": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-5.12.0.tgz", + "integrity": "sha512-0BZkgADBu56vTzZ6TLvrMXhp8MzpEqvtpsI+VRtNTlsu6ULaHRjoMClomlAqWecjBXTkujhwpSjnIfEmpmCaLQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "chokidar": "^3.5.3", + "file-type": "^16.5.4", + "fs-extra": "^11.1.1", + "gatsby-core-utils": "^4.12.0", + "mime": "^3.0.0", + "pretty-bytes": "^5.6.0", + "valid-url": "^1.0.9", + "xstate": "^4.38.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": "^5.0.0-next" + } + }, + "node_modules/gatsby-telemetry": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-4.12.0.tgz", + "integrity": "sha512-pgaGCzKPZKWvNrX/VC/nE1S9Z20fzg4aA4ETD6hlI7ztu+BSyQG+Oebly4SdFGlVSLeq3x3+gOe/LY9Fry7TrA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/runtime": "^7.20.13", + "@turist/fetch": "^7.2.0", + "@turist/time": "^0.0.2", + "boxen": "^5.1.2", + "configstore": "^5.0.1", + "fs-extra": "^11.1.1", + "gatsby-core-utils": "^4.12.0", + "git-up": "^7.0.0", + "is-docker": "^2.2.1", + "lodash": "^4.17.21", + "node-fetch": "^2.6.11" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/gatsby-transformer-remark": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/gatsby-transformer-remark/-/gatsby-transformer-remark-6.12.0.tgz", + "integrity": "sha512-W7euQegQ3EzRvVntEldQWeCirInnhzKir2cMhFeAlqZm74h7fn2vlDr7CnHMncFsjZllj0AA73c+35+60Msntg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.13", + "gatsby-core-utils": "^4.12.0", + "gray-matter": "^4.0.3", + "hast-util-raw": "^6.1.0", + "hast-util-to-html": "^7.1.3", + "lodash": "^4.17.21", + "mdast-util-to-hast": "^10.2.0", + "mdast-util-to-string": "^2.0.0", + "mdast-util-toc": "^5.1.0", + "remark": "^13.0.0", + "remark-footnotes": "^3.0.0", + "remark-gfm": "^1.0.0", + "remark-parse": "^9.0.0", + "remark-retext": "^4.0.0", + "remark-stringify": "^9.0.1", + "retext-english": "^3.0.4", + "sanitize-html": "^2.11.0", + "underscore.string": "^3.3.6", + "unified": "^9.2.2", + "unist-util-remove-position": "^3.0.0", + "unist-util-select": "^3.0.4", + "unist-util-visit": "^2.0.3" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": "^5.0.0-next" + } + }, + "node_modules/gatsby-worker": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/gatsby-worker/-/gatsby-worker-2.12.0.tgz", + "integrity": "sha512-wQTlAH8HdbJvCYZJ9jHCHSzF8E4SwB65suQ2hNo29wg4BhuMMpPWrLmraqPIGeAsBnWUEjzNGdedtzbCVwBJPQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.20.12", + "@babel/runtime": "^7.20.13", + "fs-extra": "^11.1.1", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/gatsby/node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/gatsby/node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/gatsby/node_modules/@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/gatsby/node_modules/@typescript-eslint/experimental-utils/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, + "optional": true, + "peer": 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/gatsby/node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/gatsby/node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/gatsby/node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/gatsby/node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/gatsby/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/gatsby/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/gatsby/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gatsby/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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/gatsby/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/gatsby/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/gatsby/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gatsby/node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "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": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/gatsby/node_modules/eslint-config-react-app": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz", + "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0", + "@typescript-eslint/parser": "^4.0.0", + "babel-eslint": "^10.0.0", + "eslint": "^7.5.0", + "eslint-plugin-flowtype": "^5.2.0", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-jest": "^24.0.0", + "eslint-plugin-jsx-a11y": "^6.3.1", + "eslint-plugin-react": "^7.20.3", + "eslint-plugin-react-hooks": "^4.0.8", + "eslint-plugin-testing-library": "^3.9.0" + }, + "peerDependenciesMeta": { + "eslint-plugin-jest": { + "optional": true + }, + "eslint-plugin-testing-library": { + "optional": true + } + } + }, + "node_modules/gatsby/node_modules/eslint-plugin-flowtype": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz", + "integrity": "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.1.0" + } + }, + "node_modules/gatsby/node_modules/eslint-plugin-jest": { + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz", + "integrity": "sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "^4.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": ">= 4", + "eslint": ">=5" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "node_modules/gatsby/node_modules/eslint-plugin-testing-library": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz", + "integrity": "sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "^3.10.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^5 || ^6 || ^7" + } + }, + "node_modules/gatsby/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/experimental-utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/gatsby/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", + "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/gatsby/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/gatsby/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", + "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/gatsby/node_modules/eslint-plugin-testing-library/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/gatsby/node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/gatsby/node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/gatsby/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/gatsby/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gatsby/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gatsby/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/gatsby/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/gatsby/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gatsby/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gatsby/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gatsby/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/gatsby/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gatsby/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/git-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", + "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", + "dev": true, + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "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/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "peer": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "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==", + "dev": true + }, + "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/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-compose": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/graphql-compose/-/graphql-compose-9.0.10.tgz", + "integrity": "sha512-UsVoxfi2+c8WbHl2pEB+teoRRZoY4mbWBoijeLDGpAZBSPChnqtSRjp+T9UcouLCwGr5ooNyOQLoI3OVzU1bPQ==", + "dev": true, + "dependencies": { + "graphql-type-json": "0.3.2" + } + }, + "node_modules/graphql-http": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/graphql-http/-/graphql-http-1.22.0.tgz", + "integrity": "sha512-9RBUlGJWBFqz9LwfpmAbjJL/8j/HCNkZwPBU5+Bfmwez+1Ay43DocMNQYpIWsWqH0Ftv6PTNAh2aRnnMCBJgLw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "graphql": ">=0.11 <=16" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-type-json": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/graphql-type-json/-/graphql-type-json-0.3.2.tgz", + "integrity": "sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==", + "dev": true, + "peerDependencies": { + "graphql": ">=0.8.0" + } + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gray-matter/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "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", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-wasm": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.9.0.tgz", + "integrity": "sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==", + "dev": true + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-to-hyperscript/node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dev": true, + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dev": true, + "dependencies": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", + "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.1.0.tgz", + "integrity": "sha512-5FoZLDHBpka20OlZZ4I/+RBw5piVQ8iI1doEvffQhx5CbCyTtP8UCq8Tw6NmTAMtXgsQxmhW7Ly8OdFre5/YMQ==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/hast-util-to-html": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz", + "integrity": "sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==", + "dev": true, + "dependencies": { + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^3.0.1", + "unist-util-is": "^4.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dev": true, + "dependencies": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz", + "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dev": true, + "dependencies": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dev": true, + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-loader": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-4.2.0.tgz", + "integrity": "sha512-OxCHD3yt+qwqng2vvcaPApCEvbx+nXWu+v69TYHx1FO8bffHn/JjHtE3TTQZmHjwvnJe4xxzuecetDVBrQR1Zg==", + "dev": true, + "dependencies": { + "html-minifier-terser": "^7.0.0", + "parse5": "^7.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", + "integrity": "sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", + "dev": true, + "engines": { + "node": ">=12.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "dev": true + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "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" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "dev": true, + "dependencies": { + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz", + "integrity": "sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-3.0.0.tgz", + "integrity": "sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA==", + "dev": true, + "dependencies": { + "is-absolute-url": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "dev": true, + "dependencies": { + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz", + "integrity": "sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/is-valid-domain": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-valid-domain/-/is-valid-domain-0.1.6.tgz", + "integrity": "sha512-ZKtq737eFkZr71At8NxOFcP9O1K89gW3DkdrGMpp1upr/ueWjj+Weh4l9AI4rN0Gt8W2M1w7jrG2b/Yv83Ljpg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + } + }, + "node_modules/is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "dev": true, + "dependencies": { + "is-invalid-path": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz", + "integrity": "sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "has-tostringtag": "^1.0.0", + "reflect.getprototypeof": "^1.0.3" + } + }, + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "node_modules/jest-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/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/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", + "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.6.3", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/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/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.10.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.10.0.tgz", + "integrity": "sha512-hrazgRSlhzacZ69LdcKfhi3Vu13z2yFfoAzmEov3yFIJlatTdVGUW6vle1zjH8qkzdCn/qGw8rapjqsObbYXAg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-file-download": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.12.tgz", + "integrity": "sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyboardevent-key-polyfill": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keyboardevent-key-polyfill/-/keyboardevent-key-polyfill-1.1.0.tgz", + "integrity": "sha512-NTDqo7XhzL1fqmUzYroiyK2qGua7sOMzLav35BfNA/mPUSCtw8pZghHFMTYR9JdnJ23IQz695FcaM6EE6bpbFQ==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/latest-version": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "dev": true, + "dependencies": { + "package-json": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/legacy-swc-helpers": { + "name": "@swc/helpers", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkfs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/linkfs/-/linkfs-2.1.0.tgz", + "integrity": "sha512-kmsGcmpvjStZ0ATjuHycBujtNnXiZR28BTivEu0gAMDTT7GEyodcK6zSRtu6xsrdorrPZEIN380x7BD7xEYkew==", + "dev": true + }, + "node_modules/lmdb": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.3.tgz", + "integrity": "sha512-iBA0cb13CobBSoGJLfZgnrykLlfJipDAnvtf+YwIqqzBEsTeQYsXrHaSBkaHd5wCWeabwrNvhjZoFMUrlo+eLw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "msgpackr": "^1.5.4", + "node-addon-api": "^4.3.0", + "node-gyp-build-optional-packages": "5.0.3", + "ordered-binary": "^1.2.4", + "weak-lru-cache": "^1.2.2" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "2.5.3", + "@lmdb/lmdb-darwin-x64": "2.5.3", + "@lmdb/lmdb-linux-arm": "2.5.3", + "@lmdb/lmdb-linux-arm64": "2.5.3", + "@lmdb/lmdb-linux-x64": "2.5.3", + "@lmdb/lmdb-win32-x64": "2.5.3" + } + }, + "node_modules/lmdb/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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/lock": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/lock/-/lock-1.1.0.tgz", + "integrity": "sha512-NZQIJJL5Rb9lMJ0Yl1JoVr9GSdo4HTPsUEWsSFzB8dE8DSoiLCVavWZPi7Rnlv/o73u6I24S/XYc/NmG4l8EKA==", + "dev": true + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.deburr": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", + "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==", + "dev": true + }, + "node_modules/lodash.every": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.every/-/lodash.every-4.6.0.tgz", + "integrity": "sha512-isF82d+65/sNvQ3aaQAW7LLHnnTxSN/2fm4rhYyuufLzA4VtHz6y6S5vFwe6PQVr2xdqUOyxBbTNKDpnmeu50w==", + "dev": true + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "dev": true + }, + "node_modules/lodash.maxby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.maxby/-/lodash.maxby-4.6.0.tgz", + "integrity": "sha512-QfTqQTwzmKxLy7VZlbx2M/ipWv8DCQ2F5BI/MRxLharOQ5V78yMSuB+JE+EuUM22txYfj09R2Q7hUlEYj7KdNg==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lower-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz", + "integrity": "sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lowlight": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", + "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "dev": true, + "dependencies": { + "fault": "^1.0.0", + "highlight.js": "~10.7.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "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==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/map-age-cleaner/node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/matches-selector": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/matches-selector/-/matches-selector-1.2.0.tgz", + "integrity": "sha512-c4vLwYWyl+Ji+U43eU/G5FwxWd4ZH0ePUsFs5y0uwD9HUEFBXUQ1zUUan+78IpRD+y4pUfG0nAzNM292K7ItvA==", + "dev": true + }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dev": true, + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", + "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^4.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-footnote": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/mdast-util-footnote/-/mdast-util-footnote-0.1.7.tgz", + "integrity": "sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==", + "dev": true, + "dependencies": { + "mdast-util-to-markdown": "^0.6.0", + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", + "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", + "dev": true, + "dependencies": { + "mdast-util-gfm-autolink-literal": "^0.1.0", + "mdast-util-gfm-strikethrough": "^0.2.0", + "mdast-util-gfm-table": "^0.1.0", + "mdast-util-gfm-task-list-item": "^0.1.0", + "mdast-util-to-markdown": "^0.6.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", + "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", + "dev": true, + "dependencies": { + "ccount": "^1.0.0", + "mdast-util-find-and-replace": "^1.1.0", + "micromark": "^2.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", + "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", + "dev": true, + "dependencies": { + "mdast-util-to-markdown": "^0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", + "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", + "dev": true, + "dependencies": { + "markdown-table": "^2.0.0", + "mdast-util-to-markdown": "~0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", + "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", + "dev": true, + "dependencies": { + "mdast-util-to-markdown": "~0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz", + "integrity": "sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-nlcst": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-nlcst/-/mdast-util-to-nlcst-4.0.1.tgz", + "integrity": "sha512-Y4ffygj85MTt70STKnEquw6k73jYWJBaYcb4ITAKgSNokZF7fH8rEHZ1GsRY/JaxqUevMaEnsDmkVv5Z9uVRdg==", + "dev": true, + "dependencies": { + "nlcst-to-string": "^2.0.0", + "repeat-string": "^1.0.0", + "unist-util-position": "^3.0.0", + "vfile-location": "^3.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-toc": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-5.1.0.tgz", + "integrity": "sha512-csimbRIVkiqc+PpFeKDGQ/Ck2N4f9FYH3zzBMMJzcxoKL8m+cM0n94xXm0I9eaxHnKdY9n145SGTdyJC7i273g==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.3", + "@types/unist": "^2.0.3", + "extend": "^3.0.2", + "github-slugger": "^1.2.1", + "mdast-util-to-string": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/meant": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.3.tgz", + "integrity": "sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mem": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", + "dev": true, + "dependencies": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/mem?sponsor=1" + } + }, + "node_modules/mem/node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "node_modules/micromark-extension-footnote": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/micromark-extension-footnote/-/micromark-extension-footnote-0.3.2.tgz", + "integrity": "sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==", + "dev": true, + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", + "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", + "dev": true, + "dependencies": { + "micromark": "~2.11.0", + "micromark-extension-gfm-autolink-literal": "~0.5.0", + "micromark-extension-gfm-strikethrough": "~0.6.5", + "micromark-extension-gfm-table": "~0.4.0", + "micromark-extension-gfm-tagfilter": "~0.3.0", + "micromark-extension-gfm-task-list-item": "~0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", + "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", + "dev": true, + "dependencies": { + "micromark": "~2.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", + "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", + "dev": true, + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", + "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", + "dev": true, + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", + "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", + "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", + "dev": true, + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.0.0" + } + }, + "node_modules/minim": { + "version": "0.23.8", + "resolved": "https://registry.npmjs.org/minim/-/minim-0.23.8.tgz", + "integrity": "sha512-bjdr2xW1dBCMsMGGsUeqM4eFI60m94+szhxWys+B1ztIt6gWSfeGBdSVCIawezeHYLYn0j6zrsXdQS/JllBzww==", + "dev": true, + "dependencies": { + "lodash": "^4.15.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/msgpackr": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.9.7.tgz", + "integrity": "sha512-baUNaLvKQvVhzfWTNO07njwbZK1Lxjtb0P1JL6/EhXdLTHzR57/mZqqJC39TtQKvOmkJA4pcejS4dbk7BDgLLA==", + "dev": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz", + "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.0.7" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2" + } + }, + "node_modules/msgpackr-extract/node_modules/node-gyp-build-optional-packages": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", + "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "dev": true, + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/nlcst-to-string": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz", + "integrity": "sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-abi": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", + "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", + "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==", + "dev": true + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz", + "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==", + "dev": true, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-html-parser": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.4.2.tgz", + "integrity": "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==", + "dev": true, + "dependencies": { + "css-select": "^4.2.1", + "he": "1.2.0" + } + }, + "node_modules/node-html-parser/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/node-html-parser/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/node-html-parser/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/node-html-parser/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/node-html-parser/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-object-hash": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/node-object-hash/-/node-object-hash-2.3.10.tgz", + "integrity": "sha512-jY5dPJzw6NHd/KPSfPKJ+IHoFS81/tJ43r34ZeNMXGzCOM8jwQDCD12HYayKIB6MuznrnqIYy2e891NA2g0ibA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/not": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/not/-/not-0.1.0.tgz", + "integrity": "sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==", + "dev": true + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openapi-types": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", + "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", + "peer": true + }, + "node_modules/opentracing": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.7.tgz", + "integrity": "sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ordered-binary": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.1.tgz", + "integrity": "sha512-9LtiGlPy982CsgxZvJGNNp2/NnrgEr6EAyN3iIEP3/8vd3YLgAZQHbQ75ZrkfBRGrNg37Dk3U6tuVb+B4Xfslg==", + "dev": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-defer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", + "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "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/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "dev": true, + "dependencies": { + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/package-json/node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/package-json/node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "dev": true, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/package-json/node_modules/cacheable-request": { + "version": "10.2.13", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.13.tgz", + "integrity": "sha512-3SD4rrMu1msNGEtNSt8Od6enwdo//U9s4ykmXfA2TD58kcLkCobtCDiby7kNyj7a/Q7lz/mAesAFI54rTdnvBA==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "^4.0.1", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/package-json/node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "dev": true, + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/package-json/node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/package-json/node_modules/http2-wrapper": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", + "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/package-json/node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/package-json/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/package-json/node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dev": true, + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/package-json/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-english": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/parse-english/-/parse-english-4.2.0.tgz", + "integrity": "sha512-jw5N6wZUZViIw3VLG/FUSeL3vDhfw5Q2g4E3nYC69Mm5ANbh9ZWd+eligQbeUoyObZM8neynTn3l14e09pjEWg==", + "dev": true, + "dependencies": { + "nlcst-to-string": "^2.0.0", + "parse-latin": "^4.0.0", + "unist-util-modify-children": "^2.0.0", + "unist-util-visit-children": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-latin": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-4.3.0.tgz", + "integrity": "sha512-TYKL+K98dcAWoCw/Ac1yrPviU8Trk+/gmjQVaoWEFDZmVD4KRg6c/80xKqNNFQObo2mTONgF8trzAf2UTwKafw==", + "dev": true, + "dependencies": { + "nlcst-to-string": "^2.0.0", + "unist-util-modify-children": "^2.0.0", + "unist-util-visit-children": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", + "dev": true + }, + "node_modules/parse-path": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", + "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", + "dev": true, + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", + "dev": true + }, + "node_modules/parse-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", + "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", + "dev": true, + "dependencies": { + "parse-path": "^7.0.0" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/password-prompt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", + "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.2", + "cross-spawn": "^7.0.3" + } + }, + "node_modules/patch-package": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", + "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", + "dev": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^1.10.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=10", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/patch-package/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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/patch-package/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/patch-package/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/patch-package/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/patch-package/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/patch-package/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/patch-package/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/patch-package/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/patch-package/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/patch-package/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/patch-package/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/patch-package/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/path-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dev": true, + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/physical-cpu-count": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", + "integrity": "sha512-rxJOljMuWtYlvREBmd6TZYanfcPhNUKtGDZBjBBS8WG1dpN2iwPsRJZgQqN/OtJuiQckdRFOfzogqJClTrsi7g==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz", + "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz", + "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz", + "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz", + "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz", + "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz", + "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-loader": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", + "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/postcss-merge-longhand": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz", + "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^6.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz", + "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^4.0.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz", + "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz", + "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^4.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz", + "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^4.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz", + "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz", + "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz", + "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz", + "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz", + "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz", + "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz", + "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz", + "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz", + "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz", + "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz", + "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==", + "dev": true, + "dependencies": { + "cssnano-utils": "^4.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz", + "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz", + "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz", + "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.0.2" + }, + "engines": { + "node": "^14 || ^16 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz", + "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prebuild-install/node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prebuild-install/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prebuild-install/node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/prebuild-install/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/probe-image-size": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz", + "integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==", + "dev": true, + "dependencies": { + "lodash.merge": "^4.6.2", + "needle": "^2.5.2", + "stream-parser": "~0.3.1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dev": true, + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/protocols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "dev": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ramda": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", + "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, + "node_modules/ramda-adjunct": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ramda-adjunct/-/ramda-adjunct-4.1.1.tgz", + "integrity": "sha512-BnCGsZybQZMDGram9y7RiryoRHS5uwx8YeGuUeDKuZuvK38XO6JJfmK85BwRWAKFA6pZ5nZBO/HBFtExVaf31w==", + "dev": true, + "engines": { + "node": ">=0.10.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda-adjunct" + }, + "peerDependencies": { + "ramda": ">= 0.29.0" + } + }, + "node_modules/randexp": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", + "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", + "dev": true, + "dependencies": { + "drange": "^1.0.2", + "ret": "^0.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-copy-to-clipboard": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", + "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", + "dev": true, + "dependencies": { + "copy-to-clipboard": "^3.3.1", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": "^15.3.0 || 16 || 17 || 18" + } + }, + "node_modules/react-debounce-input": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/react-debounce-input/-/react-debounce-input-3.3.0.tgz", + "integrity": "sha512-VEqkvs8JvY/IIZvh71Z0TC+mdbxERvYF33RcebnodlsUZ8RSgyKe2VWaHXv4+/8aoOgXLxWrdsYs2hDhcwbUgA==", + "dev": true, + "dependencies": { + "lodash.debounce": "^4", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": "^15.3.0 || 16 || 17 || 18" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-dev-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/react-dev-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/react-dev-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/react-dev-utils/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", + "dev": true + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "dev": true + }, + "node_modules/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, + "node_modules/react-immutable-proptypes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/react-immutable-proptypes/-/react-immutable-proptypes-2.2.0.tgz", + "integrity": "sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ==", + "dev": true, + "dependencies": { + "invariant": "^2.2.2" + }, + "peerDependencies": { + "immutable": ">=3.6.2" + } + }, + "node_modules/react-immutable-pure-component": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-immutable-pure-component/-/react-immutable-pure-component-2.2.2.tgz", + "integrity": "sha512-vkgoMJUDqHZfXXnjVlG3keCxSO/U6WeDQ5/Sl0GK2cH8TOxEzQ5jXqDXHEL/jqk6fsNxV05oH5kD7VNMUE2k+A==", + "dev": true, + "peerDependencies": { + "immutable": ">= 2 || >= 4.0.0-rc", + "react": ">= 16.6", + "react-dom": ">= 16.6" + } + }, + "node_modules/react-inspector": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz", + "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==", + "dev": true, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-redux": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.2.tgz", + "integrity": "sha512-xJKYI189VwfsFc4CJvHqHlDrzyFTY/3vZACbE+rr/zQ34Xx1wQfB4OTOSeOSNrF6BDVe8OOdxIrAnMGXA3ggfw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4 || ^5.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-redux/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-server-dom-webpack": { + "version": "0.0.0-experimental-c8b778b7f-20220825", + "resolved": "https://registry.npmjs.org/react-server-dom-webpack/-/react-server-dom-webpack-0.0.0-experimental-c8b778b7f-20220825.tgz", + "integrity": "sha512-JyCjbp6ZvkH/T0EuVPdceYlC8u5WqWDSJr2KxDvc81H2eJ+7zYUN++IcEycnR2F+HmER8QVgxfotnIx352zi+w==", + "dev": true, + "dependencies": { + "acorn": "^6.2.1", + "loose-envify": "^1.1.0", + "neo-async": "^2.6.1" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "0.0.0-experimental-c8b778b7f-20220825", + "webpack": "^5.59.0" + } + }, + "node_modules/react-server-dom-webpack/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/react-side-effect": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", + "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", + "dev": true, + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-syntax-highlighter": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz", + "integrity": "sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.3.1", + "highlight.js": "^10.4.1", + "lowlight": "^1.17.0", + "prismjs": "^1.27.0", + "refractor": "^3.6.0" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "dev": true, + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/receptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/receptor/-/receptor-1.0.0.tgz", + "integrity": "sha512-yvVEqVQDNzEmGkluCkEdbKSXqZb3WGxotI/VukXIQ+4/BXEeXVjWtmC6jWaR1BIsmEAGYQy3OTaNgDj2Svr01w==", + "dev": true, + "dependencies": { + "element-closest": "^2.0.1", + "keyboardevent-key-polyfill": "^1.0.2", + "matches-selector": "^1.0.0", + "object-assign": "^4.1.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "dev": true, + "peerDependencies": { + "redux": "^4" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", + "integrity": "sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/refractor": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", + "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", + "dev": true, + "dependencies": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.27.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/refractor/node_modules/prismjs": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", + "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "dev": true, + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "dev": true, + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/relay-runtime": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-12.0.0.tgz", + "integrity": "sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.0.0", + "fbjs": "^3.0.0", + "invariant": "^2.2.4" + } + }, + "node_modules/remark": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "dev": true, + "dependencies": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-footnotes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-3.0.0.tgz", + "integrity": "sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==", + "dev": true, + "dependencies": { + "mdast-util-footnote": "^0.1.0", + "micromark-extension-footnote": "^0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", + "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", + "dev": true, + "dependencies": { + "mdast-util-gfm": "^0.1.0", + "micromark-extension-gfm": "^0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "dev": true, + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-retext": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-retext/-/remark-retext-4.0.0.tgz", + "integrity": "sha512-cYCchalpf25bTtfXF24ribYvqytPKq0TiEhqQDBHvVEEsApebwruPWP1cTcvTFBidmpXyqzycm+y8ng7Kmvc8Q==", + "dev": true, + "dependencies": { + "mdast-util-to-nlcst": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", + "dev": true, + "dependencies": { + "mdast-util-to-markdown": "^0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remarkable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz", + "integrity": "sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==", + "dev": true, + "dependencies": { + "argparse": "^1.0.10", + "autolinker": "^3.11.0" + }, + "bin": { + "remarkable": "bin/remarkable.js" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/remarkable/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/remarkable/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/require-package-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", + "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-id-refs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/resolve-id-refs/-/resolve-id-refs-0.1.0.tgz", + "integrity": "sha512-hNS03NEmVpJheF7yfyagNh57XuKc0z+NkSO0oBbeO67o6IJKoqlDfnNIxhjp7aTWwjmSWZQhtiGrOgZXVyM90w==", + "dev": true + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/retext-english": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/retext-english/-/retext-english-3.0.4.tgz", + "integrity": "sha512-yr1PgaBDde+25aJXrnt3p1jvT8FVLVat2Bx8XeAWX13KXo8OT+3nWGU3HWxM4YFJvmfqvJYJZG2d7xxaO774gw==", + "dev": true, + "dependencies": { + "parse-english": "^4.0.0", + "unherit": "^1.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "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" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sanitize-html": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.11.0.tgz", + "integrity": "sha512-BG68EDHRaGKqlsNjJ2xUB7gpInPA8gVx/mvjO743hZaeMCZ2DwzW7xvsqZ+KNU4QKwj86HJ3uu2liISf2qBBUA==", + "dev": true, + "dependencies": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^8.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, + "node_modules/sanitize-html/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sass": { + "version": "1.66.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz", + "integrity": "sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.4.1.tgz", + "integrity": "sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "sass": "^1.3.0", + "webpack": "^4.36.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/sass-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sass-loader/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sass-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/sass/node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "dev": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "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": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallow-compare": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/shallow-compare/-/shallow-compare-1.2.2.tgz", + "integrity": "sha512-LUMFi+RppPlrHzbqmFnINTrazo0lPNwhcgzuAXVVcfy/mqPDrQmHAyz5bvV0gDAuRFrk804V0HpQ6u9sZ0tBeg==", + "dev": true + }, + "node_modules/sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.4", + "simple-get": "^4.0.1", + "tar-fs": "^3.0.4", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sharp/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp/node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/short-unique-id": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-4.4.4.tgz", + "integrity": "sha512-oLF1NCmtbiTWl2SqdXZQbo5KM1b7axdp0RgQLq8qCBBLoq+o3A5wmLrNM6bZIh54/a8BJ3l69kTXuxwZ+XCYuw==", + "dev": true, + "bin": { + "short-unique-id": "bin/short-unique-id", + "suid": "bin/short-unique-id" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/signedsource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz", + "integrity": "sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==", + "dev": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "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": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/socket.io": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", + "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dev": true, + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-client": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.1.tgz", + "integrity": "sha512-Qk3Xj8ekbnzKu3faejo4wk2MzXA029XppiXtTF/PkbTg+fcwaTw1PlDrTrrrU4mKoYC4dvlApOnSeyLCKwek2w==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/sponge-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sponge-case/-/sponge-case-1.0.1.tgz", + "integrity": "sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "node_modules/stampit": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stampit/-/stampit-4.3.2.tgz", + "integrity": "sha512-pE2org1+ZWQBnIxRPrBM2gVupkuDD0TTNIo1H6GdT/vO82NXli2z8lRE8cu/nBIHrcOCXFBAHpb9ZldrB2/qOA==", + "dev": true + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "dev": true, + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stream-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/streamx": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", + "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "dev": true + }, + "node_modules/string-similarity": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-1.2.2.tgz", + "integrity": "sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "dependencies": { + "lodash.every": "^4.6.0", + "lodash.flattendeep": "^4.4.0", + "lodash.foreach": "^4.5.0", + "lodash.map": "^4.6.0", + "lodash.maxby": "^4.6.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-entities": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", + "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", + "dev": true, + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/style-to-object": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.2.tgz", + "integrity": "sha512-1JGpfPB3lo42ZX8cuPrheZbfQ6kqPPnPHlKMyeRYtfKD+0jG+QsXgXN57O/dvJlzlB2elI6dGmrPnl5VPQFPaA==", + "dev": true, + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/stylehacks": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz", + "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/sudo-prompt": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", + "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", + "dev": true + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", + "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/swagger-client": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.20.0.tgz", + "integrity": "sha512-5RLge2NIE1UppIT/AjUPEceT05hcBAzjiQkrXJYjpxsbFV/UDH3pp+fsrWbAeuZtgRdhNB9KDo+szLoUpzkydQ==", + "dev": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.13", + "@swagger-api/apidom-core": ">=0.74.1 <1.0.0", + "@swagger-api/apidom-json-pointer": ">=0.74.1 <1.0.0", + "@swagger-api/apidom-ns-openapi-3-1": ">=0.74.1 <1.0.0", + "@swagger-api/apidom-reference": ">=0.74.1 <1.0.0", + "cookie": "~0.5.0", + "cross-fetch": "^3.1.5", + "deepmerge": "~4.3.0", + "fast-json-patch": "^3.0.0-1", + "form-data-encoder": "^1.4.3", + "formdata-node": "^4.0.0", + "is-plain-object": "^5.0.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "qs": "^6.10.2", + "traverse": "~0.6.6", + "url": "~0.11.0" + } + }, + "node_modules/swagger-jsdoc": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/swagger-jsdoc/-/swagger-jsdoc-5.0.1.tgz", + "integrity": "sha512-Yxrulj5E2dY9HUHjryckFPG66YTwi8pih80pocNacGAojE8J7eN99Cx7NLQx+8sV2C3cnFVbrYVISCLpgmb6aA==", + "dependencies": { + "commander": "6.2.0", + "doctrine": "3.0.0", + "glob": "7.1.6", + "js-yaml": "3.14.0", + "swagger-parser": "10.0.2" + }, + "bin": { + "swagger-jsdoc": "bin/swagger-jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/swagger-jsdoc/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/swagger-jsdoc/node_modules/commander": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/swagger-jsdoc/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/swagger-jsdoc/node_modules/js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/swagger-jsdoc/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/swagger-parser": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-10.0.2.tgz", + "integrity": "sha512-9jHkHM+QXyLGFLk1DkXBwV+4HyNm0Za3b8/zk/+mjr8jgOSiqm3FOTHBSDsBjtn9scdL+8eWcHdupp2NLM8tDw==", + "dependencies": { + "@apidevtools/swagger-parser": "10.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/swagger-ui-react": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-4.19.1.tgz", + "integrity": "sha512-km83cp5ZlmCfROOq6QD1E7bM9f0RsvNrM2C1756UqZ6rRM0J3ex3ySyWa5+mcJRltn0eUB5NahqW8c6I4qwC6A==", + "dev": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.22.5", + "@braintree/sanitize-url": "=6.0.2", + "base64-js": "^1.5.1", + "classnames": "^2.3.1", + "css.escape": "1.5.1", + "deep-extend": "0.6.0", + "dompurify": "=3.0.2", + "ieee754": "^1.2.1", + "immutable": "^3.x.x", + "js-file-download": "^0.4.12", + "js-yaml": "=4.1.0", + "lodash": "^4.17.21", + "patch-package": "^6.5.0", + "prop-types": "^15.8.1", + "randexp": "^0.5.3", + "randombytes": "^2.1.0", + "react-copy-to-clipboard": "5.1.0", + "react-debounce-input": "=3.3.0", + "react-immutable-proptypes": "2.2.0", + "react-immutable-pure-component": "^2.2.0", + "react-inspector": "^6.0.1", + "react-redux": "^8.0.5", + "react-syntax-highlighter": "^15.5.0", + "redux": "^4.1.2", + "redux-immutable": "^4.0.0", + "remarkable": "^2.0.1", + "reselect": "^4.1.8", + "serialize-error": "^8.1.0", + "sha.js": "^2.4.11", + "swagger-client": "^3.19.8", + "url-parse": "^1.5.8", + "xml": "=1.0.1", + "xml-but-prettier": "^1.0.1", + "zenscroll": "^4.0.2" + }, + "peerDependencies": { + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/swagger-ui-react/node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swagger-ui-react/node_modules/redux-immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redux-immutable/-/redux-immutable-4.0.0.tgz", + "integrity": "sha512-SchSn/DWfGb3oAejd+1hhHx01xUoxY+V7TeK0BKqpkLKiQPVFf7DYzEaKmrEVxsWxielKfSK9/Xq66YyxgR1cg==", + "dev": true, + "peerDependencies": { + "immutable": "^3.8.1 || ^4.0.0-rc.1" + } + }, + "node_modules/swap-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-2.0.2.tgz", + "integrity": "sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-fs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "dev": true, + "dependencies": { + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "node_modules/tar-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/terser": { + "version": "5.19.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "node_modules/title-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", + "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", + "dev": true + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tree-sitter": { + "version": "0.20.4", + "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.20.4.tgz", + "integrity": "sha512-rjfR5dc4knG3jnJNN/giJ9WOoN1zL/kZyrS0ILh+eqq8RNcIbiXA63JsMEgluug0aNvfQvK4BfCErN1vIzvKog==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "nan": "^2.17.0", + "prebuild-install": "^7.1.1" + } + }, + "node_modules/tree-sitter-json": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/tree-sitter-json/-/tree-sitter-json-0.20.0.tgz", + "integrity": "sha512-PteOLH+Tx6Bz4ZA/d40/DbkiSXXRM/gKahhHI8hQ1lWNfFvdknnz9k3Mz84ol5srRyLboJ8wp8GSkhZ6ht9EGQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "nan": "^2.14.1" + } + }, + "node_modules/tree-sitter-yaml": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/tree-sitter-yaml/-/tree-sitter-yaml-0.5.0.tgz", + "integrity": "sha512-POJ4ZNXXSWIG/W4Rjuyg36MkUD4d769YRUGKRqN+sVaj/VCo6Dh6Pkssn1Rtewd5kybx+jT1BWMyWN0CijXnMA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "nan": "^2.14.0" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", + "dev": true + }, + "node_modules/ts-toolbelt": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "dev": true + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-of/-/type-of-2.0.1.tgz", + "integrity": "sha512-39wxbwHdQ2sTiBB8wAzKfQ9GN+om8w+sjNWzr+vZJR5AMD5J+J7Yc8AtXnU9r/r2c8XiDZ/smxutDmZehX/qpQ==", + "dev": true + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/types-ramda": { + "version": "0.29.4", + "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.29.4.tgz", + "integrity": "sha512-XO/820iRsCDwqLjE8XE+b57cVGPyk1h+U9lBGpDWvbEky+NQChvHVwaKM05WnW1c5z3EVQh8NhXFmh2E/1YazQ==", + "dev": true, + "dependencies": { + "ts-toolbelt": "^9.6.0" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", + "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/underscore.string": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", + "dev": true, + "dependencies": { + "sprintf-js": "^1.1.1", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dev": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-2.0.0.tgz", + "integrity": "sha512-HGrj7JQo9DwZt8XFsX8UD4gGqOsIlCih9opG6Y+N11XqkBGKzHo8cvDi+MfQQgiZ7zXRUiQREYHhjOBHERTMdg==", + "dev": true, + "dependencies": { + "array-iterate": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-3.0.0.tgz", + "integrity": "sha512-17kIOuolVuK16LMb9KyMJlqdfCtlfQY5FjY3Sdo9iC7F5wqdXhNjMq0PBvMpkVNNnAmHxXssUW+rZ9T2zbP0Rg==", + "dev": true, + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-select": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/unist-util-select/-/unist-util-select-3.0.4.tgz", + "integrity": "sha512-xf1zCu4okgPqGLdhCDpRnjwBNyv3EqjiXRUbz2SdK1+qnLMB7uXXajfzuBvvbHoQ+JLyp4AEbFCGndmc6S72sw==", + "dev": true, + "dependencies": { + "css-selector-parser": "^1.0.0", + "not": "^0.1.0", + "nth-check": "^2.0.0", + "unist-util-is": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-1.1.4.tgz", + "integrity": "sha512-sA/nXwYRCQVRwZU2/tQWUqJ9JSFM1X3x7JIOsIgSzrFHcfVt6NkzDtKzyxg2cZWkCwGF9CO8x4QNZRJRMK8FeQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unixify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", + "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", + "dev": true, + "dependencies": { + "normalize-path": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unixify/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unraw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unraw/-/unraw-3.0.0.tgz", + "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.1.tgz", + "integrity": "sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "dev": true, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/uswds": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/uswds/-/uswds-2.14.0.tgz", + "integrity": "sha512-r5ebL3av9jOPcbXTxKnGiT5k5NVIAWmtYcO8LeJkA5Svh2qc90YRhzCUWbz9TbGdXJriMCPb7whiULPDxmRhxg==", + "dev": true, + "dependencies": { + "classlist-polyfill": "1.2.0", + "domready": "1.0.8", + "object-assign": "4.1.1", + "receptor": "1.0.0", + "resolve-id-refs": "0.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "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==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", + "dev": true + }, + "node_modules/valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", + "dev": true + }, + "node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/web-tree-sitter": { + "version": "0.20.3", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.20.3.tgz", + "integrity": "sha512-zKGJW9r23y3BcJusbgvnOH2OYAW40MXAOi9bi3Gcc7T4Gms9WWgXF8m6adsJWpGJEhgOzCrfiz1IzKowJWrtYw==", + "dev": true, + "optional": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", + "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", + "dev": true, + "dependencies": { + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.30", + "range-parser": "^1.2.1", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= v10.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-stats-plugin": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/webpack-stats-plugin/-/webpack-stats-plugin-1.1.3.tgz", + "integrity": "sha512-yUKYyy+e0iF/w31QdfioRKY+h3jDBRpthexBOWGKda99iu2l/wxYsI/XqdlP5IU58/0KB9CsJZgWNAl+/MPkRw==", + "dev": true + }, + "node_modules/webpack-virtual-modules": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", + "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", + "dev": true + }, + "node_modules/webpack/node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "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==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", + "dev": true + }, + "node_modules/xml-but-prettier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-but-prettier/-/xml-but-prettier-1.0.1.tgz", + "integrity": "sha512-C2CJaadHrZTqESlH03WOyw0oZTtoy2uEg6dSDF6YRg+9GnYNub53RRemLpnvtbHDFelxMx4LajiFsYeR6XJHgQ==", + "dev": true, + "dependencies": { + "repeat-string": "^1.5.2" + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xstate": { + "version": "4.38.2", + "resolved": "https://registry.npmjs.org/xstate/-/xstate-4.38.2.tgz", + "integrity": "sha512-Fba/DwEPDLneHT3tbJ9F3zafbQXszOlyCJyQqqdzmtlY/cwE2th462KK48yaANf98jHlP6lJvxfNtN0LFKXPQg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/xstate" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/xxhash-wasm": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", + "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==", + "dev": true + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yaml-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/yaml-loader/-/yaml-loader-0.8.0.tgz", + "integrity": "sha512-LjeKnTzVBKWiQBeE2L9ssl6WprqaUIxCSNs5tle8PaDydgu3wVFXTbMfsvF2MSErpy9TDVa092n4q6adYwJaWg==", + "dev": true, + "dependencies": { + "javascript-stringify": "^2.0.1", + "loader-utils": "^2.0.0", + "yaml": "^2.0.0" + }, + "engines": { + "node": ">= 12.13" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoga-layout-prebuilt": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.10.0.tgz", + "integrity": "sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==", + "dev": true, + "dependencies": { + "@types/yoga-layout": "1.9.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yurnalist": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/yurnalist/-/yurnalist-2.1.0.tgz", + "integrity": "sha512-PgrBqosQLM3gN2xBFIMDLACRTV9c365VqityKKpSTWpwR+U4LAFR3rSVyEoscWlu3EzX9+Y0I86GXUKxpHFl6w==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "inquirer": "^7.0.0", + "is-ci": "^2.0.0", + "read": "^1.0.7", + "strip-ansi": "^5.2.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/yurnalist/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yurnalist/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/z-schema": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-4.2.4.tgz", + "integrity": "sha512-YvBeW5RGNeNzKOUJs3rTL4+9rpcvHXt5I051FJbOcitV8bl40pEfcG0Q+dWSwS0/BIYrMZ/9HHoqLllMkFhD0w==", + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.6.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=6.0.0" + }, + "optionalDependencies": { + "commander": "^2.7.1" + } + }, + "node_modules/z-schema/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "optional": true + }, + "node_modules/zenscroll": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zenscroll/-/zenscroll-4.0.2.tgz", + "integrity": "sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==", + "dev": true + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 00000000..9612f028 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,84 @@ +{ + "name": "crossfeed-docs", + "description": "Crossfeed Documentation", + "version": "1.0.0", + "engines": { + "node": ">=18.0.0" + }, + "engineStrict": true, + "scripts": { + "clean": "rimraf .cache public _site", + "build": "gatsby build", + "reset": "npx rimraf .git", + "develop": "gatsby develop", + "format": "prettier --write \"**/*.{js,jsx,json,md}\"", + "lint": "prettier --check \"**/*.{js,jsx,json,md}\"", + "start": "npm run develop", + "serve": "gatsby serve", + "codegen": "swagger-jsdoc -d ./src/swaggerDef.js -o ./src/generated/swagger.json", + "postinstall": "npm run codegen" + }, + "devDependencies": { + "@fortawesome/fontawesome-svg-core": "^1.2.32", + "@fortawesome/free-solid-svg-icons": "^5.15.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "classnames": "^2.2.6", + "eslint-config-react-app": "^7.0.1", + "gatsby": "^5.9.0", + "gatsby-cli": "^5.9.0", + "gatsby-plugin-manifest": "^5.9.0", + "gatsby-plugin-meta-redirect": "^1.1.1", + "gatsby-plugin-react-helmet": "^6.8.0", + "gatsby-plugin-sass": "^6.8.0", + "gatsby-plugin-sharp": "^5.9.0", + "gatsby-remark-autolink-headers": "^6.8.0", + "gatsby-remark-images": "^7.8.0", + "gatsby-remark-prismjs": "^7.8.0", + "gatsby-source-filesystem": "^5.9", + "gatsby-transformer-remark": "^6.10.0", + "html-loader": "^4.2.0", + "prettier": "^2.1.2", + "prismjs": "^1.27.0", + "prop-types": "^15.7.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-helmet": "^6.1.0", + "rimraf": "^3.0.2", + "sass": "^1.61.0", + "swagger-ui-react": "^4.19.0", + "uswds": "^2.13.3", + "@typescript-eslint/eslint-plugin": "^5.59.0", + "@typescript-eslint/parser": "^5.59.0", + "@babel/eslint-parser": "^7.22.5", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0" + }, + "dependencies": { + "@reach/router": "^1.3.4", + "clipboardy": "^3.0.0", + "resolve-url-loader": "^5.0.0", + "swagger-jsdoc": "^5.0.1" + }, + "overrides": { + "@typescript-eslint/eslint-plugin": "$@typescript-eslint/eslint-plugin", + "@typescript-eslint/parser": "$@typescript-eslint/parser", + "babel-eslint": "npm:@babel/eslint-parser", + "clipboardy": { + "execa": "5.1.1" + }, + "css-minimizer-webpack-plugin":"^5.0.0", + "engine.io": "6.4.2", + "gatsby": { + "cache-manager": "^5.2.1" + }, + "react": "$react", + "react-dom": "$react-dom", + "resolve-url-loader": "$resolve-url-loader", + "simple-get": "^4.0.1", + "socket.io": "4.6.1", + "yaml": "^2.2.2" + } +} \ No newline at end of file diff --git a/docs/src/components/banner.js b/docs/src/components/banner.js new file mode 100644 index 00000000..cae44595 --- /dev/null +++ b/docs/src/components/banner.js @@ -0,0 +1,79 @@ +import React from 'react'; +import flag from '../../node_modules/uswds/dist/img/us_flag_small.png'; +import dotGov from '../../node_modules/uswds/dist/img/icon-dot-gov.svg'; +import https from '../../node_modules/uswds/dist/img/icon-https.svg'; + +const Banner = () => ( +
            +
            +
            +
            +
            + U.S. flag +
            +
            +

            + An official website of the United States government +

            + +
            + +
            +
            + +
            +
            +); + +export default Banner; diff --git a/docs/src/components/footer.js b/docs/src/components/footer.js new file mode 100644 index 00000000..21b6c8c3 --- /dev/null +++ b/docs/src/components/footer.js @@ -0,0 +1,37 @@ +import React from 'react'; +import logo from '../../node_modules/uswds/dist/img/logo-img.png'; + +const Footer = () => ( +
            + {/*
            +
            +
            +
            +
            + + Agency logo + +
            +
            +
            +
            +
              +
            • Footer link
            • +
            • Footer link
            • +
            • Footer link
            • +
            +
            +
            +
              +
            • Footer link
            • +
            • Footer link
            • +
            • Footer link
            • +
            +
            +
            +
            +
            */} +
            +); + +export default Footer; diff --git a/docs/src/components/header.js b/docs/src/components/header.js new file mode 100644 index 00000000..689b6eb0 --- /dev/null +++ b/docs/src/components/header.js @@ -0,0 +1,29 @@ +import { Link } from 'gatsby'; +import PropTypes from 'prop-types'; +import React from 'react'; + +const Header = ({ children, siteTitle }) => ( +
            +
            + + +
            + {children} +
            +); + +Header.propTypes = { + siteTitle: PropTypes.string, +}; + +Header.defaultProps = { + siteTitle: ``, +}; + +export default Header; diff --git a/docs/src/components/hero.js b/docs/src/components/hero.js new file mode 100644 index 00000000..38c41b51 --- /dev/null +++ b/docs/src/components/hero.js @@ -0,0 +1,28 @@ +import React from 'react'; +import image from '../images/crossfeed-search-result.png'; + +/* + This will be displayed on the homepage. Ideally, you want to highlight key goals of the website +*/ + +const Hero = () => ( +
            +
            +
            +

            + {/* Understand your infrastructure. */} + Understand your infrastructure. +

            +

            + Crossfeed lets you monitor and discover your public-facing + infrastructure, as well as bring better visibility to vulnerabilities. +

            + + Learn more + +
            +
            +
            +); + +export default Hero; diff --git a/docs/src/components/highlights.js b/docs/src/components/highlights.js new file mode 100644 index 00000000..7145cd9c --- /dev/null +++ b/docs/src/components/highlights.js @@ -0,0 +1,110 @@ +import React from 'react'; +import circle from '../../node_modules/uswds/dist/img/circle-124.png'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { + faBoxes, + faExclamationTriangle, + faTasks, + faChartLine, +} from '@fortawesome/free-solid-svg-icons'; + +/* + Use this section to highlight key elements of your site. Some sites will only have two while others may have six to eight. +*/ + +const Highlights = () => ( +
            +
            +
            +
            +
            + Alt text + +
            + +
            +

            + Analyze your entire inventory of public-facing sites. +

            +

            + Users only have to give Crossfeed a root domain, and it will + discover related assets that they may not have been aware of + before. Crossfeed can discover all related subdomains and help + users understand when certain websites or webpages were + unintentionally exposed. +

            +
            +
            +
            +
            + Alt text + +
            +
            +

            + Manage and triage your vulnerabilities. +

            +

            + Users can view detailed information about CVEs on the + Vulnerabilities page, as well as mark vulnerabilities identified + by Crossfeed with different statuses, such as “False Positive” or + “Remediated.” +

            +
            +
            +
            +
            +
            +
            + Alt text + +
            +
            +

            + Control automated scans on your assets. +

            +

            + Users can view a list of which scans were performed on their + assets and enable or disable certain scans at any time. + Additionally, all Internet traffic from Crossfeed to customers’ + assets are clearly marked and identifiable as so. +

            +
            +
            +
            +
            + Alt text + +
            +
            +

            + View an “at-a-glance” dashboard for a risk summary overview. +

            +

            + Users have access to a “Risk Summary” dashboard that has graphs / + charts to highlight the most important vulnerabilities and assets + to focus on. +

            +
            +
            +
            + + +
            +
            +); + +export default Highlights; diff --git a/docs/src/components/layout.js b/docs/src/components/layout.js new file mode 100644 index 00000000..ec44ac49 --- /dev/null +++ b/docs/src/components/layout.js @@ -0,0 +1,62 @@ +/** + * Layout component that queries for data + * with Gatsby's useStaticQuery component + * + * See: https://www.gatsbyjs.org/docs/use-static-query/ + */ + +import React from 'react'; +import PropTypes from 'prop-types'; +import { useStaticQuery, graphql } from 'gatsby'; + +import Banner from './banner'; +import Footer from './footer'; +import Header from './header'; +import Nav from './nav'; + +const Layout = ({ children }) => { + const data = useStaticQuery(graphql` + query SiteTitleQuery { + site { + siteMetadata { + title + navigation { + title + items { + text + link + rootLink + } + } + secondaryLinks { + text + link + } + } + } + } + `); + + const { title, navigation, secondaryLinks } = data.site.siteMetadata; + + return ( + <> + + Skip to main content + + +
            +
            +
            + {children} +